Mensagem de Alerta para Whatsapp com ESP8266

Mensagem-de-Alerta-para-Whatsapp-com-ESP8266
Font Size

Fala galera! Neste artigo irei ensinar-lhes a enviar uma mensagem de alerta para o Whatsapp através do ESP8266. Inegavelmente, o Whatsapp é a plataforma de comunicação a qual mais temos acessos no dia a dia, viabilizando uma comunicação rápida e simples entre usuários. Dessa forma, aproveitá-la em projetos de automação pode fornecer soluções bastante interessantes. Gostou da proposta? Então, vem comigo!

Entendendo o Sistema para a  Mensagem de Alerta para Whatsapp com ESP8266

Para permitir a integração do nosso dispositivo ESP8266 com os serviços do Whatsapp utilizaremos plataformas web que proporcionam a automatização de tarefas entre aplicativos.

Nesse sentido, o serviço Zapier estabelece uma conexão central entre as plataformas Adafruit IO e Twilio através de tarefas denominadas Zaps. Desse modo, ao criar um novo Zap você define uma regra entre dois aplicativos com base no modelo evento-condição-ação (ECA).

Para que fique mais claro, em nosso projeto criaremos um ZAP que receberá um evento do nosso dispositivo por meio da API Adafruit IO e, em seguida, acionará uma informação para a API Webhook.

Esta plataforma entrega dados para outros aplicativos de forma assíncrona, fornecendo o trânsito de informações em tempo real. Em nosso caso, a API Webhook enviará uma ação para a API Twilio que, por fim, encaminhará a mensagem para o Whatsapp de destino.

Analogamente, um comando emitido do Whatsapp ao dispositivo segue o fluxo inverso apresentado. A arquitetura descrita pode ser observada na imagem a seguir:

Figura 1 – Funcionamento do Sistema

Desse modo, com algumas configurações desenvolveremos nosso ambiente de automação residencial. A seguir, apresento, de modo prático, o passo a passo para a configuração das plataformas.

Configuração do Adafruit IO

Como descrito anteriormente, o dispositivo enviará uma informação através da plataforma Adafruit IO. Essa API fornece um serviço de mensageria utilizando o protocolo MQTT e os dados são transmitidos através de feeds.

Desse modo, iremos criar dois feeds denominados, “notificacao” e “comando”. No feed “notificacao”, o SoC ESP8266 enviará uma informação destinada ao Whatsapp. Por outro lado, o feed “comando” transmitirá uma informação no fluxo inverso. Para criá-los, execute os seguintes passos:

  1. Após logar na plataforma Adafruit IO, clique na guia Feed da seção de navegação e, logo abaixo, na opção “view all”.
  2. Na página de feeds, clique no botão “Action” e selecione a opção “Create a New Feed” .
  3. No formulário apresentado, escreva no campo “Name” o nome do feed a ser criado, no caso, “notificacao”.
  4. Por último, clique no botão “create” no final do formulário.

Como resultado, será apresentado o feed criado em uma lista na página. Repita o mesmo processo para a criação do feed “comando”. A imagem a seguir ilustra, resumidamente, as etapas descritas anteriormente.

Estas foram as configurações necessárias no Adafruit IO. Todavia, atente-se ao seu nome de usuário e à chave IO KEY, pois eles serão necessários posteriormente. A seguir, será apresentada a configuração da plataforma Twilio.

Configurando o Twilio

O Twilio é um serviço em nuvem bastante atraente, uma vez que, permite o envio de mensagens de texto e mídias para um número cadastrado, viabilizando diversos projetos que integram comunicação com Whatsapp.

Nesse sentido, conectaremos o Twilio com o Zapier através do serviço Webhooks que envia solicitações HTTP (S). Assim, devemos definir alguns parâmetros da plataforma, permitindo que as mensagens cheguem ao número de destino. As etapas seguintes indicam como deve ser feita a configuração:

  1. Registre uma conta e entre na plataforma.
  2. Na página principal clique no símbolo “…” na barra de navegação à esquerda e, em seguida, no botão “Programmable SMS”.
  3. Logo após, aparecerá algumas opções como subitens. Então, clique na opção WhatsApp, ainda na barra de navegação.
  4. Nesta página, será solicitado que envie um código ao número informado para confirmar seu WhatsApp. Após a confirmação, seu número será cadastrado na plataforma.

Os passos descritos podem ser vistos na imagem abaixo:

Após a confirmação, é disponibilizado o botão ” Next: Send a One-Way Message” para testar o envio de uma requisição HTTP a partir de alguns modelos para o WhatsApp cadastrado, como pode ser observado na imagem abaixo. Esses dados serão importantes para a configuração do Webhook na plataforma Zapier.

Figura 4 – Testando Mensagem para WhatsApp.

Além disso, é fundamental que guarde os dados dos campos “ACCOUNT SID” e “AUTH TOKEN” presentes na página principal. A seguir, apresento como configurar a plataforma Zapier.

