deep_sleep.c

ESP32-H2 · Archivo : deep_sleep.c · Lenguaje : C · Uso : Sommeil profond minuté sur horloge RTC

Un nodo 802.15.4 a pila duerme el 99,9 % del tiempo: el timer RTC lo despierta, el programa trabaja una fracción de segundo y vuelve a dormir. RTC_NOINIT_ATTR conserva el contador en memoria RTC alimentada.

Hardware necesario

Una placa ESP32-H2 (RISC-V a 96 MHz, radio IEEE 802.15.4 solo — sin Wi-Fi) tipo DevKitM-1, alimentada por USB. Ninguno; un polímetro en microamperios entre batería y GND para verificar el consumo de reposo.

Cableado

Sin cableado. A batería, alimente el módulo directamente: los reguladores del DevKit dominan el consumo en sueño.

Funcionamiento

esp_sleep_enable_timer_wakeup arma el reloj RTC lento; esp_deep_sleep_start corta CPU, RAM y radio. El despertar es un reinicio real: solo sobreviven los segmentos RTC y NOINIT. Prográmelo con ESP-IDF (idf.py set-target esp32h2); el puerto USB-Serial/JTAG (GPIO26/27) sirve de consola y puerto de flash. Mantenga Boot + Reset para modo download si hace falta.

Para ir más lejos

Despierte también con un sensor (ext1 en varios pines), o adapte el periodo a la calidad de la red 802.15.4.

deep_sleep.c

// deep_sleep.c — reveil toutes les 60 s, compteur en RTC memory.
#include "esp_sleep.h"
#include "esp_rtc.h"
#include "driver/gpio.h"
#include "esp_log.h"

RTC_NOINIT_ATTR int nb_reveils;      // survit au deep sleep

static const char *TAG = "dodo";

void app_main(void)
{
    esp_log_level_set("*", ESP_LOG_INFO);
    nb_reveils++;
    ESP_LOGI(TAG, "Reveil n°%d — travail court puis 60 s de sommeil", nb_reveils);

    // (lecture capteur + envoi 802.15.4 ici, en < 100 ms)

    // Etteindre la radio et les peripheriques avant de dormir
    ESP_ERROR_CHECK(esp_sleep_enable_timer_wakeup(60ULL * 1000000ULL));
    ESP_LOGI(TAG, "deep sleep maintenant (%u us)", (unsigned)(60e6));
    fflush(stdout);
    esp_deep_sleep_start();
    // jamais atteint : au reveil, reprise complete de app_main
}

← Volver a la ficha