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

Domotique avec ESP32 et Vonage SMS API

Publié le August 24, 2023

Temps de lecture : 5 minutes

Introduction

L'internet des objets (IdO) est devenu de plus en plus populaire ces dernières années, avec des dispositifs intelligents permettant aux individus de contrôler à distance divers aspects de leurs maisons. Vonage est une plateforme de communication dans le cloud permettant aux entreprises d'entrer en contact avec leurs clients par le biais de SMS, de la voix et d'apps de messagerie.

Dans cet article, nous allons voir comment utiliser Vonage SMS pour la domotique à l'aide du microcontrôleur ESP32. Nous vous guiderons à travers les étapes de la mise en place du système et vous expliquerons son fonctionnement. L'objectif est de contrôler les appareils domestiques à l'aide de l'ESP32 grâce à un SMS envoyé à votre téléphone à l'aide de l'API SMS de Vonage.

Conditions préalables

Aperçu technique de l'application

L'API SMS de Vonage communiquera avec l'ESP32 à l'aide d'un webhook. Lorsque Vonage reçoit un SMS, Vonage envoie une requête POST au point de terminaison de l'ESP32 via le webhook.

L'ESP32 analysera alors la charge utile JSON, exécutera une fonction digitalWrite() et renvoie une demande POST à l'API SMS de Vonage avec l'état de l'opération (succès/échec), informant l'utilisateur final de ce qui s'est passé.

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

Étape 1 : Comment configurer le gestionnaire de requêtes ESP32

Pour commencer, vous devez installer les logiciels ArudinoJson et ESPAsyncWebSrv . Ces bibliothèques vous permettront de traiter les demandes entrantes de l'API SMS de Vonage.

  1. Ouvrir l'IDE Arduino

  2. Ouvrez le Library Manager dans le panneau de gauche.

  3. Rechercher ArduinoJson

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

  1. Presse Install

  2. Rechercher ESPAsyncWebSrv

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

  1. Presse Install

Une fois les bibliothèques installées, vous pouvez configurer le WiFi et le gestionnaire de requêtes. Le gestionnaire de requêtes traitera les requêtes entrantes et les acheminera vers la fonction appropriée.

Créez un nouveau fichier (sketch) en allant sur File > New Sketch. Ensuite, incluez toutes les bibliothèques ci-dessous.

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

Ensuite, il faut initialiser le serveur web.

AsyncWebServer server(80);

Ajouter des informations d'identification WiFi.

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

Ajout d'une fonction de repli pour gérer les messages 404 pour gérer les demandes 404.

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

Maintenant, ajoutez une fonction setup() pour gérer toute la logique, en commençant par l'installation du WiFi.

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;
}

Ensuite, à l'intérieur de la fonction setup() vous créerez un point de terminaison pour gérer le JSON entrant de Vonage.

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

Commencez à créer un document JSON dynamique à l'intérieur du fichier *handler.

DynamicJsonDocument doc(2048)

Maintenant, vérifiez s'il y a des erreurs de désérialisation. Celles-ci ne devraient pas se produire, mais nous devons les gérer pour que les cœurs de l'ESP32 ne paniquent pas.

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

Poursuivre la création d'un objet JSON.

JsonObject jsonObj = doc.as();

Pour simplifier les choses, nous n'analyserons que la clé text de la charge utile, qui indique ce qu'il faut faire avec l'appareil que nous allons contrôler.

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

C'est tout pour la partie manipulation de JSON. Pour contrôler une broche numérique, ajoutez une logique conditionnelle qui enverra une demande à Vonage en fonction du contenu du texte. Par exemple, si l'utilisateur envoie "ON", le gestionnaire de demande enverra le message "Turned ON !" à Vonage.

Une broche numérique de l'ESP32 est une broche qui peut être réglée sur l'un des deux états suivants : HAUT (1) ou BAS (0) : HAUT (1) ou BAS (0). Elle peut être utilisée à diverses fins, comme la lecture de l'état d'un capteur (entrée numérique) ou le contrôle de l'état d'un actionneur (sortie numérique).

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

Ajoutez les derniers gestionnaires de serveur à l'extérieur du *handler pour terminer.

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

Pour que cela fonctionne, nous devons définir cette broche numérique. Nous pouvons le faire après avoir inclus les bibliothèques au début du code.

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

Étape 2 : Comment configurer l'émetteur de requêtes ESP32

Maintenant que vous avez configuré le gestionnaire de requêtes, une fois que l'épingle a été mise à jour, vous pouvez demander à l'API SMS de Vonage l'état de l'opération (succès/échec). Ajoutez la configuration suivante au début du code.

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"

