https://a.storyblok.com/f/270183/64068/e8d92a56d6/home-automation_vonagesms.png

Automação residencial com ESP32 e a SMS API da Vonage

Publicado em August 24, 2023

Tempo de leitura: 5 minutos

Introdução

A Internet das Coisas (IoT) tem se tornado cada vez mais popular nos últimos anos, com dispositivos inteligentes que permitem que as pessoas controlem remotamente diversos aspectos de suas casas. A Vonage é uma plataforma de comunicação na nuvem que permite que as empresas se conectem com os clientes por meio de SMS, chamadas de voz e aplicativos de mensagens.

Este artigo abordará como utilizar o serviço de SMS da Vonage para automação residencial com o microcontrolador ESP32. Apresentaremos passo a passo as etapas para configurar o sistema e explicaremos como ele funciona. O objetivo é controlar dispositivos domésticos por meio do ESP32, utilizando uma mensagem SMS enviada para o seu celular por meio da SMS API da Vonage.

Pré-requisitos

Visão geral técnica do aplicativo

A SMS API da Vonage se comunicará com o ESP32 por meio de um webhook. Quando a Vonage receber uma mensagem SMS, ela enviará uma solicitação POST para o endpoint do ESP32 por meio do webhook.

O ESP32, então, analisará a carga JSON, executará uma digitalWrite() função e retornará uma solicitação POST à SMS API da Vonage com o status da operação (sucesso/falha), informando ao usuário final o que aconteceu.

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

Passo 1: Como configurar o manipulador de solicitações do ESP32

Para começar, você deve instalar o ArudinoJson e ESPAsyncWebSrv bibliotecas. Essas bibliotecas permitirão que você processe as solicitações recebidas da SMS API da Vonage.

  1. Abra o IDE do Arduino

  2. Abra o Library Manager no painel à esquerda.

  3. Pesquisar por ArduinoJson

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

  1. Imprensa Install

  2. Pesquisar por ESPAsyncWebSrv

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

  1. Imprensa Install

Depois de instalar as bibliotecas, você poderá configurar o Wi-Fi e o manipulador de solicitações. O manipulador de solicitações tratará das solicitações recebidas e as encaminhará para a função apropriada.

Crie um novo arquivo (esboço) acessando File > New Sketch. Em seguida, inclua todas as bibliotecas abaixo.

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

Em seguida, inicialize o servidor web.

AsyncWebServer server(80);

Adicione as credenciais do Wi-Fi.

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

Adicione uma função alternativa para lidar com 404 .

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

Agora, adicione uma setup() função para lidar com toda a lógica, começando pela configuração do Wi-Fi.

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

Em seguida, dentro da setup() função, você criará um endpoint para processar o JSON recebido da Vonage.

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

Comece a criar um documento JSON dinâmico dentro do *handler.

DynamicJsonDocument doc(2048)

Agora, verifique se há erros de desserialização. Eles não deveriam ocorrer, mas precisamos lidar com eles para que os núcleos do ESP32 não entrem em pânico.

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

Continue criando um objeto JSON.

JsonObject jsonObj = doc.as();

Para simplificar, vamos analisar apenas a text chave da carga útil, indicando o que fazer com o dispositivo que iremos controlar.

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

É isso aí quanto ao manuseio do JSON. Para controlar um pino digital, adicione uma lógica condicional que envie uma solicitação à Vonage dependendo do conteúdo do texto. Por exemplo, se o usuário enviar “ON”, o manipulador de solicitações enviará a mensagem “Ligado!” à Vonage.

Um pino digital no ESP32 é um pino que pode ser configurado em um dos dois estados: HIGH (1) ou LOW (0). Ele pode ser utilizado para diversos fins, como ler o estado de um sensor (entrada digital) ou controlar o estado de um atuador (saída digital).

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

Adicione os manipuladores finais do servidor fora do *handler para finalizar.

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

Para que isso funcione, precisamos definir esse pino digital. Podemos fazer isso depois de incluir as bibliotecas no início do código.

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

Etapa 2: Como configurar o ESP32 como remetente de solicitações

