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