Desabilitando o WiFi do ESP8266

Muitos já 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.

Desabilitando 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.

Agora devemos forçar o sleep mode do rádio WiFi.

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.

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.

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!

Ref:

http://www.espressif.com/sites/default/files/9b-esp8266-low_power_solutions_en_0.pdf
http://bbs.espressif.com/viewtopic.php?t=133
http://pedrominatel.com.br/pt/esp8266/modos-de-economia-de-energia-no-esp8266/

13 Comments

  1. Eder VINI

    De passagem, e vejo essa nova publicação! Parabéns pela contribuição. Isto é de grande valor

    Reply
    1. pedrominatel

      Obrigado Eder!! Feliz 2017!

      Reply
  2. urbanze

    qual o comando pra sleep sem biblioteca? direto por comandos AT?

    Reply
    1. pedrominatel

      Para entrar em sleep mode em comandos AT:

      Para entrar no modo sleep (modem)
      AT+SLEEP=2

      Para sair
      AT+SLEEP=0

      Maiores informações na página 15 deste doumento: https://www.itead.cc/wiki/images/5/53/Esp8266_at_instruction_set_en_v1.5.4_0.pdf

      Reply
  3. JAGoris

    Esta fechando o ano com chave de ouro. Muito boa esta informação. Só podia partir de você Pedro.

    Reply
    1. pedrominatel

      Obrigado!!!! Feliz 2017 e muitas novidades a caminho!!!

      Reply
  4. Tiago Alexandre

    Show de bola a postagem, muito util, seria interessante botar um código com uma chavinha seletora para ativar e desligar o wifi manualmente

    Reply
  5. Yuri Lima

    No caso ele iria funcionar como RF ? Estilo NRF ? Se sim, daria pra montar uma rede mesh ?

    Reply
  6. Alexandre Magno

    Pedro, qual seria a maneira mais econômica de ouvir MQTT? Suspeito de que seja Modem-sleep automático, a aproximadamente 15 mA, mas não pude testar se isso funciona mesmo.

    Na sua opinião, eu deveria aplicar outra tecnologia de software? A intenção é apenas receber comandos da Internet, passando pela firewall com NAT. Um cliente MQTT me pareceu algo bem fácil, mas agora eu me dei conta de que seria interessante ter uma alimentação por bateria.

    Reply
    1. Pedro Minatel (Post author)

      Se tratando de uso de bateria, o ideal é o uso do deep sleep, já que o consumo em modem sleep é na casa de 15mA, a bateria não iria durar muito tempo, dependendo da bateria.

      Acorda o ESP por um tempo, envia os dados e depois dorme.

      Reply
      1. Alexandre Magno

        Para usar deep sleep eu teria de recriar alguma roda, pois meu projeto não envia dado sem antes receber comando vindo da Internet.

        Eu teria de acordar do deep-sleep e “consultar” um servidor na Internet, não podendo mais ser uma assinatura em tópico MQTT. Depois eu farei cálculos para ver se valerá à pena programar essa roda. Nesse ínterim, posso ir trabalhando com a ideia de energizar o ESP-01 por fonte de alimentação.

        O que eu quero fazer: http://www.clubedohardware.com.br/forums/topic/1206019-talkback-com-esp-01-ou-coisa-parecida/

        Perceba que eu comecei pensando no TalkBack, que até suporta o deep sleep. Mas logo eu quis simplificar, passando para PubSub em MQTT.

        Reply
  7. Almir Lamounier

    Olá Pedro,

    É possível utilizar o ESP conectado a um multiplexador, aumentando assim a quantidade de portas analógicas e justificando mais ainda a substituição do Arduino.

    Você já fez algo parecido?

    Reply
    1. Pedro Minatel (Post author)

      Acredito que é possivel sim, mas dependendo da sua aplicação o ideal seria usar um ADC externo via SPI ou I2C. A taxa de amostragem do ADC do ESP não é muito alta para fazer isso.

      Reply

Deixe seu comentário