emission-p2p.ino

Arduino MKR WAN 1300 · Fichier : emission-p2p.ino · Langage : Arduino · Usage : Envoyer des données en LoRa point à point

Le lien LoRa le plus simple avec la MKR WAN 1300 : un paquet texte toutes les cinq secondes en mode point à point, sans infrastructure ni passerelle. Le récepteur est une seconde MKR WAN ; le mode ACK confirme la bonne réception quand la carte est à portée.

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). Deux cartes LoRa (deux MKR WAN 1300, ou 1300 + 1310), deux antennes 868 MHz, câble USB pour chacune.

Câblage

Aucun câblage : antenne vissée sur chaque carte, USB pour l'alimentation et le suivi série.

Fonctionnement

modem.begin(EU868) initialise le SX1272 ; beginPacket/endPacket(true) envoie avec attente d'acquittement. Le SF par défaut (7) offre déjà plusieurs kilomètres en visibilité.

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

Passez le second argument à false pour émettre sans ACK (plus sobre), ou envoyez des struct binaires pour économiser l'airtime.

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"));
}

← Retour à la fiche