Modos de economia de energia no ESP8266

Em alguns dispositivos alimentados por bateria, ou por qualquer outra fonte de energia limitada, é imprescindível que haja o menor consumo possível. A economia de energia possibilita que este dispositivo dure por dias ou até mesmo anos sem a necessidade de nenhuma fonte adicional de energia.

O ESP8266, por se tratar de um SoC WiFi, o consumo de energia não é baixo, e por isso o uso de bateria tem que ser feito com os modos de economia de energia que o ESP dispõe.

Modos de Economia de Energia

O ESP dispõe de 3 modos de economia de energia, conforme descritos abaixo:

Modem Sleep

Neste modo, durante a ausência de transmissão, o circuito WiFi é desligado e a CPU permanece ativa. O processamento de informações locais ainda é possível.

Este modo é utilizado em sistemas DTIM beacon, que é quando um cliente informa a estação que há pacotes dentro de um intervalo definido, que pode variar de 100ms a 1s. Durante esse intervalo, o circuito de WiFi fica desligado.

Light Sleep

Neste modo, durante a ausência de transmissão, o modem WiFi é desligado e a CPU entra em modo suspenso. O processamento de informações locais não é possível nesse modo.

Neste modo, o wakeup tem que ser por meio de um hardware externo, conectado em um pino do ESP, não podendo ser a GPIO16.

Deep Sleep

No modo deep sleep, o circuito WiFi e a CPU são desligados, permanecendo apenas o RTC, responsável por fazer o wakeup (voltar ao estado normal).
Neste modo, a GPIO16 deverá ser conectada ao RESET, já que é o estado desta GPIO que faz que o ESP acorde e volte ao estado normal de operação.

Para voltar ao modo normal de operação, devemos enviar um sinal baixo (GND) no pino de RESET. Isso é realizado pelo circuito de RTC, que permanece ativo neste modo, e envia o sinal depois de um tempo, que foi configurado no código.
O tempo em que o ESP vai permanecer em modo sleep, é configurado pelo usuário no código, e é definido em microssegundos.

Neste modo, o consumo de energia não cai para zero, já que no deep sleep o circuito de RTC permanece ativo.

sleepmodesesp8266

Tabela com o consumo aproximado de cada modo e qual circuito é desligado durante o sleep.

Testes e demonstração

O teste a ser realizado, visa mostrar o funcionamento do modo deep sleep apenas, já que os outros dois modos, a economia não é tão significante, e queremos minimizar o máximo o consumo.

O teste será com o ESP8266 modelo 12E mas pode funcionar em qualquer modelo com acesso ao pino GPIO16 e RESET. A IDE será o platformIO com o framework Arduino.

Função deep sleep

A função para entrar em modo Deep Sleep é:

Ou

Onde MODE poderá ser:

  • WAKE_RF_DEFAULT
    • A calibração do WiFi será feita se necessário, sendo automática a decisão de fazer ou não a calibração após acordar do deep sleep.
  • WAKE_RFCAL
    • Força a calibração após acordar do deep sleep.
  • WAKE_NO_RFCAL
    • Não faz a calibração após acordar do deep sleep.
  • WAKE_RF_DISABLED
    • Desabilita o WiFi após acordar do deep sleep.

Onde o “time_in_us” é o tempo em microssegundos em que o ESP estará em modo deep sleep. O valor máximo é de 4,294,967,295 microssegundos (2^32), o que corresponde a aproximadamente 70 minutos.

Abaixo um exemplo de código que utiliza o modo deep sleep, onde após a conexão, os dados são enviados para o ThingSpeak e depois o ESP entra em modo deep sleep por 60 segundos.

Neste teste, utilizarei o ESP8266 Thing da SparkFun com uma bateria Litium de 3,7v e com uma carga de aproximadamente 500mAh.

Atenção: A bateria de litium possui uma tensão de aproximadamente 4,2v quando carregada. Ligar a bateria de litium direto no ESP pode queimá-lo.

Use um regulador de baixo dropout para reduzir a tensão para aproximadamente 3,6v.

Código

Os dados do teste podem ser visualizados no canal 174751 do ThingSpeak.

Conclusão

Usar deep sleep pode fazer total diferença em sistemas alimentados por bateria, até assumindo ser essencial. A diferença neste teste foi de um ganho de 11x, já que o consumo caiu de 82mA para 7,2mA, podendo ser até menor, já que por conta do LED na placa tivemos esse consumo mais elevado em deep sleep.

Referencias

 

 

Happy Hacking!

7 Comments

  1. Rafael

    Muito bom, vou fazer meus testes aqui também!

    Reply
    1. Pedro Minatel (Post author)

      Valeu por acompanhar o blog!

      Reply
  2. Bruno Scherer

    Pedro, como eu poderia configurar para o modo “modem-sleep”? Não encontrei na internet o pessoal usando esse modo…

    Reply
    1. Pedro Minatel (Post author)

      Bruno, a implementação está no arquivo ESP8266WiFiGeneric.cpp.

      Existem alguns posts relacionados na internet:

      http://bbs.espressif.com/viewtopic.php?t=133
      https://github.com/esp8266/Arduino/issues/460

      Obrigado!

      Reply
  3. Pingback: Desabilitando o WiFi do ESP8266 – Agency Major

  4. Pingback: Desabilitando o WiFi do ESP8266 – Viraw

  5. Pingback: Desabilitando o WiFi do ESP8266

Deixe seu comentário