
Teilen Sie:
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.
Hausautomatisierung mit ESP32 und Vonage SMS API
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
Die Arduino-IDE
Ein Mikrocontroller aus der ESP32-Familie (ESP32-S2, ESP32-C3 oder ESP32-S3) zum Testen der Probe.
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.
application-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.
Öffnen Sie die Arduino IDE
Öffnen Sie die
Library Managerauf dem linken Bedienfeld.Suche nach
ArduinoJson
arduinojson-arduino-ide.png
Presse
InstallSuche nach
ESPAsyncWebSrv
espasyncwebsrv-arduino-ide.png
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-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-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-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-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-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:
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.