ESP8266 em Deep Sleep Mode através do IFTTT 7

A placa Wi-Fi ESP8266 D1 R2 Mini faz parte de uma excelente plataforma, é capaz de fornecer I/O’s programáveis, entrada microUSB, conversor FTDI integrado, regulador de tensão 3.3VCC, conexão Wi-Fi e muito mais, ou seja, tudo isso reunido em um só dispositivo que pode ser facilmente implementado em projetos IoT, entretanto deixar o seu microcontrolador ligado o tempo todo consome muita bateria de forma desnecessária, tornando projetos portáteis inviáveis devido a troca constante de pilhas ou baterias.Ruim, não é? Então, através deste post, exemplificaremos como podemos acabar de vez com estes problemas causados pelo excesso no consumo de bateria usando a ESP8266 em Deep Sleep Mode que signfica “ESP8266 em modo de sono profundo”.

ESP8266 em Deep Sleep Mode

Quer saber mais sobre outros modos e como economizar energia em seu projetos embarcados? Dê uma olhada no excelente post do Stephen, Power Saving Mode: como salvar energia nos seus projetos.

ESP8266 em Deep Sleep Mode através do IFTTT

O Projeto ESP8266 em Deep Sleep Mode através do IFTTT, consiste em fazer a ESP8266 D1 R2 Mini enviar dados ao site IFTTT.com, que por sua vez é convertido em uma mensagem de texto e enviado por exemplo a um e-mail ou celular através de SMS do usuário cadastrado, o melhor de tudo isso é que o microcontrolador será ligado apenas quando o botão reset for pressionado, ou seja, passará maior parte do tempo desligado, consumindo uma corrente de aproximadamente 20uA aumentando em muito a autonomia de seu projeto portátil.

Gostou da idéia? Então aprenda como enviar dados através da ESP8266 em Deep Sleep Mode através do IFTTT.

Material Necessário

A alimentação pode ser feita pelo cabo USB (o mesmo cabo utilizado na programação da D1 R2 Mini) ou Bateria de Li-Po 400mAh através dos terminais 3,3VCC/GND.

É de grande importância, que você tenha o Arduino IDE instalado em sua máquina, de preferência a ultima versão disponível no site Arduino.CC.

Depois é necessário realizar a configuração do Arduino IDE para realizar o desenvolvimento com a ESP8266, você pode fazer essa configuração usando como base esse tutorial descrito no Blog FilipeFlop.

O que significa Deep Sleep mode?

Significa que o rádio Wi-Fi, CPU e CLOCK da ESP8266 ficam desligados, apenas o RTC continua ligado. Este modo é o melhor na questão de economia de bateria já que praticamente todo o microcontrolador fica desligado. É útil quando precisamos por exemplo enviar dados de um botão IoT para um servidor, no caso deste exemplo o IFTTT.

Consumo aproximado: ~20μA em modo Deep Sleep, conforme imagem abaixo:

consumo do ESP8266 em Deep Sleep Mode

Para saber mais sobre todos os modos sleep’s da ESP8266 acesse o datasheet.

Como Funciona a plataforma IFTTT?

IFTTT é um acrônimo para “If This, Then That”, que na tradução para o potuguês seria, “Se Isso, Aquilo”. Com IFTTT é possível interconectar dois serviços da Web para realizar tarefas determinadas pelo usuário, pois tem um serviço chamado Webhooks que nos possibilita trabalhar com protocolo HTTP.

Para saber mais sobre a plataforma IFTTT acesse o excelente post de Giovanni Bauermeister, Botão IoT com Raspberry Pi Zero W e IFTTT.

Para fazer o uso da funcionalidade da plataforma IFTTT é necessário realizar o download através da Play Store para dispositivos Android depois é só seguir os passos indicados abaixo:

Para criar uma conta na plataforma IFTTT clique em “Sign Up” caso tenha cadastro clique em “Sign In”.

login IFTTT            login IFTTT 2

Agora vá na aba “My Applets” e clique no simbolo “+” adicionaremos um “New Applet” clicando em “+this”.

login IFTTT 3               IFTTT

Agora digitaremos o serviço desejado, neste caso if “Webhooks”.

     IFTTT new applet          IFTTT new applet trigger

Nesta próxima etapa selecione o “Event Name” a ser criado, por exemplo: “BotaoPressionado”, clique em “Create Trigger”.

Depois vá na aba “+that” e digite “Android SMS”.

IFTTT new applet complete trigger              IFTTT new applet nome

Clique em “Send SMS” e digite o número de telefone e a mensagem que queira enviar, depois clique em “create action”, conforme imagem abaixo:

IFTTT new applet complete action

