🛠 Sommeil profond du SAMD21 pour nœud sur batterie

Arduino MKR WAN 1300 · avance · Schéma : IMG-mkr-wan-1300-avance-3-mkrwan-sommeil-bas-courant.svg — SAMD21 en sommeil profond avec RTC, batterie et microampèremètre

Objetivos

Dormir el SAMD21 (sueño profundo) y despertarlo mediante RTC para un nodo alimentado por batería. Atención: la 1300 no tiene cargador Li-Po (a diferencia de la 1310) — la alimentación por batería es externa. >

Material

Código completo

#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 precedents)
  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 reveil/sommeil
  __WFI;
}

Verificación esperada

La alarma RTC despierta la placa cada minuto (breve destello del LED); entre dos alarmas, el multímetro en serie con la alimentación cae claramente por debajo del nivel de funcionamiento normal. El módulo LoRa también debe volver a modo de sueño AT entre dos envíos.

Errores frecuentes

Otros tutoriales para esta placa

Ejemplos de código para esta placa

← Volver a la ficha 🛠 Todos los tutoriales