reception-p2p.ino
Le récepteur du lien point à point : cette MKR WAN 1300 écoute le canal 868,1 MHz en SF7, affiche chaque paquet avec son RSSI et son SNR, et se réinitialise toute seule si la radio signale une erreur. Indispensable pour valider une liaison avant déploiement.
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). Une MKR WAN 1300 (réceptrice), un émetteur LoRa compatible aux mêmes réglages, antenne 868 MHz.
Câblage
Aucun câblage ; placez les deux cartes à quelques mètres pour le premier test, puis éloignez progressivement.
Fonctionnement
modem.available() renvoie la taille du paquet reçu ou 0 ; la lecture octet par octet vide la FIFO du SX1272. readRssi/readSnr donnent les marges de liaison du dernier paquet.
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
Filtrez par préambule ou adresse dans la charge utile pour ignorer les émissions voisines, ou loguez RSSI/temps pour caractériser une antenne.
reception-p2p.ino
// Reception LoRa point a point sur la MKR WAN 1300 (MKRWAN).
#include <MKRWAN.h>
LoRaModem modem;
void setup() {
Serial.begin(115200);
while (!Serial);
if (!modem.begin(EU868)) {
Serial.println(F("Modem SX1272 KO"));
while (true);
}
// Doit correspondre a l'emetteur : canal et facteur detalement
modem.setFrequency(868.1);
modem.setSpreadingFactor(7);
Serial.println(F("A l'ecoute sur 868.1 MHz SF7..."));
}
void loop() {
int disponible = modem.available(); // 0 si rien a lire
if (disponible > 0) {
String recu = "";
while (modem.available())
recu += (char)modem.read();
Serial.print(F("Recu ("));
Serial.print(disponible);
Serial.print(F(" o) : ") + recu);
Serial.print(F(" RSSI="));
Serial.print(modem.readRssi());
Serial.print(F(" dBm SNR="));
Serial.println(modem.readSnr());
}
// available() retourne -1 en cas d'erreur radio : on relance
if (disponible < 0) {
Serial.println(F("Erreur radio, reinitialisation"));
modem.begin(EU868);
modem.setFrequency(868.1);
}
}