loader

ESP32: Communication avec le protocole MQTT

Ce tutoriel permet d'établir une communication entre une carte ESP32 (Wemos D1R32, Pico W, M5Stack, Thingz-Galaxia ...) et son ordinateur via le protocole de communication MQTT. Il permet d'envoyer et recevoir des données depuis une invite de commande sous Windows vers et depuis le microcontrôleur. Nous utiliserons ici le broker opensource Mosquitto.

Depuis la page https://mosquitto.org/download/, télécharger et installer mosquitto sur votre ordinateur dans le répertoire de votre choix. Par exemple, C:\Program Files\mosquitto

Une fois l'installation terminée, ouvrez l'invite de commande en tant qu'administrateur de Windows en tapant "cmd" ou "Invite de commandes" dans la barre de recherche. Ou alors, taper la toucher Windows + X puis cliquer sur Terminal (administrateur). On aura besoin plus tard d'être en tant qu'administrateur pour enregistrer le fichier de configuration et créer le fichier utilisateurs.

Dans cette fenêtre, se placer dans le répertoire d'installation de mosquitto en exécutant la commande : 
  • cd C:\Program Files\mosquitto

Pour vérifier le contenu du dossier, taper:
  • dir

Il contient tous les fichiers utiles à la communication avec un broker MQTT

Pour vérifier la version du broker, taper: 
  • mosquitto -h

Vous devriez obtenir les informations suivantes: 
mosquitto version

Pour envoyer et recevoir des données, le broker MQTT nécessite d'être configuré avec un nom d'utilisateur et un mot de passe.  On a également besoin de lui fournir un port pour la communication. On utilisera le port par défaut 1883.

Dans l'invite de commandes, taper la commande :
  • type nul > user_password

Elle permet de créer un nouveau fichier vide qui contiendra les noms d'utilisateurs et les mots de passes.

Ensuite, on créé un nouvel utilisateur en utilisant la commande suivante tel que mosquitto_passwd -b . Pour ma part, je vais par exemple utiliser le nom d'utilisateur 'leo' et le mot de passe '1234'. La commande à exécuter sera la suivante: 
  • mosquitto_passwd -b user_password leo 1234

Il est possible d'ajouter autant d'utilisateurs que vous le souhaitez. Si vous souhaitez plus de détails sur l'authentification, rendez-vous sur la page mosquitto-authentication

Ensuite, nous allons éditer le fichier mosquitto.conf en tapant la commande:
  • notepad mosquitto.conf


Note: Si l'accès à l'enregistrementr du fichier ne vous est pas autorisé, c'est que vous n'avez pas ouvert le terminal en mode Administrateur
A la dernière ligne du fichier, ajouter la ligne suivante pour définir le port: listener 1883
Ajouter également la ligne pour définir le fichier des mots de passes à utiliser: password_file user_password
Enregistrer et fermer ce fichier.

Nous avons désormais une configuration basique pour la communication via le protocole MQTT.

La dernière étape est de démarrer le broker en tapant la commande: 
  • mosquitto -c mosquitto.conf

Garder cette fenêtre en arrière-plan. Tout est prêt pour envoyer et/ou recevoir des données avec l'ESP32 !

Maintenant, nous allons vérifier depuis la carte ESP32 que le broker MQTT est bien activé. Pour cela, nous devons se connecter à un réseau wifi, puis, se connecter au broker MQTT.

Dans un 1er temps, il s'agit de se connecter au réseau Wifi en utilisant le bloc "connecter la station: ... ". Le bloc a besoin du nom du réseau Wifi et du mot de passe. Attention, la carte ESP32 et l'ordinateur doivent être connectés au même réseau Wifi pour établir la communication MQTT. 

Pour trouver l'adresse IP de l'ordinateur et ainsi définir l'adresse IP de la carte ESP32, veiller à ouvrir une nouvelle fenêtre de Terminal (Administrateur) afin de laisser tourner le broker en arrière-plan. Retourner dans le répertoire C:\Program Files\mosquitto. Puis, taper la commande suivante:
  • ipconfig

