emission-p2p.ino

Arduino MKR WAN 1300 · Archivo : emission-p2p.ino · Lenguaje : Arduino · Uso : Envoyer des données en LoRa point à point

El enlace LoRa más simple con la MKR WAN 1300: un paquete de texto cada cinco segundos en modo punto a punto, sin infraestructura pasarela. El receptor es una segunda MKR WAN; el modo ACK confirma la recepción cuando la placa está al alcance.

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). Dos placas LoRa (dos MKR WAN 1300, o 1300 + 1310), dos antenas de 868 MHz, un cable USB para cada una.

Cableado

Sin cableado: antena enroscada en cada placa, USB para alimentación y seguimiento serie.

Funcionamiento

modem.begin(EU868) inicializa el SX1272; beginPacket/endPacket(true) emite esperando confirmación. El SF por defecto (7) ya cubre varios kilómetros a vista de pájaro.

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

Pasa el segundo argumento como false para emitir sin ACK (más sobrio) o envía structs binarios para ahorrar tiempo de emisión.

emission-p2p.ino

// Emission LoRa point a point avec la MKR WAN 1300 (MKRWAN).
// Il faut une seconde carte LoRa en reception pour voir les paquets.
#include <MKRWAN.h>

LoRaModem modem;

String message;
unsigned long dernier = 0;

void setup() {
  Serial.begin(115200);
  while (!Serial);
  if (!modem.begin(EU868)) {
    Serial.println(F("Modem SX1272 KO"));
    while (true);
  }
  modem.beginPacket();
  Serial.print(F("Bande : "));
  Serial.println(modem.getBand());
  Serial.print(F("SF courant : "));
  Serial.println(modem.getSpreadingFactor());
}

void loop() {
  if (millis() - dernier < 5000) return;
  dernier = millis();
  message = "mk1300 " + String(millis() / 1000);
  modem.beginPacket();
  modem.print(message);
  int envoyes = modem.endPacket(true); // attente ACK si visible
  if (envoyes > 0) Serial.println("Envoye : " + message);
  else Serial.println(F("Echec d'emission"));
}

← Volver a la ficha