https://d226lax1qjow5r.cloudfront.net/blog/blogposts/home-automation-using-esp32-and-vonage-sms-api/home-automation_vonagesms.png

Hausautomatisierung mit ESP32 und Vonage SMS API

Zuletzt aktualisiert am August 24, 2023

Lesedauer: 5 Minuten

Einführung

Das Internet der Dinge (IoT) ist in den letzten Jahren immer beliebter geworden. Intelligente Geräte ermöglichen es dem Einzelnen, verschiedene Aspekte seines Zuhauses aus der Ferne zu steuern. Vonage ist eine Cloud-Kommunikationsplattform, die es Unternehmen ermöglicht, über SMS-, Sprach- und Messaging-Apps mit Kunden in Kontakt zu treten.

In diesem Artikel erfahren Sie, wie Sie Vonage SMS für die Hausautomatisierung mit dem ESP32-Mikrocontroller nutzen können. Wir werden Sie durch die Schritte zur Einrichtung des Systems führen und erklären, wie es funktioniert. Das Ziel ist die Steuerung von Heimgeräten mit ESP32 über eine SMS, die über die Vonage SMS API an Ihr Telefon gesendet wird.

Voraussetzungen

Technischer Überblick über die App

Die Vonage SMS API kommuniziert mit dem ESP32 über einen Webhook. Wenn Vonage eine SMS empfängt, sendet Vonage über den Webhook eine POST-Anfrage an den Endpunkt des ESP32.

Der ESP32 parst dann die JSON-Nutzdaten, führt eine digitalWrite() Funktion aus und sendet eine POST-Anfrage an die Vonage SMS API mit dem Status des Vorgangs (Erfolg/Misserfolg), um den Endbenutzer zu informieren, was passiert ist.

A diagram showing the process: Vonage SMS API sends a request to Ngrok - Ngrok sends it to ESP32, and ESP32 sends it back to Vonageapplication-overview-diagram.png

Schritt 1: Einrichten des ESP32 Request Handlers

Um zu beginnen, müssen Sie die ArudinoJson und ESPAsyncWebSrv Bibliotheken installieren. Diese Bibliotheken ermöglichen es Ihnen, eingehende Anfragen von der Vonage SMS API zu bearbeiten.

  1. Öffnen Sie die Arduino IDE

  2. Öffnen Sie die Library Manager auf dem linken Bedienfeld.

  3. Suche nach ArduinoJson

Showing ArduinoJson in the Arduino IDEarduinojson-arduino-ide.png

  1. Presse Install

  2. Suche nach ESPAsyncWebSrv

Showing ESPAsyncWebSrv in the Arduino IDEespasyncwebsrv-arduino-ide.png

  1. Presse Install

Sobald Sie die Bibliotheken installiert haben, können Sie das WiFi und den Request Handler einrichten. Der Request Handler bearbeitet eingehende Anfragen und leitet sie an die entsprechende Funktion weiter.

Erstellen Sie eine neue Datei (Skizze), indem Sie zu File > New Sketch. Fügen Sie dann alle unten aufgeführten Bibliotheken ein.

#include "AsyncJson.h"
#include "ArduinoJson.h"
#include "ESPAsyncWebSrv.h"

Als nächstes wird der Webserver initialisiert.

AsyncWebServer server(80);

WiFi-Anmeldedaten hinzufügen.

const char *ssid = "Your WiFi name here";
const char *password = "Your WiFi password here";

Hinzufügen einer Fallback-Funktion zur Behandlung von 404 Anfragen.

void onRequest(AsyncWebServerRequest *request) {
    request->send(404);
}

Fügen Sie nun eine setup() Funktion hinzu, die die gesamte Logik, beginnend mit der WiFi-Einrichtung, übernimmt.

void setup() {
    // Start a serial connection at a 115200 baud rate
    Serial.begin(115200);
    WiFi.mode(WIFI_STA);
    WiFi.begin(ssid, password);
    if (WiFi.waitForConnectResult() != WL_CONNECTED) {
        Serial.printf("WiFi Failed!\n");
        return;
    }
    Serial.println(WiFi.localIP());
    WiFiClient client;
    HTTPClient http;
}

Dann, innerhalb der setup() Funktion einen Endpunkt, um das eingehende JSON von Vonage zu verarbeiten.

