🛠 Deep-sleep 7 µA et réveil externe (EXT0)
Objetivos
Alcanzar el nivel mínimo de consumo del SoC (7 µA en deep-sleep, 240 µA en light-sleep según la docs-db) y despertar el Nano ESP32 mediante un evento externo (botón) con un temporizador de seguridad para el despertar. En deep-sleep, el programa se reinicia desde setup: el estado solo sobrevive en la memoria RTC.
Material
- 1 × Arduino Nano ESP32 + cable USB-C
- 1 × botón entre un pin de despertar y GND
- Un microamperímetro en serie con la alimentación para medir el consumo real
- >
Código completo
#include <esp_sleep.h>
#include <driver/gpio.h>
RTC_DATA_ATTR uint32_t reveils = 0; // survit au deep-sleep (RTC slow)
const gpio_num_t BROCHE_REVEIL = GPIO_NUM_0; // EXT0 : GPIO0-15 (à confirmer)
void setup {
Serial.begin(115200);
delay(1500);
reveils++;
esp_sleep_wakeup_cause_t cause = esp_sleep_get_wakeup_cause;
Serial.printf("Réveil n°%lu (cause %d : 4=EXT0, 5=timer)\n",
(unsigned long)reveils, (int)cause);
esp_sleep_enable_ext0_wakeup(BROCHE_REVEIL, 0); // niveau bas
esp_sleep_enable_timer_wakeup(60ULL * 1000000ULL); // filet de 60 s
Serial.println("Deep-sleep...");
delay(100); // laisse le port série se vider
esp_deep_sleep_start;
}
void loop {} // jamais atteint : tout se passe dans setup
Verificación esperada
En cada pulsación del botón (o, en su defecto, cada 60 s), la placa se reinicia, imprime el contador de despertares —que continúa donde se detuvo gracias a RTC_DATA_ATTR— y vuelve a entrar en suspensión. El amperímetro muestra unos pocos µA en reposo.
Errores frecuentes
- Creer que loop se reanuda después del despertar: deep-sleep = reinicio completo, el estado solo persiste en la memoria RTC.
- Elegir un pin más allá de GPIO15 para EXT0 en S3: el despertar nunca se produce.
- Olvidar el temporizador de respaldo: si el botón está mal cableado, la placa parece muerta.
- Comparar los 7 µA anunciados (solo SoC) con la placa completa: los LEDs, reguladores y el convertidor MP2322 añaden su propio consumo.
Otros tutoriales para esta placa
Ejemplos de código para esta placa
connexion-wifi.inoArduinopoint-acces.inoArduinoble-capteur.inoArduinoneoled-rgb.inoArduinoadc-12bits.inoArduinopreferences.inoArduino