[Tuto] MQTT sur ESP32 + Mosquitto

Posté sur: juin 25, 2023

Catégories: Arduino , Projet

Auteur: Fabien

Tags: tuto , esp32 , Arduino , mqtt , iot , mosquitto

 

[Tuto] MQTT sur ESP32 + Mosquitto

Bienvenue dans ce tutoriel sur MQTT avec Mosquitto et la carte ESP32 ! MQTT (Message Queuing Telemetry Transport) est un protocole de communication léger et largement utilisé dans l'Internet des objets (IoT). Dans ce tutoriel, vous apprendrez à mettre en place une communication bidirectionnelle entre une carte ESP32 et un broker MQTT en utilisant Mosquitto. La carte ESP32 est un microcontrôleur WiFi et Bluetooth couramment utilisé dans les projets IoT. Nous vous guiderons étape par étape pour installer et configurer Mosquitto sur votre ordinateur, ainsi que pour configurer votre carte ESP32 pour établir une connexion MQTT avec le broker.  Que vous soyez débutant ou développeur expérimenté, ce tutoriel vous fournira les connaissances nécessaires pour créer des applications IoT basées sur MQTT avec Mosquitto et la carte ESP32.

Préparez-vous à plonger dans l'univers de MQTT et à explorer les possibilités infinies qu'il offre pour la communication entre les appareils connectés !

I. Mosquitto

          1. Téléchargement de Mosquitto

Rendez-vous sur le site officiel mosquitto.org pour le téléchargement de la dernière version pour votre ordinateur.

          2. Paramétrage de Mosquitto

Pour débuter, il faut paramétrer Mosquitto dans le fichier mosquitto.conf (Sous Windows, il se trouve dans C:/Program Files/mosquitto). Ouvrez le dans votre éditeur de texte habituel (exemple Notepad++) et ajoutez les lignes suivantes en dès les premières lignes du fichier.

Les lignes en question:

listener 1883
allow_anonymous true
log_timestamp_format %Y-%m-%d T %H:%M:%S

         3. Démarrage de Mosquitto

Pour démarrer Mosquitto, lancer l'invite de commande en mode Administrateur en tapant sur la touche "Démarrez" puis écrire cmd. Pour démarrer le service Mosquitto saisir net start mosquitto:

         4. Visualiser les données

Pour visualiser les informations dans le services MQTT, nous allons utiliser MQTT explorer. Cet outil a pour but de visualiser sur votre ordinateur ce qui se passe sur le service MQTT. Tout d'abord télécharger MQTT explorer sur le site officiel: mqtt-explorer.com

Au démarrage, MQTT Explorer vous propose d'ajouter des flux vers mqtt.eclipse.org et test.mosquitto.org. Nous allons donc lui dire que nous fonctionnons en local.

  1. Cliquez sur + en haut à gauche
  2. Saisir un nom dans "Name"
  3. Désactiver l'option "Validate certificate" (Nous ne l'utiliserons pas avec l'ESP32)
  4. Dans le champ Host saisir "localhost" pour dire que nous sommes en local
  5. Cliquez sur "Connect"

Vous devriez ensuite voir une fenêtre donnant une version de Mosquitto et le temps depuis son démarrage.

           5. Emettre une donnée de test

Nous allons utiliser une application mobile pour simuler un device et envoyer une donnée sur notre serveur MQTT. Nous avons choisi MQTT Client 

Lancer l'application (elle peut vous demander les conditions d'utilisation). Il faudra ensuite récupérer l'adresse IP de votre ordinateur et mettre votre téléphone sur le même réseau Wifi. Sur la page suivante de configuration MQTT Broker, saisir l'adresse IP de votre ordinateur et mettez vous sur la configuration MQTT V5. 

 

      6. Publisher et Subscriber sur Windows

Pour tester l'installation du broker MQTT nous allons publier quelques messages dans le topic et nous y subscribe. 

1. Ouvrez le terminal en mode administrateur et déplacez vous dans le répertoire "C:/Program Files /mosquitto

2. Une fois dans le terminal créer le topic "Test" à l'aide de la commande "mosquitto_sub -d -t Test

3. Ouvrez un deuxième terminal en mode administrateur et écrivez le message que vous allez publier dans le topic "mosquitto_pub -d -t Test -m "hello world"

4. Sur le terminal contenant le topic vous devriez normalement recevoir le message qui à été publié à l'étape précédente. 

II. ESP32

   1. Installation de l'ESP32 et de la librairie PubSubClient

Nous allons désormais programmer l'ESP32 pour qu'il publie sur Mosquitto. Pour pouvoir développer, il nous faudra installer la carte ESP32 dans l'IDE Arduino (si vous avez déjà travaillé avec la carte ESP32 dans Arduino, sautez cette étape).

1. Cliquez sur "outils" dans l'IDE Arduino 

2. Sélectionnez "Type de carte" et choisissez  "Gestionnaire de carte

3. Dans le Gestionnaire de carte recherchez "ESP32"

4. Une fois trouvé, cliquez sur "install

 

Par la suite nous allons utiliser la librairie PubSubClient.

1. Cliquez sur "Croquis" puis "inclure une bibliothèque" puis "Gérez les bibliothèques

