Ce billet montre comment créer un serveur(broker) MQTT et des clients MQTT. Ces clients pouvant être, par exemple, des micro-contrôleurs ESP32.

Rappelons les principes du protocole MQTT à l’aide Chat GPT:

Dans le monde interconnecté d’aujourd’hui, la communication entre les appareils est essentielle pour permettre le fonctionnement harmonieux des systèmes intelligents. L’un des protocoles de communication les plus utilisés pour faciliter cette interconnexion est le protocole MQTT (Message Queuing Telemetry Transport).

Qu’est-ce que le protocole MQTT ?

MQTT est un protocole de messagerie à publication-souscription, léger et largement utilisé dans l’Internet des Objets (IoT) et d’autres applications où une communication à faible bande passante et une empreinte mémoire réduite sont nécessaires. Conçu par IBM en 1999, MQTT est désormais un standard ouvert de l’OASIS (Organization for the Advancement of Structured Information Standards).

Le fonctionnement de MQTT repose sur le principe de publication et de souscription. Dans ce modèle, les appareils se connectent à un courtier ou serveur (broker) MQTT central où ils peuvent publier des messages sur des sujets (topics) spécifiques et/ou s’abonner à des sujets pour recevoir des messages pertinents. Cela permet une communication bidirectionnelle asynchrone efficace entre les appareils, même dans des environnements où la connectivité peut être intermittente ou peu fiable.

Avantages de MQTT :

  1. Légèreté : MQTT est conçu pour être léger en termes de bande passante et de ressources système, ce qui le rend adapté aux appareils à faible puissance et à des réseaux avec des contraintes de bande passante.
  2. Fiabilité : Grâce à son mode de fonctionnement asynchrone et à sa gestion intégrée des pertes de connexion, MQTT garantit la fiabilité de la livraison des messages même dans des conditions réseau instables.
  3. Évolutivité : MQTT prend en charge des topologies de réseau évolutives, permettant à des milliers voire des millions d’appareils de se connecter au même courtier MQTT.
  4. Interopérabilité : Étant un standard ouvert, MQTT est pris en charge par de nombreux langages de programmation et plateformes, ce qui facilite son adoption et son intégration dans divers environnements logiciels.

L’architecture d’un réseau MQTT peut se représenter selon le schéma suivant:

Notons qu’un client peut être simultanément émetteur (Publish) et récepteur (Subscribe) pour un nombre quelconque de sujets (Topics).

A l’aide Chat GPT, précisons la notion de Topic:

Dans le contexte du protocole MQTT, un « topic » (sujet en français) est un moyen de catégoriser les messages échangés entre les appareils connectés au broker MQTT. Un topic est simplement une chaîne de caractères qui identifie la destination ou la source d’un message. Il est utilisé pour publier des messages à destination de plusieurs clients ou pour s’abonner à des messages provenant de ces clients.

Les topics sont organisés hiérarchiquement, de manière similaire à la structure d’un arbre. Chaque niveau de la hiérarchie est séparé par un caractère de barre oblique (/). Par exemple, un topic pourrait ressembler à ceci : « maison/chambre1/temperature ».

Lorsqu’un client publie un message sur un topic spécifique, tous les autres clients qui se sont abonnés à ce topic recevront ce message. De même, un client peut s’abonner à plusieurs topics différents pour recevoir les messages qui les concernent.

Les topics MQTT offrent une flexibilité considérable dans la gestion des communications entre les appareils connectés, permettant aux développeurs de concevoir des systèmes de messagerie efficaces et flexibles pour une variété d’applications IoT et distribuées.

Le serveur (Broker)

Le protocole MQTT n’a besoin que de peu de ressources pour être implanté. Par exemple, un Raspberry convient très bien quelque soit le modèle. A titre indicatif, les tests de cet article ont été réalisés en utilisant un « vieux » raspberry modèle 1 auquel un dongle wifi a été ajouté sur un port USB:

Le Raspberry Pi modèle 1, souvent appelé Raspberry Pi 1 Model B, était le tout premier modèle de la série Raspberry Pi. Voici ses principales caractéristiques :

  1. Processeur : Il est équipé d’un processeur ARM1176JZF-S cadencé à 700 MHz, qui est un processeur mono-core.
  2. Mémoire : Il dispose de 512 Mo de mémoire RAM.
  3. Ports USB : Il possède 2 ports USB 2.0.
  4. Connectivité : Il est doté d’un port Ethernet 10/100 pour la connexion réseau, mais il n’a pas de connectivité sans fil intégrée.

L’un des logiciels les plus populaires pour implémenter un serveur (Broker) MQTT est l’application mosquitto.

Pour l’installer il suffit d’exécuter dans un terminal les commandes suivantes:

Shell

Vérifier que l’installation est correcte à l’aide de la commande systemctl, on a comme résultat quelque chose du genre:

Shell

L’installation standard de mosquitto ne permet d’avoir comme client que le matériel où est installé le serveur et son accès n’est pas protégé.

Sécurisation du serveur (Broker)

Une méthode pour sécuriser le serveur est de définir le ou les utilisateurs pouvant accéder à ce serveur en définissant pour un utilisateur son nom et son mot de passe. Cela peut être réalisé par la commande mosquitto_passwd :

Shell

Cela met à jour le fichier des utilisateurs de mosquitto situé à

/etc/mosquitto/passwd

Pour pouvoir accéder au serveur sur le réseau local, il faut modifier le fichier de configuration du serveur et redémarrer le serveur. Ce fichier de configuration est localisé à

/etc/mosquitto/mosquitto.conf

Pour le modifier:

Shell
Shell

Redémarrer le serveur :

Shell

MQTT Explorer

Pour faire les tests, il est conseillé d’installer l’application MQTT Explorer disponible sous Windows, Mac, et Linux:

Client MQTT python sur ESP32

En MicroPython, la bibliothèque umqtt.simple permet de définir facilement des clients MQTT. Ce module est disponible pour les contrôleurs ESP32.

Exemple de client envoyant des messages au broker

Python

Exemple de client attendant de recevoir des messages:

Python