Le MQTT est un protocole qui envoie spécifiquement des données à partir de dispositifs de l’Internet des objets et est pris en charge par la plupart des microcontrôleurs et des systèmes. Pour utiliser la communication MQTT Raspberry Pi, peu de choses sont nécessaires, c’est pourquoi ce type de transmission est très intéressant. De plus, il est très facile à utiliser.
Dans ce tutoriel, nous installons un courtier Raspberry Pi MQTT, à la suite duquel nous recevons et envoyons des données. Nous pouvons soit utiliser plusieurs Raspberry Pi pour les tests, soit utiliser un seul appareil.
Accessoire
Ce tutoriel fonctionne sans beaucoup de matériel supplémentaire. Cependant, vous devez soit avoir au moins un Raspberry Pi (alternativement un Modèle Zéro W), soit connecter une clé wifi à votre Raspberry Pi pour utiliser MQTT.
D’autres appareils tels qu’un ESP8266 peuvent également communiquer en utilisant le MQTT. Cela est possible avec les Raspberry Pi ainsi qu’avec d’autres appareils. Il existe également des paquets prêts à l’emploi pour le NodeMCU.
Qu’est-ce que MQTT ?
Certains peuvent se demander ce que devrait être le MQTT. Pour citer la page officielle du MQTT :
MQTT is a machine-to-machine (M2M)/“Internet of Things“ connectivity protocol. It was designed as an extremely lightweight publish/subscribe messaging transport. It is useful for connections with remote locations where a small code footprint is required and/or network bandwidth is at a premium.
Il s’agit donc d’un protocole de réseau standardisé avec lequel des messages/commandes courts peuvent être transmis. Le grand avantage est que les adaptateurs wifi intégrés (par exemple dans le Raspberry Pi ou dans le ESP8266) sont utilisés pour la connexion internet. Plus d’accessoires et de câblage complexes ne sont pas nécessaires ! Il est ainsi possible d’envoyer les données via le réseau local ou l’internet.
En détail, le transfert se compose de trois éléments différents:
- L’éditeur : envoie des messages.
- Courtier : Transmet les messages aux abonnés enregistrés.
- Abonné : Reçoit les messages par l’intermédiaire du courtier.
Serveur MQTT Raspberry Pi – Installez et testez Mosquitto
Il existe plusieurs applications qui peuvent être utilisées pour envoyer et recevoir par le biais du MQTT, mais la plus simple sur le Raspberry Pi est probablement Mosquitto. Nous allons d’abord l’installer sur le Raspberry Pi :
sudo apt-get install -y mosquitto mosquitto-clients
Après l’installation, un serveur Mosquitto est lancé automatiquement. On ouvre un abonné dans le canal « test_channel » qui attend des messages:
mosquitto_sub -h localhost -v -t test_channel
Le canal est ici comme une fréquence, sur laquelle on écoute. Par exemple, différentes données peuvent être envoyées sur différents canaux (par exemple, la température, l’humidité, la luminosité, etc.).
Afin de transférer simplement les données, on peut soit utiliser le même Raspberry Pi (ouvrir un nouveau terminal / connexion SSH), soit envoyer les données à partir d’un autre Pi. Si nous utilisons le même Raspberry Pi, l’utilisation est facilement possible. Pour cela, nous envoyons simplement un message test (en tant qu’éditeur) dans le même canal:
mosquitto_pub -h localhost -t test_channel -m "Hello Raspberry Pi"
Sinon, vous devez spécifier l’adresse IP interne (par exemple 192.168.1.5) du destinataire au lieu de « localhost ». Du côté du destinataire, le message doit apparaître soforn.
Raspberry Pi MQTT échange de données avec Python
La communication est super facile, comme nous l’avons vu. Pour que nous puissions utiliser le tout à partir de scripts, nous voulons le mettre à la disposition de Python. Pour cela, nous installons d’abord une bibliothèque via le gestionnaire de paquets Python (pour Python3, utilisez également pip3) :
sudo pip install paho-mqtt
Sinon (par exemple, si le paquet n’a pas pu être correctement installé), vous pouvez également l’installer manuellement :
git clone https://github.com/eclipse/paho.mqtt.python.git cd paho.mqtt.python python setup.py install
Nous commençons par le récepteur. Pour cela, nous créons un nouveau fichier avec le contenu :
sudo nano mqtt_subscriber.py
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 |
import paho.mqtt.client as mqtt MQTT_SERVER = "localhost" MQTT_PATH = "test_channel" # The callback for when the client receives a CONNACK response from the server. def on_connect(client, userdata, flags, rc): print("Connected with result code "+str(rc)) # Subscribing in on_connect() means that if we lose the connection and # reconnect then subscriptions will be renewed. client.subscribe(MQTT_PATH) # The callback for when a PUBLISH message is received from the server. def on_message(client, userdata, msg): print(msg.topic+" "+str(msg.payload)) # more callbacks, etc client = mqtt.Client() client.on_connect = on_connect client.on_message = on_message client.connect(MQTT_SERVER, 1883, 60) # Blocking call that processes network traffic, dispatches callbacks and # handles reconnecting. # Other loop*() functions are available that give a threaded interface and a # manual interface. client.loop_forever() |
Après avoir enregistré et fermé (CTRL + O, CTRL + X), nous exécutons le fichier :
sudo python mqtt_subscriber.py
Soit vous envoyez une commande comme d’habitude par Shell Command, soit nous créons également un expéditeur / éditeur Python.
Le code de l’éditeur ressemble à ceci (créer un nouveau fichier et l’exécuter, en gardant à l’esprit l’adresse IP correcte) :
1 2 3 4 5 6 7 |
import paho.mqtt.publish as publish MQTT_SERVER = "192.168.1.5" MQTT_PATH = "test_channel" publish.single(MQTT_PATH, "Hello World!", hostname=MQTT_SERVER) |
C’est tout ! Vous pouvez maintenant inclure les parties appropriées dans vos scripts et recevoir ou envoyer des messages MQTT d’autres Raspberry Pi. Bien sûr, cela ne se limite pas aux Raspberry Pi car les messages peuvent également provenir d’autres appareils ou être adressés à ceux-ci.
Autres moyens de communiquer avec les Raspberry Pi
Bien sûr, le MQTT est loin d’être le seul moyen d’échanger des données. Si vous avez un système avec son propre système d’exploitation, c’est le cas. Raspbian peut être établi en utilisant des connexions SSH et, par exemple, envoyer via des fichiers SCP. Cependant, les appareils doivent disposer d’une connexion réseau.
Une autre possibilité sans connexion à Internet sont les émetteurs et récepteurs radio normaux. Voici par exemple la transmission radio 433 MHz qui est très populaire car les modules sont très peu coûteux et de nombreux appareils tels que les prises radio ou les portes de garage sont compatibles avec elle. Toutefois, ce transfert est limité à 24 bits, ce qui est peu.
Il est possible de transmettre davantage de données par message via la transmission radio 2,4 GHz. Ce transfert diffère du MQTT car des modules supplémentaires sont utilisés. Cependant, il est également possible d’envoyer des commandes ou des messages à Arduinos.