🛠 Fonctionnement sur batterie LiPo et sommeil profond
Objetivos
Alimentar el Nicla Vision de forma autónoma con una batería LiPo y prolongar la autonomía sumergiendo el STM32H747 en sueño profundo entre dos eventos, con despertar mediante botón.
Material
- Arduino Nicla Vision + batería LiPo en los pads/JST de batería («can also be battery powered making it standalone» — documentación oficial)
- > NO VERIFICADO: el consumo típico y la corriente de reposo real no están publicados en las páginas oficiales recuperadas; medir con un microamperímetro en serie con la batería antes de dimensionar la autonomía.
- Botón en D0 (despertar), LED verde como indicador de despertar
- Atención con la batería: carga únicamente a través de los pads dedicados, nunca 5 V directos en VBAT sin circuito de carga.
Código completo
// Sommeil profond STM32H747 via Mbed, reveil par EXTI sur bouton D0
// >
#include "mbed.h"
const pin_t BUTTON = D0;
volatile bool reveille = false;
void onReveil { reveille = true; }
void setup {
pinMode(LED_BUILTIN, OUTPUT);
attachInterrupt(digitalPinToInterrupt(BUTTON), onReveil, FALLING);
}
void loop {
// 1) tache breve : signal d vie
digitalWrite(LED_BUILTIN, LOW); delay(50);
digitalWrite(LED_BUILTIN, HIGH);
// 2) extinction des peripheriques inutiles pendant le sommeil
// (couper camera, radio si initialises : les debrancher explicitement)
// 3) sommeil profond : M7 et horloges principales a l arret
reveille = false;
while (!reveille) {
sleep_deeplow; // retourne au premier evenement EXTI
delayMicroseconds(200); // anti-rebond grossier
}
delay(300); // laisse le temps au rebond de retomber
}
Verificación esperada
Entre dos pulsaciones, el LED permanece apagado y la corriente medible cae drásticamente (> NO VERIFICADO: valor exacto a determinar en la prueba). Cada pulsación produce un destello de 50 ms. El reloj millis continúa mediante el ticker, pero el RTC original funciona con LSI: el MCUboot está compilado con lse_available=false y reconfigura el RTC desde el LSE externo hacia el LSI en cada reinicio duro — el calendario se pierde por tanto al reprogramar, a tener en cuenta para un sellado de tiempo de registro.
Errores frecuentes
- Olvidar apagar la cámara/radio: el GC2145 y el módulo ESP32 permanecen alimentados y consumen decenas de mA; el sueño del MCU no sirve entonces para nada — apagar los rieles/periféricos antes de sleep_deeplow.
- Despertar en bucle: un botón sin una resistencia pull-up adecuada o una señal que rebota hace salir del sueño continuamente; añadir el retardo antirrebote indicado arriba.
- Confundir sleep y sleep_deeplow: sleep (STOP) mantiene activos los relojes de baja frecuencia; solo sleep_deeplow (STOP2/STANDBY según configuración) proporciona la corriente mínima.
- Perder el sellado de tiempo: sin guardar en los 4 KiB de SRAM de respaldo o sin un RTC mantenido, la hora vuelve a cero; registrar duraciones relativas en lugar de fechas absolutas si solo se dispone del LSI.
Otros tutoriales para esta placa
Ejemplos de código para esta placa
led_rgb.inoArduinoimu_lsm6dsox.inoArduinotof_distance.inoArduinomicro_pdm.inoArduinocamera_capture.inoArduinowifi_scan.inoArduino