test-couverture.ino

Arduino MKR WAN 1310 · Fichier : test-couverture.ino · Langage : Arduino · Usage : Cartographier la couverture LoRaWAN en mobilité

Valider une couverture LoRaWAN avant un déploiement : cette MKR WAN 1310 émet une trame identifiant+compteur toutes les trente secondes pendant un trajet. En croisant la trace série (heure d'émission) et les RSSI côté serveur, on dessine la carte de réception du trajet.

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 alimentée par powerbank, SIM... non : carte LoRaWAN jointe, antenne, véhicule ou trajet pédestre.

Câblage

Rien à câbler ; notez les points remarquables (carrefour, parking) à l'heure près pour géoréférencer ensuite.

Fonctionnement

Le compteur incrémental permet de compter les pertes côté serveur ; la tension batterie embarquée détecte les chutes sous charge radio. Les trames non confirmées respectent le duty cycle en émission rapprochée.

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

Ajoutez un GPS série pour géoréférencer en direct, ou remontez le DR courant pour voir l'ADR suivre le trajet.

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
}

← Retour à la fiche