reception-p2p.ino
El receptor del enlace punto a punto: esta MKR WAN 1300 escucha el canal 868,1 MHz en SF7, imprime cada paquete con su RSSI y SNR y se reinicia sola si la radio señala un error. Imprescindible para validar un enlace antes de desplegar.
Hardware
Una Arduino MKR WAN 1300 (microcontrolador SAMD21, módem LoRa Semtech SX1272 para enlaces punto a punto, sin pila LoRaWAN integrada, antena de 868/915 MHz). Una MKR WAN 1300 (receptora), un emisor LoRa compatible con los mismos ajustes, antena de 868 MHz.
Cableado
Sin cableado; coloca las dos placas a unos metros para la primera prueba y aléjalas progresivamente.
Funcionamiento
modem.available() devuelve el tamaño del paquete recibido o 0; la lectura byte a byte vacía la FIFO del SX1272. readRssi/readSnr dan los márgenes de enlace del último paquete.
Ejecución
Instala Arduino SAMD Boards y la librería MKRWAN, selecciona la placa y carga. Hacen falta DOS placas LoRa (dos MKR WAN 1300, o una 1300 y una 1310) para ver los intercambios; fija el mismo plan de frecuencias en el código.
Variantes
Filtra por preámbulo o dirección en la carga para ignorar emisiones vecinas, o registra RSSI/tiempo para caracterizar una antena.
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);
}
}