🛠 Deep-sleep 7 µA et réveil externe (EXT0)
Objectifs
Atteindre le plancher de consommation du SoC (7 µA en deep-sleep, 240 µA en light-sleep selon la docs-db) et réveiller le Nano ESP32 par un événement externe (bouton) avec un réveil minuteur de sécurité. En deep-sleep le programme repart de setup : l'état ne survit qu'en RTC memory.
Matériel
- 1 × Arduino Nano ESP32 + câble USB-C
- 1 × bouton entre une broche de réveil et GND
- Un micro-ampèremètre en série avec l'alimentation pour mesurer la consommation réelle
- >
Code complet
#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
Vérification attendue
À chaque appui sur le bouton (ou à défaut toutes les 60 s), la carte redémarre, imprime le compteur de réveils — qui reprend là où il s'était arrêté grâce à RTC_DATA_ATTR — puis replonge. L'ampèremètre affiche quelques µA au repos.
Erreurs fréquentes
- Croire que loop reprend après le réveil : deep-sleep = redémarrage complet, état uniquement en RTC memory.
- Choisir une broche au-delà de GPIO15 pour EXT0 sur S3 : le réveil ne se produit jamais.
- Oublier le timer de secours : si le bouton est mal câblé, la carte semble morte.
- Comparer les 7 µA annoncés (SoC seul) à la carte complète : LEDs, régulateurs et convertisseur MP2322 ajoutent leur propre consommation.
Autres tutoriels pour cette carte
Exemples de code pour cette carte
connexion-wifi.inoArduinopoint-acces.inoArduinoble-capteur.inoArduinoneoled-rgb.inoArduinoadc-12bits.inoArduinopreferences.inoArduino