Como enviar por email os dados do sensor do Arduino com um ESP8266 e IFTTT

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


Existem várias maneiras de acessar diferentes serviços da Web com o Arduino e um ESP8266. Mas talvez o mais fácil seja usar o IFTTT. Neste tutorial, faremos um Arduino enviar um email quando a temperatura do termistor ultrapassar um valor limite. Vamos começar!

Anúncio PCBWay

Se isso então aquilo

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 para fazer coisas específicas que eles não poderiam fazer por conta própria. Ele tece esses serviços de uma maneira que o Instagram pode usar as funções do Dropbox perfeitamente.

Na maioria das vezes, o IFTTT apenas faz o que seu nome diz – se essa condição for acionada, execute esta ação.

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

Você nunca pode ter uma plataforma Web IoT tão direta quanto a IFTTT. Desde o início, é bem aparente o que faz, e essa é apenas uma das razões pelas quais eu amo isso. A integração com o ESP8266 também é fácil. Nós só precisamos usar webhooks.

Webhooks

Webhooks é um serviço que aciona eventos via solicitações HTTP. Esse recurso é especialmente útil para fabricantes de bricolage, pois permite que chips simples como o ESP8266 se integrem aos serviços IFTTT.

Um sistema simples de webhooks funciona assim:

Como enviar por email os dados do sensor do Arduino com um ESP8266 e IFTTT 49

Primeiro, precisamos de uma solicitação HTTP como gatilho inicial. 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 a chave e o nome 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.

Leia Também  O que mais há para considerar? Criar um site equitativo DS-GMO Passo 4

Preparando o hardware

Para iniciar nossa pequena demonstração, conecte as seguintes partes, como mostrado abaixo:

Configurando notificações por email usando ESP8266 e IFTTT - Diagrama esquemático

Nós apenas usamos o Arduino UNO como programador externo nos artigos anteriores, mas desta vez vamos fazer algumas ramificações. Além de usá-lo como programador, usaremos o UNO para fazer interface com o termistor. Será mais fácil assim, pois os termistores são sensores analógicos e os pinos analógicos do ESP-01 não são expostos. O Arduino UNO, por outro lado, possui 5 pinos analógicos. É seguro dizer que usá-los para este projeto é a melhor opção. Agora, para configurar uma conexão IFTTT…

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. Isso o direciona para uma página onde você pode começar a criar um Applet.

Como enviar por email os dados do sensor do Arduino com um ESP8266 e IFTTT 51

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

Como enviar por email os dados do sensor do Arduino com um ESP8266 e IFTTT 53

Em seguida, pesquise “webhooks”:

Como enviar por email os dados do sensor do Arduino com um ESP8266 e IFTTT 55

Em webhooks, escolha receber uma solicitação da web e nomeie o evento. Nesse caso, chamamos ESP_Thermistor. Depois disso, clique em “Criar gatilho”

Como enviar por email os dados do sensor do Arduino com um ESP8266 e IFTTT 57

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

Então, como queremos usar as notificações por email, selecione “Email” quando aparecer “Escolha o serviço de ação”:

Como enviar por email os dados do sensor do Arduino com um ESP8266 e IFTTT 59

Em seguida, escreva a mensagem preenchendo os campos de ação. Existem variáveis ​​convenientes que você pode usar para compor seu email: EventName que contém o nome do evento; OccurredAt que exibe a data e a hora em que o evento é acionado e; Value que pode conter qualquer número que você deseja enviar para o servidor IFTTT.

Como enviar por email os dados do sensor do Arduino com um ESP8266 e IFTTT 61

Por fim, verifique se você colocou os detalhes corretos.

Como enviar por email os dados do sensor do Arduino com um ESP8266 e IFTTT 63

Até agora, o Applet já está pronto e pronto.

Adquirindo a chave

Como mencionado anteriormente, 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.

cupom com desconto - o melhor site de cupom de desconto cupomcomdesconto.com.br
Como enviar por email os dados do sensor do Arduino com um ESP8266 e IFTTT 65

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

Como enviar por email os dados do sensor do Arduino com um ESP8266 e IFTTT 67

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 por email os dados do sensor do Arduino com um ESP8266 e IFTTT 69

Código

Nós vamos usar dois esboços para este projeto. Primeiro, um programa para o Arduino que lê os valores do termistor e os transmite ao ESP-01 via comunicação serial. Em seguida, um programa para o ESP-01 que recebe esses valores alterna uma solicitação GET para IFTTT quando o valor é muito alto. Copie os esboços no seu IDE do Arduino e salve-os em arquivos diferentes.

Leia Também  A fotodisinfecção está revolucionando o tratamento da doença gengival

Para o Arduino UNO:

#include "SerialTransfer.h"
#include 
#define ThermistorPin 0

int Vo;
float R1 = 1000;
float logR2, R2, T;
float c1 = 1.009249522e-03, c2 = 2.378405444e-04, c3 = 2.019202697e-07;

SoftwareSerial mySerial(2, 3); // RX, TX
SerialTransfer myTransfer;

void setup() {
  Serial.begin(115200);
  mySerial.begin(9600);
  myTransfer.begin(mySerial);
}

