Table des matières:

Comment utiliser MQTT avec le Raspberry Pi et l'ESP8266 : 8 étapes (avec photos)
Comment utiliser MQTT avec le Raspberry Pi et l'ESP8266 : 8 étapes (avec photos)

Vidéo: Comment utiliser MQTT avec le Raspberry Pi et l'ESP8266 : 8 étapes (avec photos)

Vidéo: Comment utiliser MQTT avec le Raspberry Pi et l'ESP8266 : 8 étapes (avec photos)
Vidéo: Internet des Objets-Partie 1: avec MQTT,Node-RED,Raspberry,Arduino,ESP8266 2024, Juin
Anonim
Comment utiliser MQTT avec le Raspberry Pi et l'ESP8266
Comment utiliser MQTT avec le Raspberry Pi et l'ESP8266

Dans ce Instructable, je vais expliquer ce qu'est le protocole MQTT et comment il est utilisé pour communiquer entre les appareils. Ensuite, à titre de démonstration pratique, je vais vous montrer comment configurer un système simple à deux clients, où un module ESP8266 enverra un message à un programme Python lorsqu'un bouton est enfoncé. Plus précisément, j'utilise un module Adafruit HUZZAH pour ce projet, un Raspberry Pi et un ordinateur de bureau. Le Raspberry Pi agira en tant que courtier MQTT et le client Python sera exécuté à partir d'un ordinateur de bureau séparé (facultatif, car cela pourrait être exécuté sur le Raspberry Pi).

Pour suivre ce Instructable, vous devrez avoir des connaissances de base en électronique et savoir comment utiliser le logiciel Arduino. Vous devez également être familiarisé avec l'utilisation d'une interface en ligne de commande (pour le Raspberry Pi). Espérons qu'une fois que vous aurez acquis la connaissance de ce qu'est MQTT et comment l'utiliser dans un scénario de base, vous serez en mesure de créer vos propres projets IoT !

Pièces requises

  • 1 x Raspberry Pi, connecté à un réseau local (exécutant Jessie)
  • 1 module ESP8266 (Adafruit HUZZAH)
  • 1 x planche à pain
  • 3 x fils de connexion (mâle à mâle)
  • 1 x bouton poussoir
  • 1 x résistance 10k Ohm (code couleur Marron-Noir-Orange)

J'ai créé ce Instructable, car MQTT m'a toujours intéressé en tant que protocole et il existe de nombreuses façons différentes de l'utiliser. Cependant, je n'arrivais pas à comprendre comment coder les appareils pour l'utiliser. C'était parce que je ne savais/comprenais pas ce qui se passait réellement pour prendre mon "Hello, World!" à partir de l'appareil A et l'envoyer à l'appareil B. Par conséquent, j'ai décidé d'écrire ce Instructable pour (espérons-le) vous apprendre comment cela fonctionne, et également pour renforcer ma propre compréhension de celui-ci !

Étape 1: Qu'est-ce que MQTT ?

Qu'est-ce que MQTT ?
Qu'est-ce que MQTT ?

MQTT, ou MQ Telemetry Transport, est un protocole de messagerie qui permet à plusieurs appareils de communiquer entre eux. Actuellement, il s'agit d'un protocole populaire pour l'Internet des objets, bien qu'il ait été utilisé à d'autres fins - par exemple, Facebook Messenger. Fait intéressant, MQTT a été inventé en 1999 - ce qui signifie qu'il est aussi vieux que moi !

