test-couverture.ino

Arduino MKR WAN 1310 · Archivo : test-couverture.ino · Lenguaje : Arduino · Uso : Cartographier la couverture LoRaWAN en mobilité

Validar la cobertura LoRaWAN antes de desplegar: esta MKR WAN 1310 emite una trama identificador+contador cada treinta segundos durante un trayecto. Cruzando el trazo serie (hora de emisión) con los RSSI del servidor se dibuja el mapa de recepción de la ruta.

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 alimentada con powerbank, credenciales LoRaWAN unidas, antena, vehículo o ruta a pie.

Cableado

Nada que cablear; anota puntos notables (cruce, aparcamiento) al minuto para georreferenciar después.

Funcionamiento

El contador incremental cuenta pérdidas en el servidor; la tensión de batería embarcada detecta caídas bajo carga de radio. Las tramas no confirmadas respetan el duty cycle emitiendo seguido.

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

Añade un GPS serie para georreferenciar en directo o reporta el DR actual para ver cómo el ADR sigue la ruta.

test-couverture.ino

// Drive-test LoRaWAN : uplinks non confirmes + RSSI serveur ensuite.
// Emets une trame ID+compteur toutes les 30 s pendant le deplacement.
#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;
uint16_t compteur = 0;
unsigned long dernier = 0;

void setup() {
  Serial.begin(9600);
  lora.setDeviceEui(DEVICE_EUI);
  lora.setAppEui(APP_EUI);
  lora.setAppKey(APP_KEY);
  lora.setRegion(EU_863_870_R1);
  if (lora.join(OTAA, MODEL_TYPE_A, 30000, 8) == 0) while (true);
}

void loop() {
  lora.run();
  if (millis() - dernier < 30000) return;
  dernier = millis();
  uint8_t t[4];
  t[0] = 0x44; // marqueur "Drive-test"
  t[1] = compteur++;
  t[2] = analogRead(A1) >> 8; // tension batterie / 256
  t[3] = analogRead(A1) & 0xFF;
  lora.sendBuffer(t, 4, 7, 0);
  Serial.print(F("emis #"));
  Serial.println(t[1]); // horaire = trace serie + serveur croises
}

← Volver a la ficha