sommeil-profond.ino

ESP32 (original, clase ESP32-WROOM-32) · Archivo : sommeil-profond.ino · Lenguaje : Arduino · Uso : Réduire la consommation au sommeil profond minuté

En sueño profundo el SoC consume unos microamperios: despertar por minuto o por pulsación, y una pila dura meses. RTC_NOINIT_ATTR conserva el contador de despertones entre reinicios.

Hardware necesario

Una placa ESP32 clásica (módulo ESP32-WROOM-32, doble núcleo Xtensa a 240 MHz, Wi-Fi + Bluetooth) tipo DevKitC / DOIT V1, alimentada por micro-USB. Ninguno para probar; botón en GPIO0 para despertar a mano (ojo: GPIO0 es también el pin del bootloader).

Cableado

Botón GPIO0 a GND. En montaje a batería, retire el puente USB-Serie, que consume más que el SoC dormido.

Funcionamiento

esp_sleep_enable_timer_wakeup arma el reloj RTC, ext0 vigila un nivel; esp_deep_sleep_start apaga todo lo demás. Al despertar el programa reinicia en setup(); las variables RAM se pierden salvo los atributos RTC. En el Arduino IDE, instale el paquete « esp32 » (Gestor de placas), elija « Dev Module », el puerto y Subir (mantenga BOOT si falla la detección). GPIO34-39 son solo entrada; evite GPIO6-11 y GPIO12.

Para ir más lejos

Despierte con un sensor (ext1 en varios pines), o duerma entre dos lecturas DHT del sketch dedicado.

sommeil-profond.ino

// Sommeil profond : reveil toutes les 30 s ou sur GPIO0 (LOW).
// Le compteur de reveils est conserve en RTC memory (tenu sous tension).
RTC_NOINIT_ATTR int reveils;

void setup() {
  Serial.begin(115200);
  delay(150);                       // laisser le pont USB-serial s'ouvrir
  reveils++;
  Serial.printf("\nReveil n°%d — mesure, puis dodo 30 s\n", reveils);

  // (ici : lecture capteur, envoi radio, etc.)
  Serial.printf("heap libre avant dodo : %u\n", ESP.getFreeHeap());

  esp_sleep_enable_timer_wakeup(30ULL * 1000000);          // 30 s
  esp_sleep_enable_ext0_wakeup(GPIO_NUM_0, 0);             // ou GPIO0 a LOW
  Serial.println("Entree en sommeil profond...");
  Serial.flush();
  delay(10);
  esp_deep_sleep_start();
}

void loop() {}   // jamais atteint : le deep sleep reinitialise tout

← Volver a la ficha