AsyncCallbackJsonWebHandler *handler = new AsyncCallbackJsonWebHandler("/inbound", [](AsyncWebServerRequest *request, JsonVariant &json) {

Beginnen Sie mit der Erstellung eines dynamischen JSON-Dokuments innerhalb der *handler.

DynamicJsonDocument doc(2048)

Prüfen Sie nun auf Deserialisierungsfehler. Diese sollten nicht auftreten, aber wir müssen sie behandeln, damit die ESP32-Kerne nicht in Panik geraten.

DeserializationError error = deserializeJson(doc, json); if (error) {
    // Handle the error
    Serial.println(error.c_str()); request->send(400, "text/plain", "Invalid JSON payload"); return;
}

Fahren Sie mit der Erstellung eines JSON-Objekts fort.

JsonObject jsonObj = doc.as();

Um die Dinge einfach zu halten, werden wir nur den text Schlüssel aus der Nutzlast, der angibt, was mit dem zu steuernden Gerät geschehen soll.

String text = jsonObj["text"].as();

Das war's für den Teil der JSON-Verarbeitung. Um einen digitalen Pin zu steuern, fügen Sie eine bedingte Logik hinzu, die je nach Textinhalt eine Anfrage an Vonage sendet. Wenn der Benutzer beispielsweise "ON" sendet, sendet der Request Handler die Nachricht "Turned ON!" an Vonage.

Ein digitaler Pin auf dem ESP32 ist ein Pin, der auf einen von zwei Zuständen gesetzt werden kann: HIGH (1) oder LOW (0). Er kann für verschiedene Zwecke verwendet werden, z.B. zum Lesen des Zustands eines Sensors (digitaler Eingang) oder zum Steuern des Zustands eines Aktors (digitaler Ausgang).

if (text == "ON") {
    digitalWrite(controlPin, HIGH);
    request->send(200, "text/plain", "Turned ON!");
} else {
    digitalWrite(controlPin, LOW);
    request->send(200, "text/plain", "Turned OFF!");
}

Fügen Sie abschließende Server-Handler außerhalb der *handler um es zu beenden.

server.addHandler(onBody);
server.addHandler(handler);
server.onNotFound(onRequest);
server.begin();

Damit das funktioniert, müssen wir diesen digitalen Pin definieren. Das können wir tun, nachdem wir die Bibliotheken am Anfang des Codes eingebunden haben.

#include "AsyncJson.h"
#include "ArduinoJson.h"
#include "ESPAsyncWebSrv.h"
#define controlPin 13

Schritt 2: Einrichten des ESP32-Anforderungssenders

Nachdem Sie nun den Request-Handler eingerichtet haben, können Sie nach der Aktualisierung der Pin die Vonage SMS API mit dem Betriebsstatus (Erfolg/Misserfolg) anfordern. Fügen Sie die folgende Konfiguration am Anfang des Codes hinzu.

const char *ssid = "Your WiFi name here";
const char *password = "Your WiFi password here";
#define API_ENDPOINT = "https://rest.nexmo.com/sms/json"
#define FROM = "$VONAGE_BRAND_NAME"
#define TO = "Your phone number"
#define API_KEY = "$VONAGE_API_KEY"
#define API_SECRET = "$VONAGE_API_SECRET"

Erstellen Sie eine neue Funktion, die Anfragen an Vonage sendet.

bool requestSender (String state) {
    http.begin(client, API_ENDPOINT.c_str());
    http.addHeader('Content-Type', 'application/json');
    String httpRequestData = "{\"from\":\"" + FROM.c_str() + "\",\"text\":\"," + state.c_str() + "\"\"to\":\"" + TO.c_str() + "\",\"api_key\":\"" + API_KEY.c_str() + "\",\"api_secret\":\"" + API_SECRET.c_str();
    int httpResponseCode = http.POST(httpRequestData);
    http.end();
    if (httpResponseCode == 200) return true;
    return false;
}

Um die Anfrage nicht hängen zu lassen, fügen Sie eine einfache zustandsabhängige Funktion hinzu.

void manageState (bool state, AsyncWebServerRequest *request) {
    if (state) {
        request->send(200, "text/plain", stateText);
        return;
    }
    request->send(200, "text/plain", "Something went wrong");
    return;
    }

Integrieren Sie all dies in *handler wo die bedingte Logik stattfindet.

bool state = false;
String stateText = "";
if (text == "ON") {
    digitalWrite(controlPin, HIGH);
    stateText = "Turned ON!";
    Serial.println(stateText);
    state = requestSender(stateText);
    manageState(state);
} else {
    digitalWrite(controlPin, LOW);
    stateText = "Turned OFF!";
    Serial.println(stateText);
    state = requestSender(stateText);
    manageState(state);
}

Schritt 3: Wie man Ngrok mit ESP32 einrichtet

Um den Webhook lokal zu testen, können Sie ngrok. Ngrok ermöglicht es Ihnen, Ihren lokalen Endpunkt dem Internet auszusetzen und eingehende Anfragen von der Vonage SMS API zu empfangen.

Sie können ngrok lokal auf Ihrem Computer installieren und ausführen. Um ngrok zu installieren, navigieren Sie zur ngrok's Download-Seite. Folgen Sie den betriebssystemspezifischen Anweisungen von ngrok.

ngrok Download Pagengrok-download-page.png

Schalten Sie nun Ihren ESP32 ein und warten Sie, bis er sich mit dem Netzwerk verbindet. Verbinden Sie ihn mit einem USB-Anschluss an Ihrem Computer und öffnen Sie den Serial Monitor in der Arduino IDE.

Kopieren Sie aus dem seriellen Monitor die IP-Adresse des ESP32, die beim Hochfahren angezeigt wird.

ESP32's Local IP Address shown inside Arduino IDE's Serial Monitoresp32-local-ip-arduino-ide.png

Öffnen Sie nun ein neues Terminalfenster auf Ihrem Computer. Führen Sie aus. ngrok http <esp32-ip-address>:80. Ersetzen Sie <esp32-ip-address> durch die lokale IP-Adresse Ihres ESP32.

Zum Beispiel, ngrok http 10.10.1.10:80. ngrok wird nun einen öffentlich zugänglichen Tunnel zu Ihrem ESP32 öffnen.

ngrok CLI Tunnel information shown inside a terminal windowngrok-cli-output-terminal.png

Schritt 4: Einrichtung des Vonage Webhooks

Nachdem Sie nun den ESP32 und den ngrok-Tunnel eingerichtet haben, können Sie den Vonage Webhook einrichten. Der Webhook sendet eingehende SMS-Nachrichten an den ngrok-Tunnel, der sie an den ESP32 weiterleitet.

Sie können den Webhook in Ihrem Vonage Account Dashboard einrichten, indem Sie die ngrok Tunnel URL angeben. Navigieren Sie zu Vonage-Einstellungen. Auf der Registerkarte API-Schlüssel finden Sie SMS-Einstellungen. Setzen Sie unter SMS-Einstellungen SMS API und das Webhook-Format auf POST-JSON.

Kopieren Sie in Ihrem Terminalfenster die Forwarding URL.

ngrok Forwarding URL shown inside a terminal windowngrok-forwarding-url-terminal.png

Fügen Sie in den Vonage-Einstellungen den folgenden Text ein: /rest/endpoint unter Eingehende SMS-Webhooks ein. Zum Beispiel, https://b462-31-223-156-70.ngrok-free.app/rest/endpoint.

Klicken Sie auf Änderungen speichern in der oberen rechten Ecke, um den Webhook zu speichern.

Schritt 5: Testen Sie die Anwendung

Senden Sie eine SMS mit ON oder OFF von Ihrer Rufnummer an eine beliebige Vonage-Nummer.

Nachdem Vonage die Bearbeitung der Anfrage abgeschlossen hat, sollten Sie eine Änderung an einem von Ihnen gesteuerten Gerät (z. B. einer Glühbirne) und die entsprechende Ausgabe im seriellen Monitor der Arduino IDE sehen.

Serial output from ESP32 shown in the Arduino IDEserial-out-esp32-in-ide.png

Sie sollten dann eine Bestätigungs-SMS über den Stand des Vorgangs zurückerhalten.

Nächste Schritte und Ressourcen

Sie können fortschrittlichere Hausautomatisierungssysteme mit ESP32 und Vonage SMS API erkunden. Sie können sich auch die Vonage Entwickler-Dokumentation für weitere Informationen zur Verwendung der Vonage API.

Um mehr über ESP32 zu erfahren, können Sie die offizielle ESP-IDF-Dokumentation.

Schlussfolgerung

Die Verwendung von Vonage SMS für die Hausautomatisierung mit dem ESP32-Mikrocontroller ist eine leistungsstarke und bequeme Möglichkeit, verschiedene Aspekte Ihres Hauses aus der Ferne zu steuern. Wenn Sie die in diesem Tutorial beschriebenen Schritte befolgen, können Sie ein Basissystem einrichten und es nach Ihren Bedürfnissen erweitern.

Wenn Sie Fragen oder Feedback haben, besuchen Sie den Vonage Entwickler-Slack oder senden Sie uns einen Tweet auf Twitterund wir werden auf Sie zurückkommen. Nochmals vielen Dank fürs Lesen und bis zum nächsten Mal!

Teilen Sie:

https://a.storyblok.com/f/270183/398x400/d25c3f913d/dejan-lukic.jpg
Dejan LukićGastautor

Dejan ist ein Backend-Entwickler und technischer Redakteur, der mit fast einem Jahrzehnt Erfahrung zum Unternehmer wurde. Mit 13 Jahren entwickelte er einen CubeSat-Satelliten, und mit 16 musste er sich im Ausland niederlassen, um unternehmerisch tätig zu werden. Derzeit betreibt er eine Agentur für technische Inhalte - NXNE. Am aktivsten ist er auf LinkedIn und gelegentlich auf Twitter.