🛠 Publier en MQTT sur le réseau cellulaire

Arduino MKR NB 1500 · intermediaire · Schéma : IMG-mkr-nb-1500-intermediaire-2-mkrnb-mqtt-cellulaire.svg — MKR NB 1500 reliée par ondes à un routeur cellulaire puis à un serveur MQTT, avec le topic mkrnb1500/donnees et un message JSON

Objetivos

Publicar medidas hacia un broker MQTT a través de la conexión NB-IoT/LTE-M, combinando la biblioteca MKRNB (acceso a la red) y PubSubClient (protocolo MQTT). Este es el caso de uso típico de un sensor en una ubicación aislada.

Material

Código completo

// Publication MQTT sur NB-IoT/LTE-M — MKR NB 1500
#include <MKRNB.h>
#include <PubSubClient.h>
#include "arduino_secrets.h"

const char PINNUMBER[] = SECRET_PINNUMBER;
const char APN[]       = "orange";
const char BROKER[]    = "test.mosquitto.org";
const int  PORT        = 1883;
const char TOPIC[]     = "mkrnb1500/donnees";

NB nbAccess;
GPRS gprs;
NBClient netClient;            // socket TCP via le modem
PubSubClient mqtt(netClient);

unsigned long dernierEnvoi = 0;

void setup {
  Serial.begin(9600);
  while (!Serial);

  bool ok = false;
  while (!ok) {
    if ((nbAccess.begin(PINNUMBER) == NB_READY) &&
        (gprs.attachGPRS(APN) == GPRS_READY)) ok = true;
    else delay(2000);
  }
  mqtt.setServer(BROKER, PORT);
  mqtt.setKeepAlive(120);      // keepalive adapte a la latence cellulaire
  while (!mqtt.connect("mkrnb-1")) delay(5000);
}

void loop {
  mqtt.loop;
  if (millis - dernierEnvoi > 60000) {   // 1 message par minute
    dernierEnvoi = millis;
    int v = analogRead(A0);
    char buf[48];
    snprintf(buf, sizeof(buf), "{\"a0\":%d,\"rssi_ok\":1}", v);
    mqtt.publish(TOPIC, buf);
    Serial.println(buf);
  }
}

Verificación esperada

Desde otro equipo: mosquitto_sub -h test.mosquitto.org -t 'mkrnb1500/donnees' muestra un mensaje JSON cada minuto. En la consola serie, también se muestra la carga útil publicada.

Errores frecuentes

Otros tutoriales para esta placa

Ejemplos de código para esta placa

← Volver a la ficha 🛠 Todos los tutoriales