Créez une nouvelle fonction qui enverra des demandes à Vonage.

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;
}

Pour éviter que la demande ne soit bloquée, ajoutez une simple fonction basée sur l'état.

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

Incorporez tout cela dans *handler où se déroule la logique conditionnelle.

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);
}

Étape 3 : Comment configurer Ngrok avec ESP32

Pour tester le webhook localement, vous pouvez utiliser ngrok. Ngrok vous permettra d'exposer votre point de terminaison local à l'internet et de recevoir des demandes entrantes de l'API SMS de Vonage.

Vous pouvez installer et exécuter ngrok localement sur votre ordinateur. Pour installer ngrok, rendez-vous sur la page de téléchargement de page de téléchargement de ngrok. Suivez les instructions spécifiques au système d'exploitation fournies par ngrok.

ngrok Download Pagengrok-download-page.png

Ensuite, mettez votre ESP32 sous tension et attendez qu'il se connecte au réseau. Connectez-le à un port USB de votre ordinateur et ouvrez le Serial Monitor dans Arduino IDE.

À partir du moniteur série, copiez l'adresse IP de l'ESP32 affichée au démarrage.

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

Ouvrez une nouvelle fenêtre de terminal sur votre ordinateur. Exécutez ngrok http <esp32-ip-address>:80. Remplacez <esp32-ip-address> par l'adresse IP locale de votre ESP32.

Par exemple, ngrok ouvrira un tunnel accessible au public vers votre ESP32, ngrok http 10.10.1.10:80. ngrok va maintenant ouvrir un tunnel accessible au public vers votre ESP32.

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

Étape 4 : Comment configurer le crochet Web de Vonage

Maintenant que vous avez configuré l'ESP32 et le tunnel ngrok, vous pouvez configurer le webhook de Vonage. Le webhook enverra les SMS entrants au tunnel ngrok, qui les transmettra à l'ESP32.

Vous pouvez configurer le webhook dans le tableau de bord de votre Account Vonage en fournissant l'URL du tunnel ngrok. Naviguez vers Paramètres de Vonage. Dans l'onglet API Keys, trouvez SMS settings. Sous Paramètres SMS, définissez SMS API et le format du webhook à POST-JSON.

De retour dans votre fenêtre de terminal, copiez l Forwarding URL.

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

Dans les paramètres de Vonage, collez le texte suivant : /rest/endpoint sous Inbound SMS webhooks. Par exemple, https://b462-31-223-156-70.ngrok-free.app/rest/endpoint.

Cliquez sur Enregistrer les modifications dans le coin supérieur droit pour enregistrer le webhook.

Étape 5 : Tester l'application

Envoyer un SMS contenant ON ou OFF à partir de votre numéro de téléphone vers n'importe quel numéro de Vonage. numéro de Vonage.

Une fois que Vonage a fini de traiter la demande, vous devriez voir un changement sur un dispositif que vous contrôlez (par exemple, une ampoule) et la sortie correspondante dans le moniteur série de l'IDE Arduino.

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

Vous devriez alors recevoir un SMS de confirmation sur l'état d'avancement de l'opération.

Prochaines étapes et ressources

Vous pouvez explorer des systèmes domotiques plus avancés en utilisant l'ESP32 et l'API SMS de Vonage. Vous pouvez également consulter la Documentation du développeur Vonage pour plus d'informations sur l'utilisation de l'API Vonage.

Pour en savoir plus sur l'ESP32, vous pouvez consulter la documentation officielle de l ESP-IDF officielle.

Conclusion

L'utilisation du SMS Vonage pour la domotique à l'aide du microcontrôleur ESP32 est un moyen puissant et pratique de contrôler à distance divers aspects de votre maison. En suivant les étapes décrites dans ce tutoriel, vous pouvez mettre en place un système de base et l'étendre en fonction de vos besoins.

Si vous avez des questions ou des commentaires, rejoignez-nous sur le Slack des développeurs de Vonage ou envoyez-nous un Tweet sur Twitteret nous vous répondrons. Merci encore pour votre lecture, et nous vous donnons rendez-vous pour le prochain numéro !

Partager:

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

Dejan est un développeur backend et un rédacteur technique devenu entrepreneur avec près d'une décennie d'expérience. À 13 ans, il a développé un satellite CubeSat et à 16 ans, il a dû s'installer à l'étranger pour poursuivre sa carrière d'entrepreneur. Actuellement, il dirige une agence de contenu technique - NXNE. Il est surtout actif sur LinkedIn et utilise occasionnellement Twitter.