join-otaa.ino

Arduino MKR WAN 1310 · Fichier : join-otaa.ino · Langage : Arduino · Usage : Rejoindre un réseau LoRaWAN en OTAA

La première connexion LoRaWAN de la MKR WAN 1310 : provisionnement des trois identifiants (Device EUI, App EUI, App Key), puis jointure OTAA avec huit tentatives sur 30 secondes. Le serveur valide la device et la session de chiffrement s'établit — le prérequis de tout le reste.

Matériel requis

Une Arduino MKR WAN 1310 (microcontrôleur SAMD21, modem LoRa piloté par un ESP32 embarqué qui expose aussi le Wi-Fi, antenne LoRa et antenne Wi-Fi). MKR WAN 1310, antenne 868 MHz, une passerelle LoRaWAN couvrante, un compte serveur (TTN, ChirpStack, LaCocotte).

Câblage

Aucun câblage ; notez l'App Key générée par le serveur, elle ne sera plus affichée ensuite.

Fonctionnement

join(OTAA,...) envoie une requête Join sur les canaux EU, attend la Accept sur RX1/RX2 et installe les clés de session NwkSKey/AppSKey. lora.run() fait tourner la machine à états MAC en boucle.

Exécution

Installez Arduino SAMD Boards et la bibliothèque MKRWAN 2.x (MKRWAN1310), sélectionnez la carte, téléversez. La 1310 se pilote par commandes AT via l'ESP32 interne ; pour LoRa, prévoyez une seconde carte LoRa en face.

Variantes

Testez aussi MODEL_TYPE_C pour un nœud always-on, ou activez le mode confirmé dès la jointure pour valider la fenêtre RX complète.

join-otaa.ino

// Jointure OTAA de la MKR WAN 1310 (bibliothèque MKRWiSOLAR).
// Renseignez les cles provisionnees sur votre serveur (TTN, ChirpStack).
#include <MKRWiSOLAR.h>

const uint8_t DEVICE_EUI[] = {0xDE,0xAD,0xBE,0xEF,0xFE,0xED,0xC0,0xFF};
const uint8_t APP_EUI[]    = {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00};
const uint8_t APP_KEY[16]  = {0}; // a provisionner

LoRaWAN lora;

void setup() {
  Serial.begin(9600);
  while (!Serial);
  lora.setDeviceEui(DEVICE_EUI);
  lora.setAppEui(APP_EUI);
  lora.setAppKey(APP_KEY);
  lora.setRegion(EU_863_870_R1);
  // join(OTAA, MODEL_TYPE_A, timeout ms, tentatives max)
  if (lora.join(OTAA, MODEL_TYPE_A, 30000, 8) == 0) {
    Serial.println(F("JOIN refuse"));
    while (true);
  }
  Serial.println(F("JOIN accepte !"));
  Serial.print(F("Adresse : 0x"));
  Serial.println(lora.getDevAddr(), HEX);
}

void loop() {
  lora.run(); // traite la couche MAC (retransmissions, downlinks)
}

← Retour à la fiche