publish-mqtt-minimal.ino

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

Publication sobre pour réseau LPWA : toutes les dix minutes, le MKR NB 1500 envoie tension batterie et identifiant vers un relais TCP. Le patron volontairement minimal montre le strict minimum d'un publish ; pour un vrai broker, branchez PubSubClient sur NBClient.

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). SIM IoT avec IP data, serveur relais ou broker MQTT joignable en TCP, antenne LTE.

Câblage

Aucun câblage externe ; la mesure batterie utilise l'entrée VBAT interne de la carte.

Fonctionnement

attachGPRS obtient une adresse IP ; NBClient ouvre une socket TCP. Le format ligne à ligne simplifie le relais côté serveur. Le rythme de dix minutes ménage la batterie et la cellule 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

Basculez vers MQTT réel (PubSubClient + NBClient), ajoutez des capteurs BME280 sur I2C, ou compressez la charge utile en binaire pour économiser les quelques octets de data.

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"));
  }
}

← Retour à la fiche