MQTT est basé sur l'idée que les appareils peuvent publier ou s'abonner à des sujets. Ainsi, par exemple. Si l'appareil n°1 a enregistré la température de l'un de ses capteurs, il peut publier un message contenant la valeur de température qu'il a enregistrée dans un sujet (par exemple, « Température »). Ce message est envoyé à un courtier MQTT, que vous pouvez considérer comme un commutateur/routeur sur un réseau local. Une fois que le courtier MQTT a reçu le message, il l'enverra à tous les appareils (dans ce cas, l'appareil #2) qui sont abonnés au même sujet.

Dans ce projet, nous publierons sur un sujet à l'aide d'un ESP8266 et créerons un script Python qui s'abonnera à ce même sujet, via un Raspberry Pi qui agira en tant que courtier MQTT. L'avantage de MQTT est qu'il est léger, il est donc parfait pour fonctionner sur de petits microcontrôleurs tels qu'un ESP8266, mais il est également largement disponible - nous pouvons donc également l'exécuter sur un script Python.

Espérons qu'à la fin de ce projet, vous comprendrez ce qu'est MQTT et comment l'utiliser pour vos propres projets à l'avenir.

Étape 2: Installation du courtier MQTT sur le Raspberry Pi

Installation du courtier MQTT sur le Raspberry Pi
Installation du courtier MQTT sur le Raspberry Pi
Installation du courtier MQTT sur le Raspberry Pi
Installation du courtier MQTT sur le Raspberry Pi
Installation du courtier MQTT sur le Raspberry Pi
Installation du courtier MQTT sur le Raspberry Pi

Pour configurer notre système MQTT, nous avons besoin d'un courtier, comme expliqué à l'étape précédente. Pour le Raspberry Pi, nous utiliserons le broker MQTT " Mosquitto ". Avant d'installer cela, il est toujours préférable de mettre à jour notre Raspberry Pi.

sudo apt-get mise à jour

sudo apt-get mise à niveau

Une fois cela fait, installez mosquitto puis les packages mosquitto-clients.

sudo apt-get install mosquitto -y

sudo apt-get install mosquitto-clients -y

Lorsque vous aurez terminé d'installer ces deux packages, nous devrons configurer le courtier. Le fichier de configuration du courtier mosquitto se trouve dans /etc/mosquitto/mosquitto.conf, alors ouvrez-le avec votre éditeur de texte préféré. Si vous n'avez pas d'éditeur de texte préféré ou si vous ne savez pas utiliser l'un des éditeurs de ligne de commande, j'utiliserai nano pour que vous puissiez suivre:

sudo nano /etc/mosquitto/mosquitto.conf

Au bas de ce fichier, vous devriez voir la ligne:

include_dir /etc/mosquitto/conf.d

Supprimez cette ligne. Ajoutez les lignes suivantes au bas du fichier.

allow_anonymous faux

password_file /etc/mosquitto/pwfile écouteur 1883

En tapant ces lignes, nous avons dit à mosquitto que nous ne voulons pas que quiconque se connecte à notre courtier qui ne fournisse pas un nom d'utilisateur et un mot de passe valides (nous allons les définir dans une seconde) et que nous voulons que mosquitto écouter les messages sur le numéro de port 1883.

Si vous ne voulez pas que le courtier exige un nom d'utilisateur et un mot de passe, n'incluez pas les deux premières lignes que nous avons ajoutées (c'est-à-dire allow_anonymous… et password_file…). Si vous l'avez fait, passez au redémarrage du Raspberry Pi.

Maintenant, fermez (et enregistrez) ce fichier. Si vous suivez l'exemple nano, appuyez sur CTRL+X et tapez Y lorsque vous y êtes invité.

Parce que nous venons de dire à mosquitto que les utilisateurs essayant d'utiliser le courtier MQTT doivent être authentifiés, nous devons maintenant indiquer à mosquitto quel est le nom d'utilisateur et le mot de passe ! Alors, tapez la commande suivante - en remplaçant le nom d'utilisateur par le nom d'utilisateur que vous souhaitez - puis entrez le mot de passe que vous souhaitez lorsque vous y êtes invité (Remarque: si, lors de la modification du fichier de configuration, vous avez spécifié un autre chemin password_file, remplacez le chemin ci-dessous par le celui que vous avez utilisé).

sudo mosquitto_passwd -c /etc/mosquitto/pwfile nom d'utilisateur

Comme nous venons de modifier le fichier de configuration de moustique, nous devons redémarrer le Raspberry Pi.

redémarrage sudo

Une fois le redémarrage du Raspberry Pi terminé, vous devriez avoir un courtier MQTT entièrement fonctionnel ! Ensuite, nous allons essayer d'interagir avec lui, en utilisant un certain nombre de dispositifs/méthodes différents !

Étape 3: Tester le courtier

Tester le courtier
Tester le courtier

Une fois que vous avez installé Mosquitto sur le Raspberry Pi, vous pouvez lui faire un test rapide - juste pour vous assurer que tout fonctionne correctement. À cette fin, il existe deux commandes que nous pouvons utiliser sur la ligne de commande. mosquitto_pub et mosquitto_sub. Dans cette étape, je vais vous guider dans l'utilisation de chacun d'eux pour tester notre courtier.

Afin de tester le courtier, vous devrez ouvrir deux fenêtres de ligne de commande. Si vous utilisez Putty ou un autre client SSH, c'est aussi simple que d'ouvrir une autre fenêtre SSH et de vous connecter comme d'habitude. Si vous accédez à votre Pi depuis un terminal UNIX, c'est exactement la même chose. Si vous utilisez directement le Raspberry Pi, vous devrez ouvrir deux fenêtres de terminal en mode GUI (la commande startx peut être utilisée pour démarrer l'interface graphique).

Maintenant que vous avez ouvert deux fenêtres, nous pouvons commencer les tests. Dans l'un des deux terminaux, tapez la commande suivante, en remplaçant le nom d'utilisateur et le mot de passe par ceux que vous avez configurés à l'étape précédente.

mosquitto_sub -d -u nom d'utilisateur -P mot de passe -t test

Si vous avez décidé de ne pas définir de nom d'utilisateur et de mot de passe à l'étape précédente, ignorez désormais les indicateurs -u et -P dans les commandes. Ainsi, à titre d'exemple, la commande mosquitto_sub serait désormais:

mosquitto_sub -d -t test

La commande mosquitto_sub s'abonnera à un sujet et affichera tous les messages envoyés au sujet spécifié dans la fenêtre du terminal. Ici, -d signifie mode de débogage, donc tous les messages et activités seront affichés à l'écran. -u et -P devraient être explicites. Enfin, -t est le nom du sujet auquel nous voulons nous abonner - dans ce cas, "test".

Ensuite, dans l'autre fenêtre de terminal, nous allons essayer de publier un message dans le sujet "test". Tapez ce qui suit, en vous souvenant à nouveau de changer le nom d'utilisateur et le mot de passe:

mosquitto_pub -d -u nom d'utilisateur -P mot de passe -t test -m "Hello, World!"

Lorsque vous appuyez sur Entrée, vous devriez voir votre message "Hello, World!" apparaissent dans la première fenêtre de terminal que nous avons utilisée (pour s'abonner). Si tel est le cas, vous êtes prêt à commencer à travailler sur l'ESP8266 !

Étape 4: Configuration de l'ESP8266 (Adafruit HUZZAH)

Configuration de l'ESP8266 (Adafruit HUZZAH)
Configuration de l'ESP8266 (Adafruit HUZZAH)
Configuration de l'ESP8266 (Adafruit HUZZAH)
Configuration de l'ESP8266 (Adafruit HUZZAH)
Configuration de l'ESP8266 (Adafruit HUZZAH)
Configuration de l'ESP8266 (Adafruit HUZZAH)
Configuration de l'ESP8266 (Adafruit HUZZAH)
Configuration de l'ESP8266 (Adafruit HUZZAH)

Cette étape est spécifique à l'Adafruit HUZZAH (car c'est ce que j'utilise pour terminer ce projet). Si vous utilisez un autre appareil Arduino / ESP8266, vous pouvez ignorer cette étape. Cependant, je vous conseillerais de le lire par étapes, juste au cas où il y aurait des informations ici qui pourraient vous concerner.

Pour ce projet, je vais programmer le HUZZAH avec le logiciel Arduino. Donc, si vous ne l'avez pas déjà fait, assurez-vous d'installer le logiciel Arduino (plus récent que 1.6.4). Vous pouvez le télécharger ici.

Une fois que vous avez installé le logiciel Arduino, ouvrez-le et accédez à Fichier-> Préférences. Ici, vous devriez voir (près du bas de la fenêtre) une zone de texte avec le libellé: « URLs supplémentaires du gestionnaire de cartes ». Dans cette zone de texte, copiez et collez le lien suivant:

arduino.esp8266.com/stable/package_esp8266com_index.json

Cliquez sur OK pour enregistrer vos modifications. Ouvrez maintenant le gestionnaire de carte (Outils-> Carte-> Gestionnaire de carte) et recherchez ESP8266. Installez le package communautaire esp8266 par ESP8266. Redémarrez le logiciel Arduino.

Maintenant, avant de pouvoir programmer la carte, nous devons sélectionner quelques options différentes. Dans l'option de menu Outils, sélectionnez Adafruit HUZZAH ESP8266 pour la carte, 80 MHz pour la fréquence du processeur (vous pouvez utiliser 160 MHz si vous souhaitez l'overclocker, mais pour l'instant je vais utiliser 80 MHz), 4M (3M SPIFFS) pour la taille du flash et 115200 pour la vitesse de téléchargement. Assurez-vous également de sélectionner le port COM que vous utilisez (cela dépendra de votre configuration).

Avant de pouvoir télécharger un code, vous devez vous assurer que le HUZZAH est en mode bootloader. Pour activer cela, maintenez enfoncé le bouton de la carte marqué GPIO0, et pendant que cela est maintenu, maintenez également le bouton de réinitialisation enfoncé. Ensuite, relâchez le bouton Reset, puis GPIO0. Si vous avez fait cela correctement, la LED rouge qui s'est allumée lorsque vous avez appuyé sur GPIO0 devrait maintenant être faiblement allumée.

Pour télécharger du code sur le microcontrôleur, assurez-vous d'abord que le HUZZAH est en mode bootloader, puis cliquez simplement sur le bouton de téléchargement dans l'IDE Arduino.

Si vous rencontrez des problèmes pour configurer le HUZZAH, vous trouverez de plus amples informations dans le didacticiel d'Adafruit.

Étape 5: Programmation de l'ESP8266

Programmation de l'ESP8266
Programmation de l'ESP8266

Nous allons maintenant commencer à programmer l'ESP8266, mais avant de pouvoir commencer, vous devrez installer les bibliothèques suivantes dans le gestionnaire de bibliothèque Arduino (Esquisse->Inclure les bibliothèques->Gérer les bibliothèques)

  • Rebond2
  • PubSubClient

Une fois que vous avez installé ces bibliothèques, vous pourrez exécuter le code que j'ai inclus dans ce Instructable (MQTT_Publish.zip). Je me suis assuré de le commenter afin que vous puissiez comprendre ce que fait chaque section, et cela devrait vous permettre, espérons-le, de l'adapter à vos besoins.

Pensez à modifier les constantes en haut du code pour que votre ESP8266 puisse se connecter à votre réseau WiFi et à votre Broker MQTT (le Raspberry Pi).

Si vous avez décidé de ne pas définir de nom d'utilisateur et de mot de passe pour le courtier MQTT, téléchargez plutôt le fichier MQTT_PublishNoPassword.zip.

Étape 6: Installation du client Python (paho-mqtt)

Installation du client Python (paho-mqtt)
Installation du client Python (paho-mqtt)

Heureusement, cette étape est très simple ! Pour installer le client python mosquitto, il vous suffit de taper ce qui suit dans la ligne de commande (Linux/Mac) ou même l'invite de commande (Windows).

pip installer paho-mqtt

Remarque: l'invite de commande Windows peut avoir un problème lors de l'exécution de la commande pip si vous n'avez pas spécifié que vous vouliez installer pip et ajouter python à votre variable PATH lors de l'installation de Python. Il existe plusieurs façons de résoudre ce problème, mais je pense que la simple réinstallation de Python est le moyen le plus simple. En cas de doute, donnez-lui un google !

Étape 7: Client Python - Abonnement

Client Python - Abonnement
Client Python - Abonnement

Dans cette étape, nous allons configurer le script Python (soit sur le Raspberry Pi lui-même, soit sur un autre ordinateur connecté au réseau) pour gérer tous les messages envoyés (publiés) par l'ESP8266 au sujet MQTT.

J'ai inclus le code python ci-dessous (PythonMQTT_Subscribe.py), qui a été commenté pour vous aider à comprendre ce qui se passe, mais j'expliquerai également certaines des principales fonctionnalités ici.

Si vous n'avez pas défini de nom d'utilisateur et de mot de passe pour la connexion MQTT plus tôt, téléchargez plutôt le fichier PythonMQTT_SubscribeNoPassword.py.

Étape 8: Communication entre les appareils ESP8266

Communication entre les appareils ESP8266
Communication entre les appareils ESP8266

Si vous souhaitez configurer un réseau IoT, par exemple, vous souhaiterez peut-être communiquer entre les appareils ESP8266. Heureusement, ce n'est pas beaucoup plus complexe que le code que nous avons écrit auparavant, cependant, il y a quelques changements notables.

Pour qu'un ESP envoie des données à un autre, le premier ESP devra publier sur le sujet, et le second ESP devra s'abonner à ce sujet. Cette configuration permettra une conversation à sens unique - ESP(1) à ESP(2). Si nous voulons que ESP(2) réponde à ESP(1), nous pouvons créer un nouveau sujet, auquel ESP(2) publiera, et ESP(1) s'abonnera. Heureusement, nous pouvons avoir plusieurs abonnés sur le même sujet, donc si vous voulez envoyer des données à plusieurs systèmes, vous n'aurez besoin que d'un seul sujet (auquel ils s'abonnent tous, à l'exception de l'appareil qui envoie les données, car cela publier).

Si vous avez besoin d'aide pour déterminer ce que chaque appareil doit faire, considérez le système comme une pièce de personnes. Si ESP(1) publie, vous pouvez imaginer cet appareil comme un « haut-parleur », et tous les appareils qui s'abonnent au sujet sont des « auditeurs » dans cet exemple.

J'ai inclus un exemple de code ci-dessous, qui montre comment un ESP8266 peut s'abonner à un sujet et écouter certains messages - 1 et 0. Si 1 est reçu, la LED intégrée (pour le HUZZAH - GPIO 0) est allumée. Si 0 est reçu, cette LED est éteinte.

Si vous souhaitez traiter des données plus complexes, cela doit être fait dans la fonction ReceivedMessage (voir code).

Pour vos propres projets, si vous devez à la fois envoyer et recevoir des données, vous pouvez incorporer la fonction de publication de l'exemple précédent dans le code inclus dans cette étape. Cela devrait être géré dans la fonction principale Arduino loop().

N'oubliez pas de modifier les variables en haut du code en fonction de votre réseau !

Conseillé: