test-couverture.ino
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
}