choix-bande.ino
Un module LPWA qui ne trouve pas de réseau est souvent mal configuré : ce croquis lit puis force le masque de bandes LTE (B3/B7/B8/B20 pour la France) et le mode CAT-M1/NB1 du SARA-R4 du MKR NB 1500. À faire une seule fois, le réglage est persistant.
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). MKR NB 1500, SIM IoT, antenne multi-bandes couvrant les bandes choisies.
Câblage
Aucun câblage ; le programme se flashe une fois, puis le module garde la configuration en mémoire flash.
Fonctionnement
Le masque de bandes est un hexadécimal bits-à-bits (b0=B1...). setBandMask/writeRf et setNetworkSettings écrivent dans le profil du modem ; un restart applique les changements radio.
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
Adaptez le masque à votre opérateur/région (B12/B13 en zones rurales US), ou testez chaque bande séparément pour débusquer une antenne médiocre.
choix-bande.ino
// Selection bande + mode radio du SARA-R4 (MKR NB 1500, MKRNB).
#include <MKRNB.h>
const char PIN_SIM[] = "0000";
NB nb;
// Bandes Europe Telecom France : B3/B7/B8/B20
// Modes : "3" = CAT-M1, "4" = NB1, "3,4" = les deux
const char BANDES[] = "800000000020001B"; // B3,B7,B8,B20 (masque hexa)
const char MODE[] = "3,4";
void setup() {
Serial.begin(9600);
while (!Serial);
if (nb.begin(PIN_SIM) != NB_READY) while (true);
Serial.println(F("Lecture bande courante..."));
Serial.println(nb.getBandMask());
Serial.println(F("Application du masque de bandes..."));
if (nb.setBandMask(BANDES) == RIL_OK) Serial.println(F("Bandes OK"));
else Serial.println(F("Bandes refusees"));
Serial.println(F("Mode radio..."));
if (nb.setNetworkSettings(MODE) == RIL_OK) Serial.println(F("Mode OK"));
Serial.println(F("Reinitialisation modem pour appliquer..."));
nb.restart();
Serial.println(F("Relancez apres reconnexion du port serie."));
}
void loop() {}