Como enviar textos com um Arduino

cupom com desconto - o melhor site de cupom de desconto cupomcomdesconto.com.br


Anteriormente, acoplamos um módulo Arduino e um ESP8266 para enviar um email quando um limite de temperatura fosse atingido. Desta vez, faremos o par enviar um SMS quando um sensor PIR detectar movimento.

Anúncio PCBWay

IFTTT

Como vamos usar o IFTTT novamente, vamos primeiro fazer uma breve atualização.

O IFTTT (If This Then That) é uma plataforma da Web gratuita que conecta dispositivos e serviços como Gmail, Twitter, Instagram, Dropbox, Fitbit, Amazon Alexa e Assistente do Google. Ele tece esses serviços de uma maneira que o Instagram pode usar as funções do Dropbox.

O IFTTT funciona como uma instrução if padrão – se essa condição for acionada, execute esta ação.

Para fazer isso, o IFTTT usa Applets. Applets são programas que usam um gatilho para realizar eventos. Um applet pode fazer coisas como postar tweets regulares sobre o clima ou enviar uma notificação por SMS sempre que alguém abrir uma porta específica.

Para integrar o IFTTT ao ESP8266, precisamos de webhooks. Webhooks é um serviço que aciona eventos via solicitações HTTP.

Um sistema simples de webhooks funciona como abaixo:

Como enviar textos com um Arduino 1
Figura 1: Sistema Webhooks

O gatilho inicial de um sistema de webhooks é uma solicitação HTTP. Eles podem ser acionados por um interruptor tátil, botão digital, nível de som, limite de temperatura e outros fatores. Para criar uma solicitação da Web para acionar Webhooks, você precisa ter o nome da chave e do evento. A chave fornece autenticação de webhooks à sua conta IFTTT enquanto o nome do evento especifica a ação a ser acionada quando uma condição é atendida. Sem um desses dois, não há como saber de quem e que ação há para desencadear.

Preparando o hardware

Para este projeto, vamos conectar um sensor de movimento PIR com o Arduino UNO e depois transferir o sinal digital para o módulo ESP8266. Um sensor PIR, também conhecido como Sensor de Proximidade por Infravermelho Passivo, é um sensor digital que emite um pulso ALTO quando detecta movimento. O módulo ESP8266 está configurado para enviar uma solicitação GET ao IFTTT quando o sinal é ALTO. A solicitação GET aciona o applet, que envia um SMS para o seu dispositivo.

Leia Também  O Bnext chega ao México, abre sua conta e recebe $ 100 MXN

Para fazer isso, precisamos dos seguintes componentes:

Como enviar textos com um Arduino 2
Como enviar textos com um Arduino 3
Figura 2: Conexões

Configurando o IFTTT

Primeiro, acesse o site da IFTTT e crie uma conta.

Depois de fazer login, vá para a barra de ferramentas superior direita na sua página inicial e selecione criar. O login direcionará você para uma página onde você pode começar a criar um Applet.

Como enviar um email com ESP8266 e IFTTT - Criando conta
Figura 3: Criando um applet

Em seguida, defina uma condição clicando em “+ Isto”.

Como enviar um email com ESP8266 e IFTTT - Criando conta Etapa 2
Figura 4: Esta condição

Em seguida, procure Webhooks.

Como enviar textos com um Arduino 4
Figura 5: Webhooks

Em webhooks, escolha receber uma solicitação da web. Clique em criar gatilho depois de nomear seu evento.

Como enviar textos com um Arduino 5
Figura 6: Criando o gatilho

Agora, para definir a ação, clique em “+ Isso”.

Como enviar um email com ESP8266 e IFTTT - Configuração de ação
Figura 7: Essa ação

Desta vez, procuramos por SMS. Infelizmente, o IFTTT descontinuou o suporte ao SMS direto usando webhooks. No momento, a única maneira de fazer isso funcionar é instalando o aplicativo IFTTT em um dispositivo Android ou usando uma conta ClickSend. Neste tutorial, estamos usando o primeiro.

Como enviar textos com um Arduino 6
Figura 8: SMS

Por fim, escreva o conteúdo do SMS. Existem variáveis ​​convenientes que você pode usar para compor sua mensagem: EventName que contém o nome do evento; OccurredAt que exibe a data e a hora em que o evento é acionado e; Value isso pode incluir qualquer número que você deseja enviar para o servidor IFTTT.

Como enviar textos com um Arduino 7
Figura 9: Escrevendo o SMS

Verifique se você colocou os detalhes corretos.

Como enviar textos com um Arduino 8
Figura 10: Revisão e conclusão

O applet está pronto agora. Agora, para ativar as notificações por SMS no seu dispositivo Android, pesquise IFTTT no Google Playstore e instale.

cupom com desconto - o melhor site de cupom de desconto cupomcomdesconto.com.br
Como enviar textos com um Arduino 9
Figura 11: Instalando o IFTTT

Após a instalação, faça login com suas credenciais IFTTT para emparelhar com sua conta.

Adquirindo a chave

Para acionar a receita do Applet, precisamos da chave junto com o nome do evento em nossa solicitação HTTP. Para obter sua chave IFTTT exclusiva, vá para a página inicial e pesquise Webhooks na barra de pesquisa no canto superior esquerdo. Você pode encontrar webhooks em serviços.

Como enviar textos com um Arduino 10
Figura 12: Verificando a documentação

Agora, na página Webhooks, clique no link Documentação no canto superior direito da página.

Leia Também  Introdução à Inteligência Artificial - Os Projetos de Engenharia

