🛠 Deep sleep à quelques microampères sur batterie

ESP32-S2 · avance · Schéma : IMG-esp32-s2-avance-1-esp32-s2-deep-sleep-batterie.svg — ESP32-S2 alimentée par un pack de piles, bouton de réveil sur GPIO1 (réveil EXT0), LED témoin sur GPIO2, multimètre en série mesurant la consommation en microampères.

Objectifs

Concevoir un montage sur batterie : endormir l'ESP32-S2 en deep sleep (consommation de l'ordre du microampère), le réveiller par minuteur et par bouton sur broche RTC, et mesurer la consommation. Le S2 est un Xtensa LX7 mono-cœur 240 MHz très adapté au fonctionnement périodique basse consommation.

Matériel

Code complet

// Deep sleep ESP32-S2 : réveil toutes les 30 s ou sur bouton GPIO1
#include <esp_sleep.h>

const uint8_t BTN_REVEIL = 1;    // broche RTC valide pour EXT0
const uint8_t LED_PIN    = 2;
const uint64_t PERIODE_US = 30ULL * 1000000ULL;

void setup {
  Serial.begin(115200);
  delay(300);                    // fenetre pour ouvrir le moniteur
  esp_sleep_wakeup_cause_t cause = esp_sleep_get_wakeup_cause;
  Serial.printf("Reveil : %s\n",
    cause == ESP_SLEEP_WAKEUP_TIMER ? "minuteur" :
    cause == ESP_SLEEP_WAKEUP_EXT0 ? "bouton" : "première mise sous tension");

  pinMode(LED_PIN, OUTPUT);
  digitalWrite(LED_PIN, HIGH);   // temoin bref de réveil
  delay(300);
  digitalWrite(LED_PIN, LOW);

  // Fenetre de 5 s après reset pour permettre le reflash USB
  // (l'USB natif GPIO19/20 est inactif pendant le deep sleep)
  unsigned long t0 = millis;
  while (millis - t0 < 5000) {
    if (Serial) break;
    delay(100);
  }

  esp_sleep_enable_ext0_wakeup((gpio_num_t)BTN_REVEIL, 0); // réveil sur LOW
  esp_sleep_enable_timer_wakeup(PERIODE_US);
  Serial.println("Endormissement profond...");
  delay(10);
  esp_deep_sleep_start;        // ne revient jamais ici
}

void loop {}   // inatteignable

Vérification attendue

À chaque réveil (minuteur de 30 s ou appui sur le bouton), la LED clignote brièvement et la console indique la cause. Entre deux réveils, le multimètre en série doit afficher une consommation très basse (µA sur carte nue, mA sur DevKit à cause du régulateur et des LED). L'horloge millis repart de zéro à chaque cycle : le deep sleep coupe le cœur.

Erreurs fréquentes

Autres tutoriels pour cette carte

Exemples de code pour cette carte

← Retour à la fiche 🛠 Tous les tutoriels