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!