🛠 Sommeil bas courant du module et réveil
Objetivos
Prolongar la autonomía de la batería de una estación de campo: poner el módulo SARA-U201 en reset (el core SAMD ya mantiene el módem en reset al arrancar para ahorrar energía), poner a dormir el SAMD21 y despertar la placa ante un evento — pulsación de botón o alarma periódica — para realizar una medición y una transmisión rápida. La documentación de Arduino indica una reducción de «varios mA a unos pocos µA» cuando el módem y el chip criptográfico están desconectados.
Material
- Placa Arduino MKR GSM 1400 + LiPo (única fuente de energía de la prueba)
- Botón pulsador en D2 hacia masa (despertar)
- Biblioteca ArduinoLowPower (core SAMD); MKRGSM para la fase de transmisión
- Un multímetro en modo amperímetro para verificar el consumo real
Código completo
#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'etat BAS.
pinMode(GSM_RESETN, OUTPUT);
digitalWrite(GSM_RESETN, LOW);
// 2) USB inutile en sommeil profond : couper la CDC libere de l'energie.
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, reveil 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
}
Verificación esperada
En el multímetro, la corriente media cae notablemente cuando se alcanza LowPower.sleep y el módem se mantiene en reset; la pulsación en D2 despierta la placa y la consola muestra el mensaje de despertar. Medir en promedio durante varios minutos: un módulo registrado emite por picos (paging), y el PMIC de carga BQ24195L puede enmascarar los microamperios si el cargador está alimentado por USB.
Errores frecuentes
- Creer que el módulo está «apagado» porque el sketch no lo llama: sin un reset mantenido ni
gsmAccess.shutdown, permanece registrado en la red y consume en paging permanente. - >
- Imposibilidad de despertar:
attachInterruptWakeupdebe apuntar a un pin capaz de generar interrupciones; probar el cableado antes de sellar la carcasa. - Olvidar reiniciar el módem tras el despertar:
GSM.beginfalla siGSM_RESETNno se libera. - Confiar en el reloj USB: en modo sueño,
millisno avanza de la misma manera; para un despertar periódico preciso, usar el RTC (el core SAMD lo soporta) en lugar desleepsucesivos. - LiPo no cargada al máximo: por debajo de 3,4 V, los picos de radio cortan la alimentación y corrompen la prueba de autonomía.
Otros tutoriales para esta placa
Ejemplos de código para esta placa
gsm-connexion.inoArduinoenvoi-sms.inoArduinohttp-get.inoArduinohttp-post-capteur.inoArduinoheure-gsm.inoArduinoappels.inoArduino