🛠 Deep sleep et réveil RTC sur GPIO0
Objectifs
Endormir le ESP32-C3 en deep sleep et le réveiller par un bouton grâce à une broche du domaine RTC. Le C3 descend typiquement à quelques microampères en deep sleep — encore sous la barre des 150 µA de l'ESP32 classique — et se réveille en moins d'une seconde. Vous apprendrez ext0_wakeup, le domaine RTC et la lecture de la cause de réveil.
Matériel
- 1 carte ESP32-C3
- 1 bouton entre GPIO0 et GND
- Optionnel : micro-ampèremètre
Code complet
#include <driver/rtc_io.h>
const uint8_t REVEIL = 0; // GPIO0 = broche du domaine RTC
void setup {
Serial.begin(115200);
delay(500);
esp_sleep_wakeup_cause_t cause = esp_sleep_get_wakeup_cause;
if (cause == ESP_SLEEP_WAKEUP_EXT0)
Serial.println(F("Reveille par le bouton !"));
else
Serial.println(F("Demarrage sur reset ou power-on"));
rtc_gpio_init(GPIO_NUM_0);
rtc_gpio_pullup_en(GPIO_NUM_0); // bouton actif a l'état bas
rtc_gpio_hold_en(GPIO_NUM_0);
esp_sleep_enable_ext0_wakeup(GPIO_NUM_0, 0); // réveil si niveau BAS
Serial.println(F("Deep sleep... appuyez sur GPIO0"));
Serial.flush;
esp_deep_sleep_start;
}
void loop {} // setup est rejoue a chaque réveil
Vérification attendue
Après le message « Deep sleep… », la carte devient silencieuse ; un appui sur le bouton relié à GPIO0 vers GND la réveille et la console affiche « Réveillé par le bouton ! ». L'ampèremètre indique une consommation de l'ordre du microampère pendant le sommeil.
Erreurs fréquentes
- Réveil demandé sur une broche hors domaine RTC : ext0 n'accepte que GPIO0 à GPIO5 sur le C3 ; au-delà, il faut ext1 avec plusieurs broches.
- Oublier rtc_gpio_pullup_en : la broche flotte, le réveil se déclenche tout seul ou jamais.
- Attendre que loop tourne après le réveil : en deep sleep, la puce redémarre à zéro, tout se passe dans setup.
- Comparer aux 150 µA de l'ESP32 classique sans mesurer sa carte : régulateur, LED et pont USB ajoutent leur propre consommation.
Autres tutoriels pour cette carte
Exemples de code pour cette carte
clignotante.inoArduinobouton-led.inoArduinorespiration.inoArduinodht22.inoArduinooled-i2c.inoArduinoserveur-web.inoArduino