cycles-sleep.ino
La MKR WAN 1300 est faite pour les nœuds sur pile : ce cycle se réveille toutes les quinze minutes, mesure, émet une trame courte en SF9, puis endort modem et microcontrôleur. Sans port série ni LED, le courant moyen tombe sous le demi-milliampère.
Matériel requis
Une Arduino MKR WAN 1300 (microcontrôleur SAMD21, modem LoRa Semtech SX1272 point à point, pas de pile LoRaWAN embarquée, antenne 868/915 MHz). Pack 2× AAA ou LiPo, capteur sur A1, antenne ; boîtier étanche pour l'extérieur.
Câblage
Capteur sur A1 ; si le capteur a besoin d'alimentation coupée, commandez son VCC par une broche dédiée plutôt que A0.
Fonctionnement
Le SX1272 consomme ~150 µA en sleep, le SAMD21 en deepSleep ~2 µA hors RTC. L'alarme RTC réveille le MCU ; le cycle radio complet dure moins d'une seconde.
Exécution
Installez Arduino SAMD Boards et la bibliothèque MKRWAN, sélectionnez la carte, téléversez. Il faut DEUX cartes LoRa (deux MKR WAN 1300, ou une 1300 et une 1310) pour voir les échanges ; réglez le même plan de fréquences dans le code.
Variantes
Réveillez aussi sur une interruption (compteur à impulsion) pour un relevé d'eau, ou augmentez le SF la nuit où le bruit radio baisse.
cycles-sleep.ino
// Cycle sobre : reveil RTC, mesure, emission LoRa, deepSleep.
// Une trame toutes les 15 min sur 2x AAA -> plusieurs mois.
#include <MKRWAN.h>
#include <ArduinoLowPower.h>
#include <RTCZero.h>
LoRaModem modem;
RTCZero rtc;
void setup() {
// Pas de Serial en production : la LED serie consomme ~5 mA
if (!modem.begin(EU868)) {
pinMode(LED_BUILTIN, OUTPUT); // clignotement d'erreur
while (true) { digitalWrite(LED_BUILTIN, HIGH); delay(100);
digitalWrite(LED_BUILTIN, LOW); delay(100); }
}
modem.setFrequency(868.5);
modem.setSpreadingFactor(9); // portee sans sacrifier l'energie
rtc.begin();
LowPower.attachInterruptWakeup(RTC_ALARM_WAKEUP, NULL, RISING);
}
void loop() {
// 1) mesurer
int brut = analogRead(A1);
// 2) emettre
modem.beginPacket();
modem.print("A="); modem.print(brut);
modem.endPacket(false);
// 3) dormir jusqu'a la prochaine alarme
modem.sleep(); // SX1272 en veille
rtc.setAlarmEvery(15 * 60);
rtc.enableAlarm(rtc.MATCH_SS);
LowPower.deepSleep();
}