attente-lte-nbiot.ino
El MKR NB 1500 tarda en unirse a una red LTE-M o NB-IoT: este bucle de unión espera hasta dos minutos, imprime el estado en cada sondeo y confirma operador y calidad de señal. La base de todo proyecto LPWA fiable.
Hardware
Una Arduino MKR NB 1500 (microcontrolador SAMD21, módem u-blox LTE-M/NB-IoT, antena externa, alimentación LiPo en J6 o USB). Una SIM IoT de datos (LTE-M o NB1 según operador), la antena LTE enroscada y un cable micro-USB.
Cableado
Sin cableado externo: SIM insertada, antena colocada, alimentación USB; asegura buena recepción (sótanos = fallo típico).
Funcionamiento
nb.begin() arranca el módem u-blox SARA-R4. getStatus() devuelve el estado de la pila de red; el bucle sondea cada 2 s en 60 intentos. signalQuality() informa del RSSI del módulo.
Ejecución
Instala el paquete Arduino SAMD Boards y la librería MKRNB, selecciona la placa y carga. Prevé una SIM IoT (LTE-M o NB1) activada y buena recepción: la conexión a la red puede tardar varios minutos.
Variantes
Fuerza la tecnología con nb.setNetworkSettings("3") solo para NB-IoT, o añade un reinicio del módem tras cinco intentos fallidos.
attente-lte-nbiot.ino
// Attachement reseau LTE-M ou NB-IoT avec le MKR NB 1500 (MKRNB).
#include <MKRNB.h>
const char PIN_SIM[] = "0000";
const char APN[] = "iot.1nce.net"; // APN IoT de votre operateur
NB nb;
NBClient client;
void setup() {
Serial.begin(9600);
while (!Serial);
Serial.println(F("Init modem NB..."));
if (nb.begin(PIN_SIM) != NB_READY) {
Serial.println(F("Modem KO : verif. SIM/antenne"));
while (true);
}
// Attente longue : un module NB-IoT peut mettre 1-2 min a s'attacher
int essai = 0;
while (nb.getStatus() != NETWORK_JOINED && essai++ < 60) {
Serial.print(F("Attente reseau... "));
Serial.println(nb.getStatus());
delay(2000);
}
Serial.print(F("Statut final : "));
Serial.println(nb.getStatus() == NETWORK_JOINED ? "JOINT" : "ECHEC");
Serial.print(F("Operateur : "));
Serial.println(nb.getOperator());
Serial.print(F("Signal (RSRP approx) : "));
Serial.println(nb.signalQuality());
}
void loop() {}