Configurando o Zapier

Anteriormente, explicamos que o serviço Zapier utiliza o método ECA. Desse modo, podemos criar tarefas automatizadas sem a necessidade de conhecimento técnico em linguagens de programação.

O processo é bem simples, precisamos apenas definir qual será o evento e sua ação decorrente deste. Também é possível definir algum filtro caso precise restringir a ação a uma determinada condição.

Para exemplificar, criaremos dois Zap, os quais irão integrar os serviços do Adafruit IO com a API Webhook, de tal forma que, o primeiro enviará uma mensagem recebida do Adafruit, obtida do dispostivo, para o Webhook, com destino ao Whatsapp, ao passo que, o segundo realizará o processo inverso.

Criando Zap para Notificação do WhatsApp

Antes de mais nada, devemos criar uma conta na plataforma Zapier. Após logar, clique no botão “MAKE A ZAP”, na barra de navegação à esquerda, para criarmos uma nova tarefa. Em seguida, pesquise pelo App Adafruit IO e realize os passos apresentados na sequência de imagens a seguir:

Como pode ser observado, as três primeiras imagens ilustram as etapas de configuração do Evento, enquanto as demais apresentam as configurações da Ação a ser executada.

Note que o formulário preenchido na Ação do Webhook está de acordo com os dados obtidos durante a configuração da API Twilio, especificamente, da mensagem de teste.

Além disso, é imprescindível que no campo “Payload Type” selecione “Custom” e digite a palavra Json, ao invés de selecionar a opção “Json” disponível, pois ela apresenta uma formatação diferente, ocasionando problemas com o envio da mensagem.

Por último, clique no botão “ON/OFF”, situado na parte inferior da página, para habilitar este Zap.

Criando ZAP para Comando do Dispositivo

Analogamente, criaremos a segunda tarefa, contudo esta receberá o comando do WhatsApp e o enviará ao dispositivo. Para isso, basta realizar os passos ilustrados na sequência de imagens seguinte:

Durante a configuração do Evento, pelo serviço Webhook, será fornecido um link, como demonstra a segunda imagem da sequência apresentada. Logo, deve-se copiar esta URL e inserí-la no Twilio, especificamente no campo “WHEN A MESSAGE COMES IN”, localizado na guia “Sandbox”, subitem da opção Whatsapp.

Em princípio, isto permite que as mensagens emitidas pelo Whatsapp possam ser recebidas e processadas pelo Webhook. Em seguida, utilizamos um filtro para acionar a ação apenas se satisfizer a condição especificada. Neste caso, filtramos da mensagem a letra ‘D’ e, então, a enviamos para o Adafruit IO, a fim de encaminhar ao dispositivo.

Enfim, concluímos a etapa de configuração do nosso sistema. Agora, devemos configurar nosso dispositivo ESP8266 para usá-lo em nossa aplicação.

Configurando o Dispositivo

Primeiramente, iremos analisar o consumo elétrico de um equipamento. Quando este atingir o limite de consumo estabelecido, uma mensagem de notificação será automaticamente enviada ao Whatsapp cadastrado. A partir disso, um comando pode ser emitido para desligar o equipamento.

Para isso, apresentarei a lista dos materiais utilizados. Estes e muitos outros componentes podem ser adquiridos em nossa loja.

Lista do Material

Montagem do Circuito

Figura 7 – Esquema de ligação com ESP8266.

Note que o fio fase do equipamento é ligado ao terminal NC (normalmente fechado) do relé. Dessa maneira, o dispositivo permanece ligado enquanto o relé estiver desativado. por analogia, quando ativado desligará o dispositivo.

Código Detalhado do Dispositivo

/*
    Projeto: Mensagem de Alerta para Whatsapp com ESP8266.
    Autor: Daniel Fiuza - AutoCore Robótica
    Data: 12/05/2020
    Código de Domínio Público  
*/

// Declaração das Bibliotecas
#include <Arduino.h>
#include "AdafruitIO_WiFi.h" // Biblioteca do Adafruit IO MQTT.
#include "EmonLib.h"      // Biblioteca do Sensor de Corrente AC.

// Configuração de Parâmetros
#define CURRENT_CAL 8.23  // Calibração do Sensor de Corrente AC.
#define RELE 4            // Módulo Relé, pino D2 (NodeMCU)
#define Consumo_Limite  0.0001 // Consumo Limite em KWh

// Configuração Wifi
#define WIFI_SSID "rede_wifi"
#define WIFI_PASS "senha_wifi"

// Configuração Adafruit IO
#define IO_USERNAME "nome_usuario_adafruit"
#define IO_KEY "chave_adafruit_io"

// Instancia Objeto io do Adafruit
AdafruitIO_WiFi io(IO_USERNAME, IO_KEY, WIFI_SSID, WIFI_PASS);
// Definindo Feed do Adafruit IO que irá receber comandos do WhatsApp.
AdafruitIO_Feed *comando = io.feed("comando");
// Definindo Feed do Adafruit IO que irá publicar dados para WhatsApp.
AdafruitIO_Feed *notificacao = io.feed("notificacao");

