diagnostic-join.ino
Quand le join LoRaWAN échoue, les causes sont toujours les mêmes : ce programme de diagnostic énonce les vérifications, tente trois jointures longues puis énumère les pistes classées. Un réflexe à avoir avant de changer de carte.
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, antenne obligatoirement vissée, accès à la console du serveur LoRaWAN.
Câblage
Aucun câblage ; vérifiez d'abord la présence de l'antenne — sans elle, tout échoue silencieusement.
Fonctionnement
Le test énonce les vérifications dans l'ordre, puis le timeout long (60 s, 3 essais) couvre le duty cycle légal qui impose des attentes entre canaux.
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 test de balayage de canaux ou comparez avec une seconde carte sœur pour éliminer la panne matérielle.
diagnostic-join.ino
// Diagnostic d'echec de join sur MKR WAN 1310 : etapes + indices.
#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);
Serial.println(F("1. Verifier les EUI saisis (inversion d'octets ?)"));
Serial.println(F("2. Region EU868 + duty cycle 1 % : etre patient"));
lora.setDeviceEui(DEVICE_EUI);
lora.setAppEui(APP_EUI);
lora.setAppKey(APP_KEY);
lora.setRegion(EU_863_870_R1);
Serial.println(F("3. Join avec 3 tentatives longues..."));
int ok = lora.join(OTAA, MODEL_TYPE_A, 60000, 3);
if (ok) { Serial.println(F("OK - le reseau repond")); return; }
Serial.println(F("ECHEC. Causes frequentes :"));
Serial.println(F(" - passerelle hors ligne / hors portee"));
Serial.println(F(" - AppKey differente du serveur (recopie !)"));
Serial.println(F(" - device pas activee / antenne debranchee"));
while (true);
}
void loop() {}