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!

17 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

  6. Filipe Gabriel Carloto

    Pedro, há alguma maneira de eu fazer com ele saia do Deep Sleep por um botão e esse mesmo botão fazê-lo entrar em modo AP?

    Reply
    1. Pedro Minatel (Post author)

      Se ligar um botão no reset dá. É exatamente isso que a GPIO16 faz, envia um sinal de reset.

      Reply
  7. Emanuel Vidal

    Amigo,estou com um problema com um nodemcu q comprei eu o programei para comandar dois reles através de um pagina dentro dele mesmo e ele faz muito bem, meu problema eh q apos um tempo sem uso q acho ser de varias horas ele simplesmente não abre mais a pagina , como c tivesse entrado em modo de economia de energia por inatividade, so volta a responder c eu desligar e ligar a fonte de alimentação com eu faço para desabilitar isso não quero q ele pare de responder ele não precisa economizar energia pois esta ligado direto na rede elétrica! Desde de já agradeço.

    Reply
  8. mario

    Bom dia, gostaria de saber que regulador de tensão você usou. Estou fazendo um projeto do esp8266 com baterias e está complicado de achar um regulador de tensão com dropout que não altere tanto a duração da bateria. Desde já agradeço a atenção

    Reply
    1. Pedro Minatel (Post author)

      Mário, eu uso o HT7333 com baixo dropout.

      Reply
      1. mario

        Pedro, obrigado pela rápida resposta. Tinha achado esse regulador nas pesquisas, porém não achei onde comprar no Brasil.

        Reply
        1. Pedro Minatel (Post author)

          Tem no Aliexpress. Aqui no Brasil não achei tbm.

          Reply
          1. mario

            Vou fazer o pedido lá então, estou com um projeto em que um baixo dropout é fundamental. Demorou muito para chegar? Você lembra qual tipo de frete escolheu? Agradeço a atenção. Teu é massa, me ajudou bastante.

          2. Pedro Minatel (Post author)

            Demorou uns 40 dias por frete simples registrado. Obrigado!

  9. Guilherme

    Boa noite Pedro, como vai? Primeiramente parabéns pelo tópico. Então, estou desenvolvendo um sistema com reed switch, gostaria de saber se é possível “acordar” o ESP quando o estado do reed switch for alterado? Obrigado.

    Reply

Deixe seu comentário