Utiliser un broker MQTT public

Pour réaliser des tests, une méthode simple est l’utilisation d’un broker MQTT public et gratuit. Vous trouverez quelques références sur des brokers sur le site de Maulin Tolia.
Pour mes tests, j’ai utilisé le broker de mosquitto. Il ne faut rien publier de privé ou de secret sur ce broker, n’importe qui pouvant écouter les messages.

Publication avec mosquitto_pub

Il y a plusieurs outils qui permettent de publier sur un broker. Voici la commande avec mosquitto_pub :

mosquitto_pub -h test.mosquitto.org -t "gagnebin.tech/home/demo" -m "Hello World !"

Publication avec MQTTBox

Créer un client selon l’exemple :

Publication avec Arduino

Cet exemple utilise la librairie « ArduinoMqttClient.h« , et assume que l’Arduino est connecté à internet, avec un client Wifi et un client MQTT (les exemples proviennent de platformio.org) :

WiFiClient wifiClient;
MqttClient mqttClient(wifiClient);


Les valeurs utilisées sont :

const char broker[] = "test.mosquitto.org";
int        port     = 1883;
const char topic[]  = "gagnebin.tech/home/demo";

// To publish every 30 seconds
const long interval = 1000 * 30; 
unsigned long previousMillis = 0;

Dans la fonction loop, on post un topic :

if (currentMillis - previousMillis >= interval) {
  // save the last time a message was sent
  previousMillis = currentMillis;

  Serial.print("Sending message to topic: ");
  Serial.println(topic);
  Serial.print("Hello from Arduino :-)");
  Serial.println(count);

  // send message, the Print interface can be used to set the message contents
  mqttClient.beginMessage(topic);
  mqttClient.print("Hello from Arduino # ");
  mqttClient.print(count);
  mqttClient.endMessage();

  Serial.println();

  count++;
}

Souscription avec mosquitto_sub

mosquitto_sub -h test.mosquitto.sub -t "gagnebin.tech/home/demo"

Souscription avec MQTTBox

Souscription avec Arduino

On ajoute la définition du topic à écouter :

const char topicSub[]  = "gagnebin.tech/home/demo";

Dans le setup, on va souscrire à une publication avec une fonction de callback, et il faut souscrire au topic :

// set the message receive callback
mqttClient.onMessage(onMqttMessage);

// subscribe to a topic
mqttClient.subscribe(topicSub);

// topics can be unsubscribed using:
// mqttClient.unsubscribe(topicSub);

La fonction de callback devra être adaptée pour gérer correctement des informations reçues, mais dans notre cas, on affiche simplement le message reçu :

void onMqttMessage(int messageSize) {
  // we received a message, print out the topic and contents
  Serial.print("Received a message with topic '");
  Serial.print(mqttClient.messageTopic());
  Serial.print("', length ");
  Serial.print(messageSize);
  Serial.println(" bytes:");

  // use the Stream interface to print the contents
  while (mqttClient.available()) {
    Serial.print((char)mqttClient.read());
  }
  Serial.println();

  Serial.println();
}

Laisser un commentaire