EnergyMonitor emon1; // Cria objeto emon1 para obter dados do sensor.
unsigned long last_time; // Armazena intervalo de tempo entre medidas.
float Consumo_Total = 0.000000;     // Armazena Consumo Total em KWh

void setup() {
  Serial.begin(115200); // Iniciando porta Serial.
  emon1.current(A0, CURRENT_CAL); // Inicializa parâmetros do sensor de corrente.
  pinMode(RELE, OUTPUT); // Configura Módulo Relé como Saída.
  // Espere o monitor serial abrir
  digitalWrite(RELE, HIGH); // Inicia com Relé desligado.
  while(!Serial)
      delay(50);
  Serial.print("Conectando-se ao Adafruit IO");
  // Inicia uma conexão MQTT para o io.adafruit.com.
  io.connect();
  // Define função de retorno de mensagem para processar 
  // os dados recebidos do feed "comando".
  comando->onMessage(controla_Rele);
  // Espere estabelecer a conexão MQTT.
  while(io.mqttStatus() < AIO_CONNECTED) {
    Serial.print(".");
    delay(500);
  }
  // Conexão MQTT estabelecida.
  Serial.println();
  Serial.println("Conexão com Adafruit IO Estabelecida!");
}

void loop() {
  // Mantém conexão MQTT ativa.
  io.run();
  // Atualiza novas medidas a cada 1s.
   if ( millis() - last_time > 1000 ) {
    emon1.calcVI(40,500); // Calcula Corrente AC.
    float Corrente = emon1.Irms; // Obtém valor da corrente calculado.
    // Devido as oscilações iniciais, limitamos a corrente em uma margem.
    if(Corrente < 0.019 || Corrente > 0.1) {
      Corrente = 0.00;
    }
    float Potencia = Corrente * 220.00; // Calcula valor aproximado da Potência Aparente. 
    Consumo_Total += Potencia/(1000*3600); // Consumo em Kw*h
    Serial.print("Corrente = ");
    Serial.print(Corrente);
    Serial.print(" A \tPotencia = ");
    Serial.print(Potencia);
    Serial.print(" W \tConsumo_Total = ");
    Serial.print(Consumo_Total,6);  // Imprime valor com 6 casas decimais
    Serial.println(" KWh");
    if (Consumo_Total >= Consumo_Limite) {
      // Envia mensagem ao Adafruit IO
      // Como não definimos nenhum filtro, qualquer mensagem neste feed dispara o evento.
      notificacao->save("Limite de Consumo Atingido!"); 
      Consumo_Total = 0.000000;  // Zera Consumo Total.
    }
    last_time = millis();
   }
}

void controla_Rele(AdafruitIO_Data *data) {
  Serial.print("Comando recebido: ");
  Serial.println(data->value());
  // Copia o valor recebido para a string msg
  String msg = data->value();
  // Compara se a string msg é igual a 'D', então aciona o Relé.
  if(msg.equals("D")){ 
    digitalWrite(RELE, LOW); // Aciona Relé, desligando o equipamento.
  }
}

Conclusão

De acordo com o sistema apresentado, grande parte de suas configurações pode ser dispensada desenvolvendo apenas um aplicativo, por exemplo, em Python.

Neste caso, o aplicativo dependeria apenas do serviço fornecido pelo Twilio para o envio das mensagens ao Whatsapp, reduzindo a complexidade do sistema e tornando as respostas significativamente mais rápidas. Mas isso deixarei para um outro artigo.

Como resultado, apresento a seguir um vídeo demonstrando o envio da mensagem de alerta para o Whatsapp com ESP8266:

https://youtu.be/grt50e_2YCk

Analisando o vídeo, é possível observar que a mensagem de notificação aparece duas vezes. Isso ocorre pois o intervalo entre a emissão da mensagem no dispositivo e sua notificação no WhatsApp (aproximadamente 100 segundos) é grande o suficiente para que o limite de consumo definido no código, de 0.0001 KWh, seja atingido duas vezes, enviando, assim, outra notificação.

Porém, deixo como sugestão alterar este parâmetro pelo WhatsApp, utilizando nosso sistema desenvolvido, e não como está, pelo código.

Então, gostou desse artigo?! Espero que ele possa estimular novos projetos e colaborar com o seu desenvolvimento acerca do tema. Caso haja alguma dúvida, comente abaixo.

Posts relacionados

Diferenças entre os sensores DHT11 e DHT22

por autocore
7 anos ago

Crie um jogo de multiplicação com Arduino, teclado matricial 4×3 e display 16×2

por autocore
7 anos ago

Painel de Automação com ThingsBoard e ESP8266

por autocore
4 anos ago
Sair da versão mobile