El modo Light Sleep es uno de los modos de bajo consumo de energía disponibles en el ESP32, similar a un modo de “suspensión” de un ordenador.
En este modo, el ESP32 consume menos de 1mA (por ejemplo, 800mA en el ESP32 y 240uA en el ESP32-S3)
En este modo, la CPU, la RAM y los periféricos digitales se desconectan del reloj y se reduce su voltaje. Al estar desconectados del reloj dejan de funcionar, pero siguen encendidos y activos.
Cuando el ESP32 se encuentra en Light Sleep, deja de ejecutar el programa y entra en un estado de suspensión. Para salir del modo Light Sleep, los WakeUp Source disponibles son:
- Timer
- GPIO Wakeup
- UART Wakeup
- WIFI Wakeup
- Touchpad
- ULP Coprocessor Wakeup
- External Wakeup (Ext0 y Ext1)
Al salir Light Sleep, el programa continua la ejecución desde el mismo punto donde estuviera. Cualquier información o variable que se hubiera guardado en la memoria se mantienen.
Si necesitas más información sobre los modos de funcionamiento y WakeUp Source puedes consultar
Uso del modo Light Sleep en el IDE de Arduino
Las funciones necesarias para usar el modo Light Sleep están definidos en el fichero “esp_sleep.h”. Esta biblioteca contiene las funciones y macros necesarios para configurar y controlar el modo Light Sleep del ESP32.
Con esto, es muy sencillo emplear el modo Light Sleep del ESP32 en el entorno de Arduino. En primer lugar, definimos un WakeUp Source con las funciones que vimos en Qué son los modos sleep en el ESP32.
A continuación, entrar en el modo Light Sleep es tan sencillo como usar la función esp_light_sleep_start
/**
* @brief Enter light sleep with the configured wakeup options
*/
esp_err_t esp_light_sleep_start(void);
Ejemplos de código
Uso del modo Light Sleep
Veamos un ejemplo completo de cómo utilizar el modo Light Sleep para hacer que el ESP32 entre en sueño profundo durante 10 segundos y luego se despierte:
void setup()
{
Serial.begin(115200);
delay(5000);
}
int counter = 0;
void loop() {
Serial.println(counter);
counter ++;
esp_sleep_enable_timer_wakeup(2 * 1000000); //light sleep durante 2 segundos
esp_light_sleep_start();
}