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”.
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
- Módulo WiFi ESP8266EX D1 Mini Wemos
- Bateria Li-Po 400mAh Conector 51021
- Led
- Resistor 470Ω
- Jumpers macho fêmea
- Mini protoboard
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 MakerHero.
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:
Para saber mais sobre todos os modos sleep’s da ESP8266 acesse o datasheet.
Como Funciona a plataforma IFTTT?
O 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”.
Agora vá na aba “My Applets” e clique no simbolo “+” adicionaremos um “New Applet” clicando em “+this”.
Agora digitaremos o serviço desejado, neste caso if “Webhooks”.
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”.
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:
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”
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.
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.
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:
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 !
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
Olá Ricardo,
Infelizmente pelo que constatei o site IFTTT está fora do ar.
Essa é a causa do problema.
Abraços!
Vinícius – Equipe MakerHero
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
Olá Antônio!
Que bom que pudemos te ajudar!
Abraço!
Rosana – Equipe MakerHero
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.
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.
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!