IoT e Makers

23 jan, 2017

Desabilitando o WiFi do ESP8266

Publicidade

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!

Referências