ESP8266 em Deep Sleep Mode através do IFTTT Deixe um comentário

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. Em caso de dúvidas, caso queira trocar uma ideia, ou até mesmo dividir seu projeto, acesse nosso Fórum!

Até a Próxima !

Deixe uma resposta

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *

{"cart_token":"","hash":"","cart_data":""}