Pronto os eventos “if +this, then +that” foram criados com sucesso, agora é preciso verificar qual é o código de acesso que enviará os dados da ESP8266 para a plataforma IFTTT, para isso de uma olhada nas imagens abaixo:

Clique na lupa e digite “Webhooks” em “Services”, depois clique na engrenagem “settings”

webhooks            webhooks documentação

Pronto! Agora clique na URL e copie a chave “em vermelho” que disponibilizara o código de acesso entre ESP8266 e IFTTT e colar no código fonte do projeto no arduino IDE.

webhooks chave de acesso

Esquema Elétrico

Observe o circuito esquemático abaixo, que será usado no projeto ESP8266 em Deep Sleep Mode Através do IFTTT:

O botão reset utilizado no experimento já está conectado na placa, entretanto é possivel conectar um botão externo entre o pino GND e o pino RST, caso queira realizar um protótipo por exemplo, o LED que utilizamos neste circuito nos mostrará que a conexão entre IFTTT e ESP8266 foi estabelecida com sucesso, o resistor de 220 ohms serve como limitador de corrente para não ocasionar a queima do componente.

ESP8266 em Deep Sleep Mode com LED

Programando o Módulo ESP8266 D1 R2 Mini

Primeiramente digite o SSID e PASSWORD configurada em sua rede Wi-Fi.

Digite a chave de acesso “em vermelho” que está disponível no aplicativo IFTTT e compile o programa no Arduino IDE.

Após carregar o código fonte para a ESP8266, abra o serial monitor (com baudrate em 115200 bauds) para acompanhar o que a D1 R2 Mini está fazendo.

#include <ESP8266WiFi.h>

const char* ssid     = " Digite aqui seu SSID";
const char* password = "Digite aqui seu PASSWORD";

//Host e chave disponíveis na plataforma IFTTT.
const char* host = "maker.ifttt.com";
const char* key = "Cole aqui sua chave de acesso";

//Led indica que a mensagem foi disparada ao IFTTT.

const int led = D7;

char* eventName = "";

// Menssagem mostra que  botão pressionado.
char* BotaoPressionado = "EventNameSMS";

void setup() {

//Porta serial configurada em 115200 baud rate.
Serial.begin(115200);
delay(10);

//Define D7 como saída.
pinMode(D7, OUTPUT);

connectToWifi();
}
void loop()
{
eventName = BotaoPressionado;

//Assim que o botao for pressionado o SMS é disparado.
sendAnSMS();
Serial.println("Sleep ZzZ...");

//A ESP8266 fica em modo de sono profundo até que o botao RESET seja pressionado.
ESP.deepSleep(0, WAKE_RF_DEFAULT);
}
void connectToWifi()
{

//Serial monitor indica comunicacao entre Wi-Fi e ESP8266.
Serial.print("Conectado em:");
Serial.println(ssid);
WiFi.begin(ssid, password);

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

Serial.println("");
Serial.println("WiFi conectado");
Serial.println("Endereco IP: ");
Serial.println(WiFi.localIP());
}
void sendAnSMS()
{

//Caso o o comando de envio do SMS seja habilitado, LED pisca 4X.
for(int i=0; i<4; i++) {
digitalWrite(led, HIGH);
delay(200);
digitalWrite(led, LOW);
delay(200);
}
Serial.print("conectado em: ");
Serial.println(host);
WiFiClient client;

//Estabelece comunicacao através da porta 80 - HTTP.
const int httpPort = 80;
//Caso a conexao nao seja estabelecida entre ESP82666 e IFTTT.
if (!client.connect(host, httpPort)) {
Serial.println("Falha de Conexao");
return;
}
//Dispara eventName através da chave de comunicacao do IFTTT.
String url = "/trigger/";
url += eventName;
url += "/with/key/";
url += key;

Serial.print("URL: ");
Serial.println(url);
client.print(String("GET ") + url + " HTTP/1.1\r\n" +
"Host: " + host + "\r\n" +
"Conexao: Fechada\r\n\r\n");
int timeout = millis() + 5000;
while (client.available() == 0) {
if (timeout - millis() < 0) {
Serial.println(">>> Tempo Excedido !");
client.stop();
return;
}
}
while(client.available()){
String line = client.readStringUntil('\r');
Serial.print(line);
}
Serial.println();
Serial.println("Fechando Conexao");

delay(1000);
}

Resultado da ESP8266 em Deep Sleep Mode