Je prendrais l'exemple d'une connexion sans-fil Wi-Fi, l'adresse IP de l'ordinateur correspond à la ligne: 
Adresse IPv4. . . . . . . . . . . . . .: 192.168.1.X

Je choisis donc une adresse IP pour la carte ESP32 contenue dans le même réseau, soit par exemple 192.168.1.100

Ensuite, connecter la carte au broker MQTT en utilisant le bloc "[MQTT] connecter au broker ..." et en renseignant le nom d'utilisateur et le mot de passe définis dans la partie précédente. (leo: 1234)

Note: On ne s'occupe ici pas du port, la connexion se fait automatiquement sur le port par défaut 1883. Si vous souhaitez changer de port, il est possible de cliquer sur le bouton: Bouton +
  • Exemple du programme:



Si tout a bien fonctionné, nous obtenons les informations suivantes dans la console Vittascience:

Already connected on ssid: 'réseau'
Trying to connect to broker ('192.168.X.X', 1883) ...
Station (ID : 10521c584d64) connected to broker (IP : 192.168.X.X)

Dans cette partie, le but est d'envoyer la température du processeur de la carte ESP32 toutes les 5 secondes à l'ordinateur. Pour cela, nous utiliserons les blocs de type "[MQTT] ..." contenus dans la catégorie Réseau de la bibliothèque de blocs.

Dans le bloc "Répéter indéfiniment", on publie la température en renseignant le nom du canal. 
Un canal peut permettre de différencier plusieurs données qui seraient envoyées et reçues. Ici, on appellera le canal "temperature"



Téléverser le programme dans la carte.
Pour visualiser les données envoyées par la carte, il faut établir la réception des données dans le Terminal (Administrateur). Attention, ne pas utiliser la 1ère fenêtre dans la quelle tourne le broker MQTT.

Dans la 2nde fenêtre, taper la commande suivante: 
  • mosquitto_sub -t "temperature" -u leo -P 1234


La commande mosquitto_sub correspond à la réception des données. Ensuite, on renseigne le nom du canal sur lequel les données sont envoyées. Dans notre cas, on a renseigné "temperature" dans le bloc de publication. Puis, le nom d'utilisateur et le mot de passe.

Attendez 5 secondes, vous voyez les données dans la console ? Parfait !

Réception données MQTT

Nous allons maintenant, établir une communication dans l'autre sens. C'est à dire envoyer un message à la carte ESP32 depuis l'ordinateur. C'est parti ! :)

Nous allons maintenant envoyer une donnée depuis le broker MQTT avec une commande mosquitto dans le canal "salutation".

Pour cela, nous devons d'abord programmer la carte ESP32 pour qu'elle affiche les données reçues du broker quand elle en réceptionne.
Nous utilisons le bloc "[MQTT] Si un message est reçue dans le canal..." et le bloc "[MQTT] si le canal est ...".
Pour recevoir les données, il faut d'abord souscrire au canal en utilisant le bloc "[MQTT] souscrire au canal ..."

Téléverser le programme suivant: 



Dans le 2nde fenêtre du terminal, taper la commande suivante:
  • 
    mosquitto_pub -t "salutation" -m "Bonjour ESP32 ! :)" -u leo -P 1234


Le message apparaît correctement dans la console ?

Le protocole MQTT est un bonne une solution pour la communication entre des microcontrôleurs ESP32 et un ordinateur. Sa légèreté et son efficacité en termes de bande passante le rendent particulièrement adapté aux environnements à ressources limitées. Grâce à son architecture basée sur le modèle publish/subscribe, il offre une flexibilité et une simplicité remarquables pour l'échange de données, en permettant une gestion fluide des communications, même sur des réseaux instables.

Dans le cadre d'applications impliquant des ESP32, le MQTT facilite la mise en place d'un réseau interconnecté, où les microcontrôleurs peuvent envoyer et recevoir des informations en temps réel avec une faible latence. Que ce soit pour de la domotique, des capteurs IoT, ou d'autres projets connectés, il s'agit d'un protocole puissant et arrangeant qui simplifie grandement l'intégration et l'interopérabilité entre des appareils variés

Användarlicens