Agora que você configurou o manipulador de solicitações, assim que o PIN for atualizado, você poderá consultar a SMS API da Vonage para obter o status da operação (sucesso/falha). Adicione a seguinte configuração no início do código.

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"

Crie uma nova função que envie solicitações à 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;
}

Para evitar que a solicitação fique pendente, adicione uma função simples baseada em estado.

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

Incorpore tudo isso *handler onde a lógica condicional é executada.

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

Etapa 3: Como configurar o Ngrok com o ESP32

Para testar o webhook localmente, você pode usar o ngrok. O Ngrok permitirá que você exponha seu endpoint local à internet e receba solicitações da SMS API da Vonage.

Você pode instalar e executar o ngrok localmente no seu computador. Para instalar o ngrok, acesse a página de download do ngrok. Siga as instruções específicas para o seu sistema operacional fornecidas pelo ngrok.

ngrok Download Pagengrok-download-page.png

Em seguida, ligue o seu ESP32 e aguarde até que ele se conecte à rede. Conecte-o a uma porta USB do seu computador e abra o Monitor Serial no Arduino IDE.

No Monitor Serial, copie o endereço IP do ESP32 exibido na inicialização.

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

Agora, abra uma nova janela do terminal no seu computador. Execute ngrok http <esp32-ip-address>:80. Substitua <esp32-ip-address> pelo endereço IP local do seu ESP32.

Por exemplo, ngrok http 10.10.1.10:80. o ngrok abrirá agora um túnel acessível ao público para o seu ESP32.

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

Etapa 4: Como configurar o webhook da Vonage

Agora que você configurou o ESP32 e o túnel ngrok, pode configurar o webhook da Vonage. O webhook enviará as mensagens SMS recebidas para o túnel ngrok, que as encaminhará para o ESP32.

Você pode configurar o webhook no painel da sua conta da Vonage, informando a URL do túnel do ngrok. Acesse Configurações da Vonage. Na aba “Chaves de API”, localize as configurações de SMS. Nas configurações de SMS, defina SMS API e o formato do webhook para POST-JSON.

De volta à janela do terminal, copie o Forwarding URL.

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

Nas configurações do Vonage, cole o seguinte: /rest/endpoint em “Webhooks de SMS recebidos”. Por exemplo, https://b462-31-223-156-70.ngrok-free.app/rest/endpoint.

Clique em “Salvar alterações” no canto superior direito para salvar o webhook.

Etapa 5: Teste o aplicativo

Envie um SMS contendo ON ou OFF do seu número de telefone para qualquer número da Vonage.

Depois que a Vonage concluir o processamento da solicitação, você deverá observar uma mudança no dispositivo que estiver controlando (por exemplo, uma lâmpada) e a respectiva saída no Monitor Serial do IDE do Arduino.

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

Em seguida, você deverá receber uma mensagem de texto (SMS) de confirmação sobre o andamento da operação.

Próximos passos e recursos

Você pode explorar sistemas de automação residencial mais avançados usando o ESP32 e a SMS API da Vonage. Você também pode conferir a Documentação para Desenvolvedores da Vonage para obter mais informações sobre como usar a API da Vonage.

Para saber mais sobre o ESP32, você pode ler a documentação oficial documentação do ESP-IDF.

Conclusão

Usar o SMS da Vonage para automação residencial com o microcontrolador ESP32 é uma maneira eficaz e prática de controlar remotamente vários aspectos da sua casa. Seguindo as etapas descritas neste tutorial, você poderá configurar um sistema básico e expandi-lo de acordo com suas necessidades.

Se você tiver dúvidas ou sugestões, junte-se a nós no Slack dos desenvolvedores da Vonage ou envie-nos um tweet no Twitter, e entraremos em contato com você. Mais uma vez, obrigado pela leitura, e nos vemos no próximo artigo!

Compartilhar:

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

Dejan é um desenvolvedor de backend e redator técnico que se tornou empreendedor, com quase uma década de experiência. Aos 13 anos, ele desenvolveu um satélite CubeSat e, aos 16, precisou abrir uma empresa no exterior para seguir a carreira de empreendedor. Atualmente, ele dirige uma agência de conteúdo técnico — a NXNE. Ele é mais ativo no LinkedIn e usa o Twitter ocasionalmente.