🛠 Sommeil bas courant et réveil sur interruption
Objetivos
Acercarse al suelo documentado de 104 µA de la MKR WAN 1310 (a nivel de placa, tienda oficial) durmiendo entre dos eventos: el núcleo compila esta placa con -DVERY_LOW_POWER, el módulo Murata baja a 1,40–1,65 µA en Stop/Standby (STM32L0 + SX1276 Sleep), y el SAMD21 dispone de modos profundos con despertar por interrupción externa en los pines 0, 1, 4, 5, 6, 7, 8, 16/A1 o 17/A2.
Material
- 1 placa MKR WAN 1310 + batería Li-Ion/Li-Po (mínimo 1024 mAh, conector JST PH de 2 vías) — el cargador BQ24195L gestiona la carga
- 1 botón en el pin 16/A1 hacia GND (pin compatible con EINT)
- Un nanoamperímetro o un regulador conmutado para medir la corriente real
Código completo
// Sommeil profond + reveil 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 evenements
}
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
}
Verificación esperada
Entre dos pulsaciones, la corriente medida cae drásticamente (objetivo documentado: 104 µA para la placa completa, 1,4–1,65 µA para el módulo solo); una pulsación en A1 despierta el sketch que imprime y puede emitir. El LED ON permanece apagado con batería, es normal: sigue la señal de 5 V.
Errores frecuentes
- Confiar en
delaypara ahorrar energía: el SAMD21 permanece activo; se necesita un modo de sueño real (WFI/Standby) y apagar los periféricos. - Elegir un pin sin EINT para el despertar: solo los pines 0, 1, 4, 5, 6, 7, 8, 16/A1 y 17/A2 despiertan por interrupción externa.
- Olvidar que el módulo LoRa también consume: colocarlo en modo de bajo consumo (el firmware AT gestiona modos de 1,4–1,65 µA) antes de dormir.
- Apuntar a 104 µA con USB conectado: el SAMD21 en USB y el LED ON ocultan la ganancia; medir solo con batería.
- API de sueño no fija: >
- Batería inferior a 1024 mAh o conector JST PH mal prensado: el BQ24195L limita la carga y la autonomía se desploma.
Otros tutoriales para esta placa
Ejemplos de código para esta placa
join-otaa.inoArduinouplink-confirme.inoArduinodownlink.inoArduinoactivation-abp.inoArduinosuivi-adr.inoArduinoclasse-c.inoArduino