🛠 Sommeil bas courant du module et réveil
Objectifs
Prolonger l'autonomie sur batterie d'une station terrain : mettre le module SARA-U201 en reset (le core SAMD maintient déjà le modem en reset au démarrage pour économiser l'énergie), endormir le SAMD21, et réveiller la carte sur un événement — appui bouton ou alarme périodique — pour une mesure puis une transmission rapide. La conception Arduino documente une descente de « plusieurs mA à quelques µA » quand le modem et la puce crypto sont coupés.
Matériel
- Carte Arduino MKR GSM 1400 + LiPo (seule source d'énergie du test)
- Bouton poussoir sur D2 vers la masse (réveil)
- Bibliothèque ArduinoLowPower (core SAMD) ; MKRGSM pour la phase de transmission
- Un multimètre en ampèremètre pour vérifier la consommation réelle
Code complet
#include <ArduinoLowPower.h>
const uint8_t BTN_REVEIL = 2;
volatile bool reveille = false;
void onReveil { reveille = true; }
void setup {
// 1) Maintenir le modem GSM en reset pendant le sommeil.
// GSM_RESETN (broche 31 de la variante) est actif a l'état BAS.
pinMode(GSM_RESETN, OUTPUT);
digitalWrite(GSM_RESETN, LOW);
// 2) USB inutile en sommeil profond : couper la CDC libere de l'énergie.
Serial.begin(9600);
delay(3000); // laisser le temps d'ouvrir la console
Serial.println("Entree en sommeil, appuyer sur D2");
LowPower.attachInterruptWakeup(BTN_REVEIL, onReveil, FALLING);
}
void loop {
reveille = false;
LowPower.sleep; // SAMD en mode attente, réveil par IT
// --- Reveil : phase active courte ---
digitalWrite(GSM_RESETN, HIGH); // relancer le modem
delay(1000);
Serial.begin(9600);
Serial.println("Reveille ! Mesure + transmission ici.");
// ... mesure capteur, gsmAccess.begin, envoi GPRS/SMS, shutdown ...;
delay(3000);
Serial.end;
digitalWrite(GSM_RESETN, LOW); // remettre le modem en reset
}
Vérification attendue
Au multimètre, le courant moyen chute nettement quand LowPower.sleep est atteint et que le modem est maintenu en reset ; l'appui sur D2 réveille la carte et la console affiche le message de réveil. Mesurer en moyenne sur plusieurs minutes : un module enregistré émet par pics (paging), et le PMIC BQ24195L de charge peut masquer les microampères si le chargeur est alimenté en USB.
Erreurs fréquentes
- Croire le module « éteint » parce que le sketch ne l'appelle pas : sans reset maintenu ni
gsmAccess.shutdown, il reste enregistré au réseau et consomme en paging permanent. - >
- Réveil impossible :
attachInterruptWakeupdoit cibler une broche capable d'interruption ; tester le brochage avant de sceller le boîtier. - Oublier de relancer le modem après réveil : le
GSM.beginéchoue siGSM_RESETNn'est pas libéré. - Compter sur l'horloge USB : en sommeil,
millisn'avance pas de la même façon ; pour un réveil périodique précis, utiliser l'RTC (le core SAMD le supporte) plutôt que dessleepsuccessifs. - LiPo non chargée à fond : sous 3,4 V, les pics radio coupent l'alimentation et corrompent le test d'autonomie.
Autres tutoriels pour cette carte
Exemples de code pour cette carte
gsm-connexion.inoArduinoenvoi-sms.inoArduinohttp-get.inoArduinohttp-post-capteur.inoArduinoheure-gsm.inoArduinoappels.inoArduino