🛠 Sommeil profond et réveil programmé sur la Boron
Objectifs
L'autonomie est la raison d'être d'une carte cellulaire sur batterie. Le nRF52840 du Boron offre des modes de sommeil profonds : le datasheet annonce environ 106 µA en HIBERNATE sur le modèle LTE (127 µA avec réveil ULP GPIO), contre 3,9 mA au repos radio éteinte. Vous allez endormir la carte avec System.sleep(SLEEP_MODE_DEEP, secondes), la laisser se réveiller seule grâce au RTC, mesurer, publier, puis se rendormir — le patron classique d'un capteur sur pile. Attention : ces chiffres supposent une configuration soignée ; les premières versions de Device OS affichaient 0,6 à 1,2 mA en sommeil profond, d'où l'intérêt de mesurer votre propre consommation.
Matériel
- 1× Particle Boron LTE sur LiPo (3,6-4,2 V sur la broche Li+)
- 1× nano-ampèremètre en série avec la batterie (ou PPK2) pour valider le budget
- antenne cellulaire en place ; capteur au choix sur une broche A0-A5
Code complet
// Boron — réveil RTC, mesure, publication, sommeil profond
#include "Particle.h"
SYSTEM_THREAD(ENABLED);
FuelGauge fuel; // jauge de batterie TI integratee
void setup {
Serial.begin(9600);
}
void loop {
// Patiente jusqu'à 60 s pour la liaison cellulaire ; sinon passe le cycle
if (waitFor( => Cellular.ready, 60000)) {
char msg[96];
snprintf(msg, sizeof(msg), "V=%.2fV SoC=%.1f%%",
fuel.getVCell, fuel.getSoC);
Particle.publish("battery", msg, PRIVATE);
Particle.process; // laisse partir l'événement en file
delay(2000);
}
// Sommeil profond jusqu'au RTC (1 h). En HIBERNATE : ~106 uA (datasheet),
// mais prevoir les valeurs STOP ~0,5-0,6 mA si des sources de réveil
// restent actives. Le 3V3 est coupe : pas d'alimentation externe secourue.
System.sleep(SLEEP_MODE_DEEP, 3600);
}
Vérification attendue
Au réveil (après 1 h, ou temporairement 60 s), l'événement battery arrive dans le cloud puis la carte redort. À l'ampèremètre, le courant moyen s'effondre après l'appel System.sleep — visez ~0,1-0,6 mA selon le mode effectif, et non les dizaines de mA du repos connecté. Un appui Reset réveille immédiatement la carte (redémarrage complet, pas reprise).
Erreurs fréquentes
- Alimenter l'électronique externe par la broche 3V3 : elle est coupée en sommeil, votre capteur meurt avec la carte ; utilisez une ligne batterie directe et un MOSFET de power-gating.
- Back-feeder une broche GPIO depuis un circuit externe alimenté : le nRF52840 ne s'éteint jamais vraiment (piège équivalent à celui de la broche EN, qui ne doit jamais être reliée directement au 3V3).
- Publier juste avant de dormir sans
Particle.processni délai : l'événement reste en file et est perdu au sommeil. - Comparer votre mesure aux 106 µA du datasheet sans désactiver le chargement LiPo et les pull-ups externes : chaque pull-up 10 kΩ sur 3,3 V coûte 330 µA.
- Oublier que le réveil est un boot à froid : tout l'état RAM est perdu, persistez ce qui doit l'être (flash, RTC).
Autres tutoriels pour cette carte
Exemples de code pour cette carte
clignotante.inoArduinobouton-evenement.inoArduinofonction-distance.inoArduinocapteur-dht.inoArduinoruban-neopixel.inoArduinopwm-respiration.inoArduino