publish-mqtt-minimal.ino

Arduino MKR NB 1500 · Archivo : publish-mqtt-minimal.ino · Lenguaje : Arduino · Uso : Publier une mesure vers un broker MQTT léger en TCP

Publicación sobria para redes LPWA: cada diez minutos el MKR NB 1500 envía tensión de batería e identificador de estación a un relé TCP. El patrón, deliberadamente mínimo, muestra la esencia de un publish; para un broker real, conecta PubSubClient a NBClient.

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 con IP de datos, servidor relé o broker MQTT accesible por TCP, antena LTE.

Cableado

Sin cableado externo; la medida de batería usa la entrada VBAT interna de la placa.

Funcionamiento

attachGPRS obtiene una dirección IP; NBClient abre un socket TCP. El formato por líneas simplifica el relé del servidor. El ritmo de diez minutos cuida batería y celda de radio.

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

Pásate a MQTT real (PubSubClient + NBClient), añade sensores BME280 por I2C o comprueba la carga a binario para ahorrar esos pocos bytes de datos.

publish-mqtt-minimal.ino

// Publication MQTT "maison" (TCP brut) depuis le MKR NB 1500.
// Format minimal : topic\n valeur\n vers un petit relais TCP.
// Pour un vrai broker, remplacez par la lib PubSubClient (TCP ok).
#include <MKRNB.h>

const char PIN_SIM[] = "0000";
const char APN[] = "iot.1nce.net";
const char SERVEUR[] = "192.0.2.10"; // votre relais / broker
const int PORT = 1883;

NB nb;
NBClient client;

const long PERIODE = 600000; // 10 min (menage le reseau LPWA)
unsigned long dernier = 0;

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

void loop() {
  if (millis() - dernier < PERIODE) return;
  dernier = millis();
  float vbat = 3.3 * analogRead(VBAT) / 1023.0 * 1.5;
  if (client.connect(SERVEUR, PORT)) {
    client.print("station/01/batterie\n");
    client.println(vbat, 2);
    client.stop();
    Serial.println(F("publie"));
  } else {
    Serial.println(F("connexion KO, reessai au prochain cycle"));
  }
}

← Volver a la ficha