🛠 Deep-sleep 7 µA et réveil externe (EXT0)

Arduino Nano ESP32 · avance · Schéma : IMG-nano-esp32-avance-2-nanoesp32-deep-sleep-ext0.svg — Carte en deep-sleep (microampères), bouton de réveil sur une broche EXT0 et minuteur de secours.

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

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

Otros tutoriales para esta placa

Ejemplos de código para esta placa

← Volver a la ficha 🛠 Todos los tutoriales