Por fim, uma página que contém sua chave pessoal e a solicitação da Web completa para o seu evento é exibida. Essa chave é exclusiva para todas as contas IFTTT. Ao incluir o nome do evento, você pode disparar uma ação IFTTT via Webhooks. Agora vamos prosseguir com o nosso código.

Como enviar textos com um Arduino 11
Figura 13: Adquirindo a chave

Código para o Arduino

#include "SerialTransfer.h"

SerialTransfer myTransfer;
int status;

void setup()
{
  Serial.begin(115200);
  myTransfer.begin(Serial);
  pinMode(5, INPUT);
}

void loop()
{
  status = digitalRead(D5);
  myTransfer.txObj(status, sizeof(status));
  myTransfer.sendData(sizeof(status));
  delay(100);
}

Código para o módulo ESP8266

#include  
#include "SerialTransfer.h"

SerialTransfer myTransfer;

const char* ssid     = "Wifi Name";
const char* password = "WiFi Password";

const char* resource = "https://maker.ifttt.com/trigger/YOUR EVENT NAME HERE/with/key/YOUR KEY HERE";
const char* server = "maker.ifttt.com";

void setup() {
Serial.begin(115200);
pinMode(D5, INPUT);

  WiFi.mode(WIFI_STA);
  WiFi.begin(ssid, password);

  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
  }

  myTransfer.begin(Serial);
}

void loop() 
{
  if(myTransfer.available())
  {
    int status;  
    myTransfer.rxObj(myFloat, sizeof(myFloat));
    if (status==1)
    {
        WiFiClient client;
        client.print(String("GET ") + resource + 
                        " HTTP/1.1rn" +
                        "Host: " + server + "rn" + 
                        "Connection: closernrn");
                    
        int timeout = 5 * 10; // 5 seconds             
        while(!!!client.available() && (timeout-- > 0))
        {
        delay(100);
        }
        while(client.available())
        {
        Serial.write(client.read());
        }
        client.stop();
        delay(10000);
    }      
  } 
}  

Código para NodeMCU

#include  

const char* ssid     = "Wifi Name";
const char* password = "WiFI";

const char* resource = "https://maker.ifttt.com/trigger/YOUR EVENT NAME HERE/with/key/YOUR KEY HERE";
const char* server = "maker.ifttt.com";

int status;

void setup() {
  Serial.begin(115200);
  pinMode(D5, INPUT);
  Serial.println();
  Serial.print("Connecting to ");
  Serial.println(ssid);

  WiFi.mode(WIFI_STA);
  WiFi.begin(ssid, password);

  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.print(".");
  }

  Serial.println("");
  Serial.println("WiFi connected");
  Serial.println("IP address: ");
  Serial.println(WiFi.localIP());
}

void loop() 
{
  status = digitalRead(D5);
  delay(500);
  Serial.println(status);
  if (status==1)
  {
    WiFiClient client;
    client.print(String("GET ") + resource + 
                      " HTTP/1.1rn" +
                      "Host: " + server + "rn" + 
                      "Connection: closernrn");
                  
    int timeout = 5 * 10; // 5 seconds             
    while(!!!client.available() && (timeout-- > 0))
    {
      delay(100);
    }
    while(client.available())
    {
      Serial.write(client.read());
    }
    client.stop();
    delay(10000);
  }
  else 
  {
    return;
  }
}  

Código Explicação

Para enviar o sinal digital para o módulo ESP8266, usamos a biblioteca SerialTransfer.h. Você pode fazer o download aqui.

Estas são as linhas importantes que usamos na biblioteca:

  • SerialTransfer myTransfer – cria uma instância SerialTransfer chamada myTransfer.
  • myTransfer.begin(Serial) – inicia a comunicação serial usando a taxa de transmissão serial.
  • myTransfer.txObj(status, sizeof(status)) – cria um objeto feito especificamente para status.
  • myTransfer.sendData(sizeof(status)) – envia o status em um pacote adequado ao seu tamanho.
  • myTransfer.rxObj(status, sizeof(status)) – recebe status do remetente.

Em seguida, usando const char*, concatenamos as strings para conter seu nome de WiFi, senha, URL de solicitação da Web e o servidor do fabricante IFTTT. Então, usando WiFi.mode(WIFI_STA, declaramos o módulo ESP8266 como uma estação para impedir que ele seja padronizado para outros modos. Com WiFi.begin e myTransfer.begin, inicializamos a conexão WiFi e a comunicação serial, respectivamente.

O loop principal usa uma instrução if que retorna quando o sinal é BAIXO ou envia uma solicitação GET quando o sinal é ALTO. Enviar uma solicitação GET para o URL do evento IFTTT aciona o applet. Consequentemente, isso envia a notificação por SMS para o seu dispositivo Android.

Adicionamos um atraso de 10 segundos antes que o dispositivo verifique novamente o pulso HIGH para evitar sobrecarregar o applet IFTTT. O envio de muitas solicitações pode desativar seu applet ou, pior ainda, sua conta é banida.

Adicionei um código de bônus se você estiver usando um kit de desenvolvimento do NodeMCU. Com o NodeMCU, você não precisa empregar comunicação serial para enviar o sinal digital do sensor. Em vez disso, você pode usar o monitor serial para verificar se sua saída é consistente com o seu código.

Demonstração

Para testar o projeto, acenei minha mão no sensor PIR. Minha mão está a cerca de um metro dela. Depois de alguns segundos, recebi uma notificação do aplicativo IFTTT e um SMS logo depois.

Como enviar textos com um Arduino 12
Figura 14: Notificação da IFTTT
Como enviar textos com um Arduino 13
Figura 15: Notificação por SMS

Como enviar textos com um Arduino 2
cupom com desconto - o melhor site de cupom de desconto cupomcomdesconto.com.br