🛠 Sommeil bas courant et réveil sur interruption
Objectifs
Approcher le plancher documenté de 104 µA de la MKR WAN 1310 (board-level, store officiel) en dormant entre deux événements : le core compile cette carte avec -DVERY_LOW_POWER, le module Murata tombe à 1,40–1,65 µA en Stop/Standby (STM32L0 + SX1276 Sleep), et le SAMD21 dispose de modes profonds avec réveil par interruption externe sur les broches 0, 1, 4, 5, 6, 7, 8, 16/A1 ou 17/A2.
Matériel
- 1 carte MKR WAN 1310 + batterie Li-Ion/Li-Po (1024 mAh minimum, connecteur JST PH 2 voies) — le chargeur BQ24195L gère la charge
- 1 bouton sur la broche 16/A1 vers GND (broche compatible EINT)
- Un nano-ampèremètre ou un régulateur à découpage pour mesurer le vrai courant
Code complet
// Sommeil profond + réveil bouton — MKR WAN 1310 (SAMD21)
// >
// l'approche EINT + attachInterrupt est documentee, pas le courant mesure.
volatile bool reveille = false;
const int REVEIL = 16; // A1 : broche a interruption externe (EINT)
const int LED = 6;
void onReveil { reveille = true; }
void setup {
pinMode(REVEIL, INPUT_PULLUP);
pinMode(LED, OUTPUT);
Serial.begin(115200);
attachInterrupt(digitalPinToInterrupt(REVEIL), onReveil, FALLING);
}
void loop {
if (reveilles) {
reveille = false;
digitalWrite(LED, HIGH);
Serial.println("Reveille !"); // ici : mesure + uplink LoRaWAN
digitalWrite(LED, LOW);
}
dormir; // entre deux événements
}
bool reveilles { return reveille; }
void dormir {
noInterrupts;
// Mettre le module LoRa en faible conso (AT+MODE/PSM selon firmware),
// couper la LED, puis entrer en sommeil SAMD21 (mode Standby du core
// ArduinoCore-samd compile avec VERY_LOW_POWER ; voir exemples Sleep.h).
interrupts;
// >
// le bouton reveille bien le sketch avant de compter sur l'autonomie.
__WFI; // attend l'interruption : approx. la porte du sommeil
}
Vérification attendue
Entre deux appuis, le courant mesuré chute fortement (cible documentée : 104 µA à la carte entière, 1,4–1,65 µA pour le module seul) ; un appui sur A1 réveille le sketch qui imprime et peut émettre. La LED ON reste éteinte sur batterie, c'est normal : elle suit le 5 V.
Erreurs fréquentes
- Compter sur
delaypour économiser : le SAMD21 reste actif ; il faut un vrai mode sommeil (WFI/Standby) et couper les périphériques. - Choisir une broche sans EINT pour le réveil : seules 0, 1, 4, 5, 6, 7, 8, 16/A1, 17/A2 réveillent par interruption externe.
- Oublier que le module LoRa consomme aussi : le placer en low-power (le firmware AT gère des modes 1,4–1,65 µA) avant de dormir.
- Viser 104 µA avec USB branché : le SAMD21 en USB et la LED ON masquent le gain ; mesurer sur batterie seule.
- API de sommeil non figée : >
- Batterie sous 1024 mAh ou connecteur JST PH mal serti : le BQ24195L limite la charge et l'autonomie s'effondre.
Autres tutoriels pour cette carte
Exemples de code pour cette carte
join-otaa.inoArduinouplink-confirme.inoArduinodownlink.inoArduinoactivation-abp.inoArduinosuivi-adr.inoArduinoclasse-c.inoArduino