🛠 Optimización energética mediante sueño profundo y despertar RTC en ToughC5

Kit de desarrollo IoT resistente a la intemperie M5Stack ToughC5 (ESP32-C5) · avance · Configurez le mode veille profonde du M5Stack ToughC5 pour atteindre une consommation de 10,41 µA tout en garantissant un réveil précis grâce au RTC RX8130CE.

Objetivos

En los despliegues IoT exteriores alimentados por batería, cada microamperio cuenta. Este tutorial avanzado tiene como objetivo configurar el M5Stack ToughC5 para minimizar el consumo de energía en reposo garantizando al mismo tiempo una precisión temporal mediante el módulo RTC RX8130CE. Aprendremos a deshabilitar interfaces no esenciales (Wi-Fi, BLE, pantalla) y a programar un despertador periódico preciso.

Material Necesario

Pasos

Asegúrese de que su biblioteca M5Stack esté actualizada. Para el modo avanzado, a menudo es preferible usar funciones de bajo nivel o verificar que las bibliotecas estándar no mantengan activos los relojes. ``cpp #include <M5ToughC5.h> #include <RTC.h> // Biblioteca específica para RX8130CE ``

  1. Configuración del entorno de desarrollo

Antes de entrar en reposo, guarde el estado necesario en la RAM retenida (memoria RTC) si está disponible, o en la Flash si los datos deben persistir después de una pérdida total de alimentación. Configure el RTC para un despertador futuro. ```cpp void setup() { M5.begin(); // Inicialización del RTC RX8130CE Rtc.begin(); // Apagar la pantalla ILI9342C para ahorrar energía M5.Display.setBrightness(0); M5.Display.sleep();

  1. Inicialización del RTC y preparación de GPIO

// Desactivar interfaces de radio (Wi-Fi/BLE) WiFi.mode(WIFI_OFF); BLEDevice::deinit(true);

// Configurar un pin GPIO como fuente de despertador externo (opcional) // o usar el temporizador interno para un despertador periódico } ```

El núcleo RISC-V del ESP32-C5 consume muy poco en reposo, pero los periféricos externos (Flash, PSRAM, sensores) deben ponerse en reposo. Utilice la función de sueño profundo especificando una duración o fuente de despertador. ```cpp void loop() { uint64_t deepSleepTimeUs = 60000000; // Ejemplo: 60 segundos

  1. Programación del modo de sueño profundo

// Desactivar periféricos no esenciales // Nota: Verifique los registros específicos del C5 para cortar la alimentación // de la memoria PSRAM si el código no se ejecuta desde la RAM.

// Llamar a la función de sueño profundo // En ESP32-C5, asegúrese de que el RTC siga alimentado por la batería esp_deep_sleep(deepSleepTimeUs); } ```

En cada despertador, el código se reanuda al principio de setup(). Es crucial verificar la causa del despertador para decidir si realizar una tarea pesada (envío de datos) o volver inmediatamente al sueño. ```cpp void setup() { M5.begin(); esp_sleep_wakeup_cause_t wakeup_reason; wakeup_reason = esp_sleep_get_wakeup_cause();

  1. Gestión del despertador y reanudación

if (wakeup_reason == ESP_SLEEP_WAKEUP_TIMER) { // Despertador por temporizador: ejecutar tarea M5.Display.setBrightness(100); M5.Display.clear(); M5.Display.print("Wake up!"); delay(2000); M5.Display.setBrightness(0); } // Volver al sueño mediante loop() } ```

Verificación

Para validar la optimización, desconecte la alimentación USB y conecte un multímetro en serie con la batería. En sueño profundo, el consumo debe caer cerca de 10,41 µA (especificación del fabricante). Verifique que la pantalla esté apagada y que los LED no parpadeen. Use un comando de serie (si está habilitado durante el sueño) o un LED indicador conectado a un GPIO para confirmar que el despertador ocurre a la hora programada.

Otros tutoriales para esta placa

Ejemplos de código para esta placa

← Volver a la ficha 🛠 Todos los tutoriales