🛠 Rejoindre The Things Network (OTAA)
Objetivos
Conectarse a una red LoRaWAN pública (The Things Network) mediante OTAA con la biblioteca MKRWAN: registrar el dispositivo con su deviceEUI, enviar uplinks y recibir downlinks, leer RSSI/SNR. Esta es la vocación principal de la placa — sin Wi-Fi, sin HTTP aquí, únicamente LoRaWAN clase A.
Material
- 1 placa MKR WAN 1310 + antena de 868 MHz
- Una cuenta de The Things Network (o TTN Stack) y una aplicación creada
- Ejemplo de referencia: MKRWAN > LoraSendAndReceive
Código completo
// OTAA The Things Network — MKR WAN 1310
#include <MKRWAN.h>
LoRaModem modem;
String appEui = "0000000000000000"; // EUI de l'application TTN
String appKey = "00000000000000000000000000000000"; // APP_KEY OTAA
void setup {
Serial.begin(115200);
while (!Serial);
if (!modem.begin(EU868)) { Serial.println("Module KO"); while (1); }
Serial.print("deviceEUI : "); Serial.println(modem.deviceEUI);
if (!modem.joinOTAA(appEui, appKey)) { // blocage jusqu'au join
Serial.println("Join echoue : rapprochez-vous d'une fenetre");
while (1) {}
}
Serial.println("Joint !");
modem.minPollInterval(60);
}
void loop {
while (!Serial.available);
String msg = Serial.readStringUntil('\n');
modem.beginPacket;
modem.print(msg);
int err = modem.endPacket(true); // true = uplink confirmé (ACK)
Serial.println(err > 0 ? "Envoye !" : "Echec (duty cycle ?)");
if (modem.available) { // downlink reçu en fenetre RX
char recu[64]; int i = 0;
while (modem.available && i < 63) recu[i++] = modem.read;
recu[i] = '\0';
Serial.printf("Downlink: %s\n", recu);
}
Serial.printf("RSSI=%d SNR=%d\n", modem.rssi, modem.snr);
delay(120000); // le firmware impose 1 émission / 2 min max (EU)
}
Verificación esperada
Se muestra «¡Unido!» después de unos segundos a unos minutos; los uplinks aparecen en los datos en vivo de TTN con RSSI/SNR. Un downlink programado en TTN regresa en la ventana RX que sigue al uplink.
Errores frecuentes
joinOTAAfalla aunque todo sea correcto: error conocido de falsos positivos (issue MKRWAN #139) — reintentar, colocar la placa cerca de una ventana, verificar que una pasarela TTN cubra la zona.- Enviar más de un mensaje cada 2 minutos: el firmware impone este límite de duty cycle, imposible de cambiar; los envíos son rechazados.
- Claves invertidas (APP_KEY en appEui) o en formato texto en lugar de hexadecimal.
- ABP: regresión señalada desde MKRWAN 1.0.15 (issue #85) — preferir OTAA.
- Después de ~255 envíos, bloqueo TX (error del contador de tramas, issue #141): ver el tutorial avanzado sobre las soluciones alternativas.
Otros tutoriales para esta placa
Ejemplos de código para esta placa
join-otaa.inoArduinouplink-confirme.inoArduinodownlink.inoArduinoactivation-abp.inoArduinosuivi-adr.inoArduinoclasse-c.inoArduino