activation-abp.ino

Arduino MKR WAN 1310 · Archivo : activation-abp.ino · Lenguaje : Arduino · Uso : Activer la carte en ABP (adresse fixe, sans join)

ABP se salta el paso de join: la dirección y las claves de sesión se escriben a mano en la MKR WAN 1310 y el servidor. Útil en redes privadas o para depurar rápido, pero sin rotación de claves ni resistencia a repeticiones; evítalo en redes públicas.

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, servidor LoRaWAN donde el dispositivo se crea en modo ABP con las mismas claves.

Cableado

Sin cableado; genera claves aleatorias en el servidor, no dejes los ceros del ejemplo.

Funcionamiento

join(ABP,...) configura simplemente la pila MAC con la dirección y las claves estáticas; el primer sendBuffer sale de inmediato, sin ventana de join.

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

Compara la latencia de la primera trama OTAA vs ABP en tu cobertura; ese es el argumento del ABP en escenarios de emergencia.

activation-abp.ino

// Activation ABP pour la MKR WAN 1310 : pas de jointure OTAA.
// A reserver aux reseaux prives ou a la banque de test.
#include <MKRWiSOLAR.h>

const uint32_t DEV_ADDR = 0x26020102;
const uint8_t NWK_SKEY[] = {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
                            0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00};
const uint8_t APP_SKEY[] = {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
                            0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00};

LoRaWAN lora;

void setup() {
  Serial.begin(9600);
  while (!Serial);
  lora.setDeviceAddress(DEV_ADDR);
  lora.setNetworkSKey(NWK_SKEY);
  lora.setAppSKey(APP_SKEY);
  lora.setRegion(EU_863_870_R1);
  // ABP : pas d'echange join, on emet directement
  if (lora.join(ABP, MODEL_TYPE_A, 5000, 1) == 0) {
    Serial.println(F("ABP refuse (config?)"));
    while (true);
  }
  Serial.println(F("ABP actif, emission possible"));
  uint8_t t[1] = { 42 };
  lora.sendBuffer(t, 1, 1, 0);
  Serial.println(F("trame de test emise"));
}

void loop() {
  lora.run();
}

← Volver a la ficha