Assim que o botão for pressionado ou o sistema for iniciado, ocorrerá o primeiro disparo de mensagem através do “EventNameSMS” configurado na plataforma IFTTT, depois a ESP8266 entre em  modo de sono profundo, sendo habilitada apenas quando o botão RESET for pressionado novamente, então é possível deixa-la conectada durante meses ou anos a uma bateria de lítio, tudo vai depender de quanto em quanto tempo elá vai ser habilitada, é possível verificar os estágios de consumo através do gráfico abaixo:

Resultado da ESP8266 em Deep Sleep Mode

De acordo com a figura acima podemos verificar que no momento em que a ESP8266 é despertada a um aumento significativo de energia decorrente das tarefas de conexão Wi-Fi e CPU, porem após a execução das tarefas observamos novamente um baixo consumo de energia.

Gostou de como utilizar a ESP8266 em Deep Sleep Mode através do IFTTT? Deixe seu comentário logo abaixo.

Até a Próxima !

Faça seu comentário

Acesse sua conta e participe

7 Comentários

  1. Comecei do nada a apresentar um problema. Até hoje meu projeto baseado no seu código estava funcionando perfeitamente. porém hoje, do nada parou de se comunicar comigo. conectei o cabo no meu PC para verificar o Monitor Serial e percebi que no final da mensagem ele não apresenta o “mensagem enviada” e sim o

    301 Moved Permanently

    301 Moved Permanently

    testei em outro NodeMCU e está apresentando o mesmo problema. segue resposta total visto pelo Serial Monitor…

    …….
    WiFi conectado
    Endereco IP:
    ***********
    conectado em: maker.ifttt.com
    URL: /trigger/semrisco/with/key/*************************************
    HTTP/1.1 301 Moved Permanently
    Server: awselb/2.0
    Date: Tue, 04 May 2021 23:17:22 GMT
    Content-Type: text/html
    Content-Length: 134
    Connection: keep-alive
    Location: https://maker.ifttt.com:443/trigger/semrisco/with/key/88888888888888888888888888888

    301 Moved Permanently

    301 Moved Permanently

    1. Olá Ricardo,

      Infelizmente pelo que constatei o site IFTTT está fora do ar.

      Essa é a causa do problema.

      Abraços!
      Vinícius – Equipe FilipeFlop

  2. Muito BOM!!!

    Programa muito bem estruturado e que funciona de forma credivel

    Este programa abre um novo mundo de funcionalidades ao ESP

    Parabéns e Obrigado

    1. Olá Antônio!

      Que bom que pudemos te ajudar!

      Abraço!
      Rosana – Equipe FilipeFlop

  3. Por exemplo, esse é meu código:
    Esse sensor eu acoplei em um carrinho e o objetivo do sensor é que quando ele esteja a uma distancia muito grande, significa que o carrinho tombou:

    #include
    #define pino_trigger D1
    #define pino_echo D2

    Ultrasonic ultrasonic(pino_trigger, pino_echo);

    void setup()
    {
    Serial.begin(9600);
    Serial.println(“Lendo dados do sensor…”);
    }

    void loop()
    {

    float cmMsec;
    long microsec = ultrasonic.timing();
    cmMsec = ultrasonic.convert(microsec, Ultrasonic::CM);
    if (cmMsec <=30)
    {
    Serial.println("CARRO OK");
    }
    else{
    Serial.println("CARRO TOMBOU");
    }
    delay(1000);
    }

    como que eu faço para enviar isso para o IFTTT? Tentei usar o código do seu exemplo porém eu não consegui.

  4. Oi amigo, eu estou tendo um pouco de dificuldade para fazer o ESP8266 comunicar com o sensor ultra sônico HC-SR04.

    Fiz a conta no IFTTT, funcionou corretamente. Testei no próprio site e deu certo, até recebo no meu celular a mensagem.

    Meu problema está sendo escrever o código para enviar as informações do ESP para o IFTTT, e assim disparar o trigger.

    Você poderia me dar alguma dicas? A parte do código já está OK, só preciso de dicas de como enviar para o IFTTT para acionar o trigger.

    1. Olá Marcelo, bom dia!

      Lembrando que a ESP8266 tem que receber um sinal de 3,3V a partir do do pino ECHO, recomendo que você utilize um divisor de tensão R1=1K2 e R2=2K2, assim você consegue limitar a tensão no pino até 3,3V.
      A alimentação do sensor HC SR-04 é de 5V, você pode alimental-lá diretamente pelo pino VIN da placa caso esteja liga em 5V.

      Isso acontece por que a ESP8266 identifica tensões nos pinos com 3,3V, diferente do arduino que trabalha com tensões de até 5V.

      Segue link para você conseguir visualizar melhor!
      https://www.letscontrolit.com/wiki/index.php?title=File:HC-SR04_simple.jpg

      Espero ter ajudado!