join-otaa.ino

Arduino MKR WAN 1310 · Archivo : join-otaa.ino · Lenguaje : Arduino · Uso : Rejoindre un réseau LoRaWAN en OTAA

La primera conexión LoRaWAN de la MKR WAN 1310: aprovisionar los tres identificadores (Device EUI, App EUI, App Key) y hacer join OTAA con ocho intentos en 30 segundos. El servidor valida el dispositivo y se establece la sesión de cifrado; es el requisito previo de todo lo demás.

Hardware

Una Arduino MKR WAN 1310 (microcontrolador SAMD21, módem LoRa pilotado por un ESP32 integrado que también expone Wi-Fi, antena LoRa y antena Wi-Fi). MKR WAN 1310, antena de 868 MHz, una pasarela LoRaWAN que cubra la zona y cuenta de servidor (TTN, ChirpStack, LaCocotte).

Cableado

Sin cableado; anota la App Key generada por el servidor, no se volverá a mostrar.

Funcionamiento

join(OTAA,...) envía una petición Join por los canales EU, espera el Accept en RX1/RX2 e instala las claves de sesión NwkSKey/AppSKey. lora.run() hace girar la máquina de estados MAC.

Ejecución

Instala Arduino SAMD Boards y la librería MKRWAN 2.x (MKRWAN1310), selecciona la placa y carga. La 1310 se controla con comandos AT a través de su ESP32 interno; para LoRa, prevé una segunda placa LoRa al otro lado.

Variantes

Prueba también MODEL_TYPE_C para un nodo siempre activo o activa el modo confirmado nada más unirte para validar la ventana RX completa.

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

← Volver a la ficha