void loop() {

  Vo = analogRead(ThermistorPin);
  R2 = R1*(1023.0 / (float)Vo - 1.0);
  logR2 = log(R2);
  T = (1.0 / (c1 + c2*logR2 + c3*logR2*logR2*logR2));
  T = T - 273.15;
  
  //Serial.print("Temperature: "); 
  Serial.println(T);
  //Serial.println(" C"); 
    
    myTransfer.txObj(T, sizeof(T));
    myTransfer.sendData(sizeof(T));
    delay(5000);
}

Para o módulo ESP8266-01:

#include 
#include "SerialTransfer.h"

SerialTransfer myTransfer;

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

const char* resource = "https://maker.ifttt.com/trigger/ESP_Thermistor/with/key/bmsvPMsnwDjS4j5p2UsxGr";
const char* server = "maker.ifttt.com";

void setup() {
  Serial.begin(115200); 
  myTransfer.begin(Serial);
  WiFi.begin(ssid, password);            
  Serial.print("Connecting to ");
  Serial.print(ssid); Serial.println(" ...");

  int i = 0;
  while (WiFi.status() != WL_CONNECTED) { 
    delay(1000);
    Serial.print(++i); Serial.print(' ');
  }
  Serial.println('n');
  Serial.println("Connection established!");  
  Serial.print("IP address:t");
  Serial.println(WiFi.localIP()); 
}

void loop() 
{
  if(myTransfer.available())
  {
    float T;
    myTransfer.rxObj(T, sizeof(T));
  
    if (T>30)
    {
      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();
    }
    else 
    {
      return;
    }
  }  
}

Código Explicação

Ao contrário de outros sensores de temperatura, os termistores são um pouco complicados para interagir com um Arduino. Felizmente, o CircuitBasics fez um tutorial explicando isso da sopa às nozes. Confira o artigo usando este link e volte aqui para a próxima parte.

Agora que terminamos o sensor, o próximo problema a ser resolvido é enviar os valores para o ESP-01 usando serial. A comunicação serial com o Arduino, apesar de útil, é muito problemática com os valores flutuantes. A comunicação serial envia apenas um caractere de cada vez, além de exigir que você converta tudo em sequência primeiro. Honestamente, eu estava prestes a publicar isso com um código significativamente mais longo antes de encontrar a biblioteca SerialTransfer.h (faça o download aqui). Esta biblioteca é enviada pelos céus. Por quê? Dê uma olhada neste.

Um esboço que envia um valor flutuante via serial:

#include "SerialTransfer.h"

SerialTransfer myTransfer;

void setup()
{
  Serial.begin(115200);
  myTransfer.begin(Serial);
}

void loop()
{
  float myFloat = 25.25;
  myTransfer.txObj(myFloat, sizeof(myFloat));
  myTransfer.sendData(sizeof(myFloat));
  delay(100);
}

Um esboço que recebe um valor flutuante via serial:

#include "SerialTransfer.h"

SerialTransfer myTransfer;

void setup()
{
  Serial.begin(115200);
  myTransfer.begin(Serial);
}

void loop()
{
  if(myTransfer.available())
  {
    float myFloat;
   
    Serial.print("New Data: ");
    myTransfer.rxObj(myFloat, sizeof(myFloat));
    Serial.println(myFloat);
  }
  else if(myTransfer.status < 0)
  {
    Serial.print("ERROR: ");
    Serial.println(myTransfer.status);
  }
}

São menos de 20 linhas para enviar um valor flutuante e um pouco mais do que isso para recebê-lo e verificar se há erros! Até agora, ainda estou impressionado. Essa biblioteca corta nosso código em uma escala até então nunca sonhada.

Estas são as linhas importantes da biblioteca:

SerialTransfer myTransfer;

que cria uma instância SerialTransfer chamada myTransfer;

 myTransfer.begin(Serial);

que inicia a comunicação serial usando a taxa de transmissão serial; e

  myTransfer.txObj(myFloat, sizeof(myFloat));
  myTransfer.sendData(sizeof(myFloat));

que cria um objeto feito especificamente para o myFloat valor e envia-o em um pacote adequado ao seu tamanho.

Depois de transmitir os dados, passamos ao código do ESP-01.

myTransfer.rxObj(myFloat, sizeof(myFloat));

No outro extremo da linha de comunicação, use isso para receber o valor flutuante.

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

Em seguida, concatene as strings para conter seu nome de WiFi, senha, URL de solicitação da Web e o servidor do fabricante IFTTT.

    if (T>30)
    {
      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();
    }
    else 
    {
      return;
    }

Isso envia uma solicitação HTTP GET ao servidor IFTTT quando o valor de T excede 30. Usamos GET, pois precisamos simplesmente ativar o gatilho. Usaremos o POST quando precisarmos escrever um valor para o servidor IFTTT. Por exemplo, enviando uma notificação por e-mail com a classificação atual de temperatura do sensor.

Demonstração

Depois de usar um isqueiro para aquecer o termistor, recebi um email do dispositivo. O projeto atingiu o home run!

Como enviar por email os dados do sensor do Arduino com um ESP8266 e IFTTT 71

É isso neste tutorial. Te vejo na próxima!

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