Manual
do
Maker
.
com
Não necessariamente precisamos utilizar WiFi em todos nossos projetos com ESP8266. O ESP8266 tem um excelente clock, que pode trabalhar em 80MHz ou 160MHz, além do recursos de sistema de arquivos nativo, dispensando o uso de microSD para armazenamento de dados. Claro, também podemos gravar na EEPROM com bibliotecas, mas usar SPIFFS ou FAT, ou LittleFS é um recurso nativo de fácil implementação. Mas sem desviar o foco, vamos tratar de desativar WiFi no ESP8266 e também reativá-lo, de modo a economizar no consumo e mantê-lo mais tempo ligado em uma bateria.
Esse é um artigo que "odiadores amarão", porque estou fazendo meio que um procedimento "híbrido". Mas funcionar é o que importa, certo?
O código para fazer o desligamento do rádio é esse:
extern "C" {
#include "user_interface.h"
}
unsigned long int last_time = 0;
#include <Arduino.h>
#include <ESP8266WiFi.h>
#define FPM_SLEEP_MAX_TIME 0xFFFFFFF
#define SSID "SuhankoFamily"
#define PASSWD "fsjmr112"
void rf_off(){
Serial.println("Desabilitando radio...");
WiFi.forceSleepBegin();
delay(1);
Serial.println("Feito.");
}
void rf_on(){
Serial.println("Reiniciando radio...");
wifi_fpm_do_wakeup();
wifi_fpm_close();
wifi_set_opmode(STATION_MODE);
wifi_station_connect();
Serial.println("Feito.");
}
void setup(){
last_time = millis();
Serial.begin(9600);
delay(900);
WiFi.forceSleepBegin();
}
void loop(){
while (Serial.available() > 0){
uint8_t action = Serial.read();
if (action == 49){
rf_on();
delay(2000);
}
else if (action == 48){
rf_off();
}
}
if ((millis()-last_time) > 10){
last_time = millis();
wdt_reset();
}
}
O uso do wdt_reset() foi necessário para evitar reset da MCU. Dependendo da implementação do restante do código na função loop(), será necessário adicionar essa chamada em outros pontos. O WDT tem um tempo limite que pode ser consultado na documentação e experimentado em seu código para que fique adequado a uma grande implementação, assim como tem também a possibilidade de desabilitá-lo. A princípio, esse código funciona bem e deve funcionar tranquilamente, assim como demonstro no vídeo em nosso canal DobitaobyteBrasil no Youtube. Aproveito para convidá-lo a inscrever-se em nosso canal e, se gostar minimamente, deixe seu like!
Minha medição na USB bateu em 40mA com rádio e zerou sem o rádio. Não sei se no ESP-01 o consumo é mesmo assim tão baixo, mas considerando a proporcionalidade do erro, é bastante significativo.
Podemos habilitar e desabilitar a qualquer momento, de modo que se precisarmos enviar alguma informação por WiFi com certa periodicidade, basta levantar o rádio, enviar e desligar. Também, sendo necessário conectar ao ESP8266, podemos adicionar um botão para levantar o rádio a qualquer momento.
Nesse documento da ESPressif tem todos os detalhes e dicas para fazer o deep sleep, aproveite.
Como sugestão de leitura, nesse artigo descrevo a combinação do ESP-01 com Arduino sem utilizar AT. É uma boa leitura, na qual demonstro o ESP-01 atuando como master, aproveitando seu clock para fazer as tarefas principais e utilizando os GPIO do Arduino para os atuadores.
Quase todos nossos parceiros da coluna da direita vendem ambas as placas. Em destaque, cito a CurtoCircuito, que tem uma variedade significativa de ESP32, sempre trazendo novidades, como a Heltec Stick. A Saravati também surpreende, como por exemplo, com a TTGO T-Câmera. Sem dúvidas vale a pena ficar de olho em ambas as lojas.
No vídeo faço um breve comentário e demonstro a redução do consumo, habilitando e desabilitando o rádio do ESP8266, confira em nosso canal. Se não é inscrito em nosso canal no Youtube, aproveite para prestigiar o blog inscrevendo-se e se gostar, deixe seu like!
Até a próxima!
Revisão: Ricardo Amaral de Andrade
Inscreva-se no nosso canal Manual do Maker no YouTube.
Também estamos no Instagram.
Autor do blog "Do bit Ao Byte / Manual do Maker".
Viciado em embarcados desde 2006.
LinuxUser 158.760, desde 1997.