Correo: [email protected] - Teléfono: +56979962128

Tutorial - ESP32 Sleep Modes - Modem Sleep, Light Sleep, Deep Sleep, Hibernation & Their Power Consumption

El ESP32 es un competidor formidable en el ámbito de los SoCs (System on Chip) WiFi/MCU, destacándose tanto en rendimiento como en precio. Sin embargo, dependiendo del modo en el que se encuentre, el ESP32 puede ser un dispositivo relativamente exigente en cuanto a consumo de energía.

Cuando tu proyecto IoT está alimentado por una toma de corriente, el consumo de energía es menos preocupante. Sin embargo, si planeas alimentar tu proyecto con una batería, cada mA cuenta.

La solución en este caso es aprovechar uno de los modos de suspensión del ESP32 para reducir el consumo de energía. Esta es una excelente estrategia para aumentar significativamente la vida útil de la batería en un proyecto que no necesita estar activo todo el tiempo.

¿Qué es exactamente el modo de suspensión ESP32?  El modo de suspensión ESP32 es un modo de ahorro de energía. Cuando no está en uso, el ESP32 puede entrar en este modo, almacenando todos los datos en la RAM. En este punto, todos los periféricos innecesarios se desactivan mientras la RAM recibe suficiente energía para retener sus datos.   

Dentro del chip ESP32

Conocer lo que hay dentro del chip nos ayudará a comprender mejor cómo el ESP32 gestiona el ahorro de energía. El diagrama de bloques del chip ESP32 se muestra a continuación.

Block Diagrams

El chip ESP32 contiene un microprocesador de doble núcleo de 32 bits junto con 448 KB de ROM, 520 KB de SRAM y 4 MB de memoria flash. Además, el chip contiene un módulo WiFi, un módulo Bluetooth, un acelerador criptográfico (un coprocesador diseñado específicamente para realizar operaciones criptográficas), un módulo RTC y varios periféricos.

Modos de Energía del ESP32 

Gracias a la avanzada gestión de energía del ESP32, ofrece cinco modos de energía configurables. Según los requisitos de energía, el chip puede cambiar entre diferentes modos de energía. Estos modos son:

  • Modo Activo 
  • Modo de Suspensión de Módem 
  • Modo de Suspensión Ligera
  • Modo de Suspensión Profunda 
  • Modo de Hibernación 

Cada modo tiene características distintas y capacidades de ahorro de energía. Veamos cada uno de ellos.

Modo Activo del ESP32 

El modo normal también se conoce como Modo Activo. En este modo, todos los periféricos del chip permanecen activos.

Como todo está siempre activo en este modo (especialmente el módulo WiFi, el núcleo de procesamiento y el módulo Bluetooth), el chip consume aproximadamente 240 mA de energía. Se ha observado que el chip consume más de 790 mA en ciertos momentos, particularmente cuando se utilizan WiFi y Bluetooth simultáneamente. 

ESP32 Active Mode Functional Block Diagram

Según la hoja de datos del ESP32, el consumo de energía durante las operaciones de RF en modo activo es el siguiente: 

Mode Power Consumption
Wi-Fi Tx packet 13dBm~21dBm 160~260mA
Wi-Fi/BT Tx packet 0dBm 120mA
Wi-Fi/BT Rx and listening 80~90mA

Este modo, sin duda, consume la mayor cantidad de corriente y es el menos eficiente. Para ahorrar energía, debes desactivar las funciones que no se están utilizando cambiando a otro modo de energía.

Modo de suspensión del ESP32

En el modo de suspensión de módem, todo está activo excepto el WiFi, Bluetooth y la radio. La CPU permanece activa y el reloj es configurable.

En este modo, el chip consume aproximadamente 3 mA a baja velocidad y 20 mA a alta velocidad.

ESP32 Modem Sleep Functional Block Diagram

Para mantener la conexión viva, el Wi-Fi, Bluetooth y la radio se activan a intervalos predefinidos. Esto se conoce como el Patrón de Suspensión de Asociación.

Durante este patrón de suspensión, el ESP32 alterna entre el modo activo y el modo de suspensión de módem.

Para lograr esto, el ESP32 se conecta al enrutador en modo estación utilizando el mecanismo de baliza DTIM. El módulo Wi-Fi se desactiva entre dos intervalos de baliza DTIM y luego se activa automáticamente justo antes de que llegue la siguiente baliza, lo que resulta en un ahorro de energía.

El tiempo de suspensión está determinado por el tiempo de intervalo de baliza DTIM del enrutador, que generalmente es de 100 ms a 1000 ms.

 
¿Qué es el mecanismo de baliza DTM?

DTM significa mensaje de indicación de tráfico de entrega 
DTIM-Beacon

En este mecanismo, el punto de acceso (AP)/router transmite tramas de baliza periódicamente. Cada trama contiene información relacionada con la red. Se utiliza para anunciar la presencia de una red inalámbrica, así como para sincronizar todos los miembros conectados. 

Suspensión ligera del ESP32

El modo suspensión ligera es similar al modo suspensión de módem en que el chip sigue el Patrón de Suspensión de Asociación. La única diferencia es que en el modo de suspensión ligera, la CPU, la mayor parte de la RAM y los periféricos digitales están controlados por el reloj. 

