attente-lte-nbiot.ino
Le MKR NB 1500 met du temps à rejoindre un réseau LTE-M ou NB-IoT : cette boucle d'attachement patiente jusqu'à deux minutes, affiche l'état à chaque tentative, puis confirme l'opérateur et la qualité de signal. La base de tout projet LPWA fiable.
Matériel requis
Une Arduino MKR NB 1500 (microcontrôleur SAMD21, modem u-blox LTE-M/NB-IoT, antenne externe, alimentation LiPo sur J6 ou USB). Une carte SIM IoT data (LTE-M ou NB1 selon l'opérateur), l'antenne LTE vissée, un câble micro-USB.
Câblage
Aucun câblage externe : SIM insérée, antenne en place, alimentation USB ; prévoyez une bonne réception (sous-sol = échec typique).
Fonctionnement
nb.begin() démarre le modem u-blox SARA-R4. getStatus() renvoie l'état de la pile réseau ; la boucle sonde toutes les 2 s pendant 60 essais. signalQuality() donne le RSSI rapporté par le module.
Exécution
Installez le package Arduino SAMD Boards et la bibliothèque MKRNB, sélectionnez la carte, téléversez. Prévoyez une carte SIM IoT (LTE-M ou NB1) activée et une bonne réception : l'attachement au réseau peut demander plusieurs minutes.
Variantes
Forcez la technologie avec nb.setNetworkSettings("3") pour du NB-IoT uniquement, ou ajoutez un redémarrage modem après cinq échecs d'attachement.
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() {}