Desabilitando o WiFi do ESP8266
Muitos dizem que o ESP8266 já poderia substituir o Arduino, não só em relação ao preço, mas em termos de funcionalidades. Vejamos…
Muitos dizem que o ESP8266 já poderia substituir o Arduino, não só em relação ao preço, mas em termos de funcionalidades. O Arduino é ainda muito mais popular que o ESP8266 e muito mais difundido nas comunidades, mas isso um dia pode reverter.
Em alguns projetos, onde não há necessidade de utilizar o WiFi, o ESP ainda pode ser uma boa opção de custo. Contudo, o WiFi gera um consumo elevado, mesmo sem conectar em nenhuma rede, podendo consumir o dobro, ou mais, de energia para fazer a mesma coisa que um Arduino.
De acordo com a documentação da Espressif, o fato de desligar o WiFi pode reduzir o consumo para algo próximo de 15mA. Com o WiFi ligado, esse consumo fica entre 70 a 120mA.
Desabilidftando o WiFi
O ESP8266 tem modos de economia de energia, como já tratei no artigo de sleep modes. Esses modos permitem uma economia de energia, como por exemplo, desligar o rádio WiFi.
Para desabilitar o rádio WiFi do ESP, devemos seguir com os seguintes comandos, utilizando a plataforma Arduino:
Mude o modo de operação do WiFi para WIFI_OFF.
WiFi.mode(WIFI_OFF);
Agora, devemos forçar o sleep mode do rádio WiFi.
WiFi.forceSleepBegin();
Recomenda-se adicionar um delay de aproximadamente 10ms, porém não há referência na documentação oficial.
Habilitando o WiFi
Para o processo reverso, ou seja, ligar o WiFi novamente, devemos seguir os seguintes passos:
Forcar o processo de wake para o WiFi ser habilitado novamente.
WiFi.forceSleepWake();
Lembre-se que, após isso, devemos executar novamente a parte de conexão do WiFi, incluindo a definição do modo de operação.
Código exemplo
Segue abaixo um exemplo de como fazer o desligamento do WiFi e logo ligá-lo novamente para fins de teste.
//Include da lib de Wifi do ESP8266
#include <ESP8266WiFi.h>
//Definir o SSID da rede WiFi
const char* ssid = "<<<SSID>>>";
//Definir a senha da rede WiFi
const char* password = "<<PASSWORD>>";
void connect_wifi(void){
//Inicia o WiFi
WiFi.begin(ssid, password);
Serial.print("Conectando");
//Loop até conectar no WiFi
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
//Logs na porta serial
Serial.println("");
Serial.println("WiFi conectado!");
Serial.print("Conectado na rede ");
Serial.println(WiFi.SSID());
Serial.print("IP: ");
Serial.println(WiFi.localIP());
Serial.print("Subnet Mask: ");
Serial.println(WiFi.subnetMask());
Serial.print("MAC Address: ");
Serial.println(WiFi.macAddress());
Serial.print("RSSI: ");
Serial.println(WiFi.RSSI());
digitalWrite(D6, HIGH);
delay(2000);
}
void setup(void){
//Configura o pino digital para saida/output
pinMode(D6, OUTPUT);
digitalWrite(D6, LOW);
//Configuração da UART
Serial.begin(115200);
//Logs na porta serial
Serial.print("Conectando na rede ");
Serial.println(ssid);
connect_wifi();
Serial.println("Desabilitando o WiFi - Modo WIFI_OFF");
WiFi.mode(WIFI_OFF);
Serial.println("Forcando o desligamento do WiFi");
WiFi.forceSleepBegin();
delay(10);
digitalWrite(D6, LOW);
Serial.println("Forcando o religamento do WiFi");
WiFi.forceSleepWake();
Serial.println("Conectando na rede");
connect_wifi();
}
void loop(void){
}
Conclusão
Usar o ESP8266 para substituir o Arduino pode ser viável mesmo em situações onde não há necessidade de uso do WiFi. Muitas vezes, o ESP é mais barato que o Arduino.
O ESP ainda perde na questão de portas analógicas para o Arduino, mas ganha em capacidade de armazenamento e processamento, fora o fato que o WiFi pode ser uma carta na manga em casos de um upgrade futuro do projeto.
Happy hacking!








