🛠 Fonctionnement sur batterie LiPo et sommeil profond
Objectifs
Alimenter le Nicla Vision de façon autonome sur batterie LiPo et allonger l'autonomie en plongeant le STM32H747 en sommeil profond entre deux événements, avec réveil par bouton.
Matériel
- Arduino Nicla Vision + batterie LiPo sur les pads/JST batterie (« can also be battery powered making it standalone » — docs officiels)
- >
- Bouton sur D0 (réveil), LED verte pour le témoin d'éveil
- Attention batterie : charge via les pads dédiés uniquement, jamais 5 V directe sur VBAT sans circuit de charge.
Code complet
// Sommeil profond STM32H747 via Mbed, réveil 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 arrêt
reveille = false;
while (!reveille) {
sleep_deeplow; // retourne au premier événement EXTI
delayMicroseconds(200); // anti-rebond grossier
}
delay(300); // laisse le temps au rebond de retomber
}
Vérification attendue
Entre deux appuis, la LED reste éteinte et le courant mesurable chute fortement. Chaque appui produit un éclair de 50 ms. L'horloge millis continue via le ticker, mais le RTC d'origine tourne sur LSI : le MCUboot est compilé avec lse_available=false et re-cloque le RTC depuis le LSE externe vers le LSI à chaque reset dur — le calendrier est donc perdu au reflash, à prendre en compte pour un horodatage de journal.
Erreurs fréquentes
- Oublier de couper la caméra/radio : le GC2145 et le module ESP32 restent alimentés et consomment des dizaines de mA ; le sommeil du MCU ne sert alors à rien — éteindre les rails/périphériques avant sleep_deeplow.
- Réveil en boucle : un bouton sans pull-up propre ou un signal qui rebondit fait ressortir du sommeil en continu ; ajouter le délai anti-rebond ci-dessus.
- Confondre sleep et sleep_deeplow : sleep (STOP) garde les horloges basses actives ; seul sleep_deeplow (STOP2/STANDBY selon config) donne le courant minimal.
- Perdre l'horodatage : sans sauvegarde dans les 4 Kio de backup SRAM ou sans RTC tenu, l'heure repart à zéro ; journaliser des durées relatives plutôt que des dates absolues si le LSI est seul.
Autres tutoriels pour cette carte
Exemples de code pour cette carte
led_rgb.inoArduinoimu_lsm6dsox.inoArduinotof_distance.inoArduinomicro_pdm.inoArduinocamera_capture.inoArduinowifi_scan.inoArduino