¿Qué es Clock Gating? La compuerta de reloj es una técnica popular de administración de energía para reducir la disipación de energía dinámica al eliminar o ignorar la señal de reloj cuando el circuito no está en uso. La compuerta de reloj reduce el consumo de energía mediante la poda del árbol del reloj. La poda del reloj deshabilita partes de los circuitos, lo que evita que los flip-flops que contienen cambien de estado. Dado que los estados de conmutación consumen energía, cuando no se conmutan, el consumo de energía cae a cero. 

Durante el modo de suspensión ligera, la CPU se pausa al desactivar su pulso de reloj. El RTC y el coprocesador ULP, por otro lado, permanecen activos. Esto resulta en un menor consumo de energía que el modo de suspensión de módem, que es alrededor de 0.8 mA.

ESP32 Light Sleep Functional Block Diagram

Antes de entrar en el modo de suspensión ligera, el ESP32 almacena su estado interno en la RAM y reanuda la operación al despertar de la suspensión. Esto se conoce como Retención Completa de RAM.

Suspensión profunda del ESP32 

En el modo de suspensión profundo, las CPU, la mayoría de la RAM y todos los periféricos digitales están deshabilitados. Solo permanecen operativos las siguientes partes del chip:

  • Coprocesador ULP 
  • Controlador RTC 
  • Periféricos RTC 
  • Memoria rápida y lenta RTC 

En modo de suspensión profunda, el chip consume entre 0.15 mA (cuando el coprocesador ULP está encendido) y 10 µA.

ESP32 Deep Sleep Functional Block Diagram

Durante el modo de suspensión profundo, la CPU principal se apaga, mientras que el coprocesador de Ultra Baja Potencia (ULP) puede tomar lecturas de sensores y despertar la CPU según sea necesario. Este patrón de suspensión se conoce como el patrón monitoreado por el sensor ULP. Esto es útil para diseñar aplicaciones donde la CPU necesita ser despertada por un evento externo, un temporizador o una combinación de estos eventos, mientras se mantiene un consumo mínimo de energía.

Junto con la CPU, la memoria principal del chip también se desactiva. Como resultado, todo lo almacenado en esa memoria se borra y no puede accederse.

Dado que la memoria RTC se mantiene activa, su contenido se conserva incluso durante el suspensión profunda y se puede recuperar una vez que el chip se despierta. Por esta razón, el chip almacena los datos de conexión Wi-Fi y Bluetooth en la memoria RTC antes de entrar en modo de suspensión profunda.

Si deseas utilizar los datos después de un reinicio, guárdalos en la memoria RTC definiendo una variable global con el atributo

RTC_DATA_ATTR

.

Por ejemplo:

RTC_DATA_ATTR int myVar = 0;

Al despertar del suspensión profundo, el ESP32 puede ejecutar un

talón de activación de suspensión profunda

. Es un fragmento de código que se ejecuta tan pronto como el chip se despierta, antes de que se ejecute cualquier inicialización normal, cargador de arranque o código ESP-IDF. Después de ejecutar el stub de activación, el chip puede volver a dormir o continuar iniciando ESP-IDF normalmente. 

Cuando el chip despierta del modo suspensión profunda, realiza un reinicio y comienza la ejecución del programa desde el principio.

Modo de Hibernación del ESP32

El modo de hibernación es muy similar al modo de suspensión profunda. La única diferencia es que en el modo de hibernación, el chip desactiva el oscilador interno de 8 MHz así como el coprocesador ULP, dejando solo un temporizador RTC (en reloj lento) y algunos GPIOs RTC para despertar el chip.

Dado que la memoria de recuperación RTC también se apaga, no podemos guardar ningún dato mientras estamos en modo de hibernación. 

ESP32 Hibernation Mode Functional Block Diagram

Como resultado, el consumo de energía del chip se reduce aún más; en modo de hibernación, consume solo alrededor de 2.5 µA.

Este modo es especialmente útil si estás trabajando en un proyecto que no necesita estar activo todo el tiempo.

Preguntas frecuentes

¿Qué es el modo de suspensión del ESP32?

Es un modo de ahorro de energía en el que el ESP32 guarda todos los datos en la RAM y desactiva los periféricos que no se necesitan, dejando solo la energía suficiente para que la RAM conserve su contenido. Sirve para alargar mucho la vida de la batería en proyectos que no necesitan estar activos todo el tiempo.

¿Cuántos modos de energía tiene el ESP32?

Cinco modos configurables: Activo, Suspensión de Módem, Suspensión Ligera, Suspensión Profunda e Hibernación. Cada uno desactiva distintas partes del chip, así que el ahorro y las capacidades que se conservan cambian según el modo elegido.

¿Cuánta corriente consume el ESP32 en modo activo?

En modo activo todos los periféricos permanecen encendidos y el chip consume alrededor de 240 mA. Se han observado picos de más de 790 mA, especialmente cuando se usan WiFi y Bluetooth al mismo tiempo.

¿Qué hay dentro del chip ESP32?

Un microprocesador de doble núcleo de 32 bits, 448 KB de ROM, 520 KB de SRAM y 4 MB de memoria flash. Además incluye un módulo WiFi, un módulo Bluetooth, un acelerador criptográfico, un módulo RTC y varios periféricos.

¿Cuándo conviene usar un modo de suspensión?

Cuando el proyecto se alimenta con batería y no necesita estar activo de forma permanente. Si el equipo está conectado a la red eléctrica el consumo importa poco, pero con batería cada miliamperio cuenta y la suspensión es la forma más efectiva de reducirlo.

Aprende esto en un curso

Si prefieres verlo en vivo y con alguien que resuelva tus dudas, estos cursos presenciales de MCI Educación cubren el tema de este tutorial: