reconnexion-rapide.ino

Arduino MKR NB 1500 · Archivo : reconnexion-rapide.ino · Lenguaje : Arduino · Uso : Se réattacher au réseau sans pleine réinitialisation

En movilidad o en un sótano, la célula desaparece y vuelve: en vez de un reinicio completo de 30 segundos, este sketch vuelve a sondear la unión de radio cada dos segundos y solo reinicia el módem del MKR NB 1500 como último recurso. La sesión IP se retoma antes.

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). SIM IoT, antena colocada, servidor destino accesible.

Cableado

Sin cableado; comportamiento autónomo tras el flasheo, apto para cajas selladas.

Funcionamiento

getStatus() sondea la pila de red sin tocar la sesión PDP; attachGPRS solo se repite al volver la cobertura. El reinicio completo pasa a ser la excepción, ahorrando batería y señalización.

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

Añade un watchdog de hardware (pin RESET del módem pilotado por un GPIO) si tu ubicación sufre bloqueos de firmware.

reconnexion-rapide.ino

// Reconnexion rapide : garder la session IP et reattacher vite.
// Le SARA-R4 supporte "attache rapide" si la session est conservee.
#include <MKRNB.h>

const char PIN_SIM[] = "0000";
const char APN[] = "iot.1nce.net";

NB nb;
NBClient client;

bool reseauHorsLigne() {
  return nb.getStatus() != NETWORK_JOINED;
}

void setup() {
  Serial.begin(9600);
  if (nb.begin(PIN_SIM) != NB_READY) while (true);
  while (reseauHorsLigne()) delay(2000);
  nb.attachGPRS(APN);
}

void loop() {
  if (reseauHorsLigne()) {
    Serial.println(F("Reseau perdu, reattachement..."));
    int essai = 0;
    while (reseauHorsLigne() && essai++ < 30) delay(2000);
    if (reseauHorsLigne()) {
      nb.restart(); // dernier recours (~30 s)
      while (reseauHorsLigne()) delay(2000);
    }
    nb.attachGPRS(APN);
  }
  // Publication toutes les 10 min
  static unsigned long dernierEnvoi = 0;
  if (millis() - dernierEnvoi >= 600000) {
    dernierEnvoi = millis();
    if (client.connect("192.0.2.10", 1883)) {
      client.print("nb1500/ok\n"); client.stop();
    }
  }
}

← Volver a la ficha