🛠 Sommeil profond du SAMD21 pour nœud sur batterie
Objectifs
Endormir le SAMD21 (deep sleep) et le réveiller par RTC pour un nœud sur batterie. Attention : la 1300 n'a pas de chargeur Li-Po (contrairement à la 1310) — l'alimentation batterie est externe. >
Matériel
- 1 Arduino MKR WAN 1300
- Alimentation externe 3,3/5 V (Li-Po + régulateur, pas de chargeur embarqué)
- Bibliothèque RTCZero
- Multimètre en microampèremètre pour valider
Code complet
#include <RTCZero.h>
RTCZero rtc;
const uint8_t LED = 6;
volatile bool reveille = false;
void onAlarme { reveille = true; }
void setup {
pinMode(LED, OUTPUT);
rtc.begin;
rtc.setAlarmTime(0, 0, 0); // hh:mm:ss
rtc.enableAlarm(rtc.MATCH_SS); // toutes les minutes
rtc.attachInterrupt(onAlarme);
}
void loop {
// 1) Reveil : faire le travail radio (uplink LoRaWAN, cf. tutos précédents)
digitalWrite(LED, HIGH); // placeholder : acquisition + send
digitalWrite(LED, LOW);
// 2) Sommeil profond : STOP + WFI, le RTC reste seul actif
SCB->SCR |= SCB_SCR_SLEEPDEEP_Msk;
__DSB; // evite la course réveil/sommeil
__WFI;
}
Vérification attendue
L'alarme RTC réveille la carte chaque minute (bref éclair LED) ; entre deux alarmes le multimètre en série avec l'alimentation chute nettement sous le niveau de fonctionnement normal. Le module LoRa doit aussi être remis en sommeil AT entre deux envois.
Erreurs fréquentes
- Oublier __DSB : la carte peut rater l'alarme arrivée juste avant le WFI.
- Le module radio reste actif : sans commande de sommeil du module, le gain est minime.
- Compter sur la batterie sans chargeur : la 1300 n'a pas de circuit de charge, prévoir un module externe.
- USB branché : l'hôte maintient la carte éveillée, mesurer sur batterie.
Autres tutoriels pour cette carte
Exemples de code pour cette carte
emission-p2p.inoArduinoreception-p2p.inoArduinoreglage-sp.inoArduinometeo-lora.inoArduinotrame-crc.inoArduinorelais-radio.inoArduino