12 de abril de 2021

Do bit Ao Byte

Embarcados, Linux e programação

Desativar WiFi no ESP8266 (e reativar)

Desativar WiFi no ESP8266 | Adaptador para ESP-01 | repetidor wifi

Adaptador para ESP-01 | repetidor wifi

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.

Como desativar WiFi no ESP8266?

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.

Documentação do deep sleep

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.

Onde comprar ESP8266 e ESP32

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.

 

Vídeo

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