2. Dans la barre de recherche tapez "PubSubClient". 

3. Retrouvez la librairie "PubSubClient" de "Nick O'Leary" et cliquez sur "install"

 

 

    2. Création d'une connexion MQTT

1. Dans notre code arduino, nous devons importer la librairie "WiFi" et "PubSubClient", afin de pouvoir communiquer avec le broker MQTT. 

  #include "WiFi.h"
#include "PubSubClient.h"

2. Maintenant configurons les paramètres suivants : WiFi (SSID, mot de passe), MQTT Broker, topic, mqtt_usernanme, mqtt_password, mqtt_port.

  // MQTT Broker  const char *mqtt_broker = ""; 
const char *topic = "";
const char *mqtt_username = "";
const char *mqtt_password = "";
const int mqtt_port = 1883;


3. Etablissons la connexion WiFi

   Set software serial baud to 115200; 
Serial.begin(115200);
// Connecting to a Wi-Fi network
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.println("Connecting to WiFi..");

4. Utilisons PubSubClient pour établir la connexion avec le broker MQTT

  client.setServer(mqtt_broker, mqtt_port); 
client.setCallback(callback);
while (!client.connected()) {
    String client_id = "esp32-client-";
    client_id += String(WiFi.macAddress());
    Serial.printf("The client %s connects to the public MQTT brokern", client_id.c_str());
    if (client.connect(client_id.c_str(), mqtt_username, mqtt_password)) {
Serial.println("Public EMQX MQTT broker connected");
    } else {
  Serial.print("failed with state ");
        Serial.print(client.state());
        delay(2000);
    }

     3. Publish & Subscribe un message 

Une fois la connexion au broker MQTT etabli, l'ESP32 publiera sur le topic que vous avez défini précedemment et pourra également se subscribe dessus

  // publish and subscribe 
    client.publish(topic, "Salut, Je suis L'ESP32");
    client.subscribe(topic);


    4. Recevoir un message MQTT

Définissez la fonction callback pour afficher le nom du "topic" sur le sérial port et afficher le message reçu du topic configuré

     void callback(char *topic, byte *payload, unsigned int length) { 
  Serial.print("Message arrived in topic: ");
  Serial.println(topic);
  Serial.print("Message:");
  for (int i = 0; i < length; i++) {
  Serial.print((char) payload[i]);
  }
  Serial.println();
  Serial.println("-----------------------");
  }

Code en entier  

  #include "WiFi.h"
#include "PubSubClient.h"
#include  "Wire.h"
  // WiFi
const char *ssid = ""; // Entrez votre SSID WiFi
const char *password = ""; // Entrez votre mot de passe WiFi
 
// MQTT Broker
const char *mqtt_broker = "";
const char *topic = "";
const char *mqtt_username = "";
const char *mqtt_password = "";
const int mqtt_port = 1883;
WiFiClient espClient;
PubSubClient client(espClient);

void setup() {
//Mise de la vitesse de transmission à 115200;
Serial.begin(115200);
// Connecting to a Wi-Fi network
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.println("Connecting to WiFi..");
  } Serial.println("Connected to the Wi-Fi network");
//connexion au broker MQTT
client.setServer(mqtt_broker, mqtt_port);
client.setCallback(callback);
while (!client.connected()) {
String client_id = "esp32-client-";
client_id += String(WiFi.macAddress());
Serial.printf("The client %s connects to the public MQTT brokern", client_id.c_str());
if (client.connect(client_id.c_str(), mqtt_username, mqtt_password)) {
Serial.println("Public EMQX MQTT broker connected");
  } else {
  Serial.print("failed with state ");
  Serial.print(client.state());
  delay(2000);
  }
  }
// Publish et subscribe
  client.publish(topic, "Hi, I'm ESP32");
  client.subscribe(topic
  }
// Reception du message MQTT
void callback(char *topic, byte *payload, unsigned int length) {
Serial.print("Message arrived in topic: ");
Serial.println(topic);
  Serial.print("Message:");
  for (int i = 0; i < length; i++) {
Serial.print((char) payload[i]);
  }
  Serial.println();
  Serial.println("-----------------------");

void loop() {

client.loop();

  } 

      5. Lancement et Test

Suivez les instructions afin de téléverser le code dans l'ESP32

1. Connectez l'ESP32 à votre ordinateur avec un câble USB

2. Ouvrez l'IDE Arduino et sélectionnez la carte approprié et le bon port dans le menu "outils"

3. Copiez-collez le code complet dans l'IDE Arduino

4. Cliquer sur "téléverser" pour compiler et envoyer le code vers l'ESP32.

5. Attendez que le process de téléversement se finisse.

6. Une fois le code envoyé, ouvrez le moniteur série, et vérifier que la vitesse de transmission soit réglé sur 115200, par la suite vérifier le status de connexion de l'ESP32.

7. Utilisez votre Broker MQTT (ici MQTT explorer pour voir le message s'afficher) 

 

Comme vous pouvez le voir vous avez votre message "Hi I'm ESP32" s'afficher sur MQTT explorer, attestant que vous avez bien envoyé votre message.

Lien de références:

 

 

laissez un commentaire

Se connecter