choix-bande.ino

Arduino MKR NB 1500 · Fichier : choix-bande.ino · Langage : Arduino · Usage : Sélectionner la bande LTE et le mode (CAT-M1 / NB1)

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() {}

← Retour à la fiche