- Qu'est-ce que le protocole MQTT?
- Comment fonctionne MQTT?
- Le courtier Eclipse Mosquitto
- Composants requis
- Circuit de test Eclipse MQTT - Schéma
- Programmation de l'ESP8266 pour établir la communication avec le courtier
- Test de MQTT avec ESP8266 en utilisant Arduino
Au cours des dernières années, les appareils IoT (Internet of Things) sont devenus une partie indiscernable de notre vie quotidienne. Des maisons intelligentes, des ampoules intelligentes aux appareils intelligents; les créateurs et les développeurs intègrent cette technologie pour créer un réseau d'appareils connectés qui rend notre vie quotidienne un peu plus excitante. Tout cela a été rendu possible grâce à la facilité de communication. Il existe de nombreuses façons de communiquer entre les appareils, mais dans les produits commerciaux et de loisirs, un protocole unique couramment utilisé est Message Queuing Telemetry Transport (MQTT). Nous avons précédemment construit une radio FM à commande vocale utilisant Arduino et Google Assistant qui utilise MQTT pour communiquer avec la carte NodeMCU. Vérifiez-le si cela vous semble intéressant.
Dans ce projet, nous utiliserons un courtier Eclipse MQTT gratuit et populaire et apprendrons comment connecter un appareil IoT (dans notre cas, c'est un module NodeMCU) à un courtier MQTT et transférer des données entre le courtier MQTT et NodeMCU.
Qu'est-ce que le protocole MQTT?
Avant d'aller plus loin, il est préférable d'avoir une idée claire du protocole MQTT (Message Queuing Telemetry Transport). Il s'agit d'un protocole de messagerie léger qui utilise la méthode de publication / abonnement et traduit les messages entre plusieurs appareils. En utilisant le protocole MQTT, nous pouvons également envoyer / recevoir des données et contrôler divers périphériques de sortie, comme lire les données des capteurs, etc. Il est développé sur TCP, c'est pourquoi il est plus rapide que des protocoles similaires comme HTTP. En dehors de cela, il présente de nombreux autres avantages par rapport aux autres protocoles, comme son très léger, donc il ne consomme pas de mémoire excessive, il peut fonctionner avec très moins de bande passante réseau, en plus de cela, il dispose d'un protocole de sécurité robuste intégré. Ces caractéristiques le rendent adapté à de nombreuses applications.
Comment fonctionne MQTT?
Afin de comprendre le fonctionnement du protocole MQTT, nous avons juste besoin de comprendre trois choses de base; le diagramme ci-dessus le montre. Aussi, nous l'avons expliqué ci-dessous dans l'article.
Client MQTT:
Un client MQTT est tout appareil (il peut s'agir d'un microcontrôleur ou d'un serveur) qui exécute des fonctions MQTT et communique avec un serveur central, appelé « courtier ». Le courtier gère la communication de données entre les clients connectés.
Éditeur MQTT:
Lorsqu'un client souhaite envoyer des informations, le client est appelé «éditeur». L'éditeur publiera les informations sur un sujet particulier. « Topic » est un chemin où nous pouvons publier / souscrire des messages. Le courtier envoie ensuite les informations publiées par l'utilisateur aux clients (également appelés abonnés) qui se sont abonnés à ce sujet spécifique.
Abonné MQTT:
L' abonné MQTT s'abonne à des rubriques sur un courtier MQTT pour lire les messages envoyés par le courtier.
Le courtier Eclipse Mosquitto
Eclipse Mosquitto est un courtier MQTT open source, léger et adapté à une utilisation sur des appareils IoT pour la communication. Le protocole MQTT fournit une méthode légère de transfert d'informations à l'aide d'un modèle de publication / abonnement. Si vous souhaitez en savoir plus sur le sujet, vous pouvez visiter le site officiel sur les moustiques.
Configuration du courtier Eclipse Mosquitto:
Afin d'établir la communication avec le courtier, nous devons d'abord le configurer. Dans ce projet, une application Android est utilisée pour publier et souscrire aux informations auprès du courtier. Les étapes suivantes vous donneront une meilleure idée du processus de configuration.
Étape 1:
Tout d'abord, téléchargez toute application «client MQTT» disponible dans le Google Play Store / App Store et installez-la. Dans ce projet, une application nommée «client MQTT» est utilisée, qui ressemble à l'image ci-dessous.
Étape 2:
Cliquez sur le signe «+» pour lister les options supplémentaires dans l'application, où nous allons ajouter un nouveau courtier. Lorsque vous cliquez sur le bouton, un nouvel écran apparaît comme indiqué ci-dessous.
Étape 3:
Par la suite, les coordonnées du courtier doivent être remplies dans le champ requis. Tout d'abord, cliquez sur l'option «Activé» affichée dans l'application. Dans ce projet, le courtier Eclipse MQTT est utilisé, les détails à renseigner sont donnés ci-dessous:
Pseudo: Donnez un nom de votre préférence
Hôte: mqtt.eclipse.org
Port: 1883
ID client: donnez un identifiant de votre préférence
Les détails ci-dessus doivent être remplis dans leurs champs respectifs. Tous les autres champs ne sont pas nécessaires et peuvent être laissés vides. Après avoir réussi, cliquez sur le bouton Enregistrer pour enregistrer les détails du courtier.
Une fois terminé, le processus de configuration de l'application Android est terminé et nous pouvons maintenant passer au côté matériel des choses.
Composants requis
Une liste complète des pièces requises est décrite ci-dessous. Comme ce circuit est simple, vous pouvez trouver toutes les pièces nécessaires dans votre magasin de bricolage local.
- NodeMCU
- LED
- Planche à pain
- Fils de connexion
- Câble de programmation
Circuit de test Eclipse MQTT - Schéma
Le schéma de principe du projet Basic MQTT est présenté ci-dessous:
Programmation de l'ESP8266 pour établir la communication avec le courtier
Un simple code Arduino prend en charge toutes les communications nécessaires entre le courtier MQTT et le NodeMCU. Dans cette section, nous allons apprendre en détail comment cette fonctionnalité fonctionne.
Configurez l'IDE Arduino et téléchargez le code:
Si vous téléchargez le code sur le NodeMCU pour la première fois, vous devez d'abord configurer l' IDE Arduino. Pour ce faire, suivez simplement les instructions simples ci-dessous.
Tout d'abord, ouvrez l'IDE Arduino, puis allez dans Fichier -> Préférences -> Paramètres .
Ensuite, copiez l'URL ci-dessous et collez-la dans le champ " URL supplémentaire de Board Manager ", puis cliquez sur "OK". Vous pouvez consulter l'image ci-dessous pour savoir comment nous avons fait cela.
Lien:
Ensuite, allez dans Outils> Tableau> Gestionnaire de tableaux . Dans la fenêtre Board's Manager, tapez ESP 8266 dans la zone de recherche et appuyez sur Entrée. Sélectionnez ensuite la dernière version dans la liste déroulante et cliquez sur installer. L'image ci-dessous vous donnera une idée claire.
Enfin, une fois l'installation terminée, allez dans Outils -> Carte -> et sélectionnez NodeMCU 1.0 (Module ESP-12E). Vous pouvez maintenant programmer NodeMCU avec Arduino IDE. Comme nous avons terminé la configuration de l'IDE Arduino, nous pouvons maintenant télécharger le code complet. Mais d'abord, lisez l'explication rapide de tout le code.
Tout d'abord, nous avons inclus «ESP8266WiFi.h» pour utiliser ESP8266 et «PubSubClient.h» pour MQTT.
Vous pouvez trouver la bibliothèque ESP8266 prédéfinie dans la bibliothèque Arduino, mais vous devez télécharger la bibliothèque PubSubClient à partir de son référentiel GitHub associé.
#comprendre
Ensuite, définissez les informations d'identification réseau telles que votre nom d'utilisateur et votre mot de passe Wi-Fi. Remplacez vos informations d'identification à la place de «admin» et «12345678» respectivement.
const char * ssid = "admin"; const char * password = "12345678";
Ensuite, nous devons configurer le serveur MQTT. Nous avons utilisé le serveur Eclipse MQTT pour ce projet, c'est pourquoi l'adresse du serveur est donnée comme «mqtt.eclipse.org». Mais si vous prévoyez d'utiliser un autre serveur comme Mosquitto, Adafruit, vous pouvez le remplacer par votre adresse de serveur et votre numéro de port spécifiques.
const char * mqtt_server = "mqtt.eclipse.org"; const int mqtt_port = 1883;
Ensuite, les instances sont créées pour la classe WiFiClient et PubSubClient , qui seront utilisées tout au long du programme.
WiFiClient espClient; Client PubSubClient (espClient);
Dans la section setup () , nous appelons d'abord WiFi.begin () , l'appel de cette méthode connectera l'ESP à votre HotSpot préféré.
WiFi.begin (ssid, mot de passe);
Ensuite, nous vérifions une connexion réseau réussie à l'aide de la méthode WiFi.status () . Après une connexion réussie, un message est imprimé sur Serial Monitor avec le SSID du réseau connecté.
while (WiFi.status ()! = WL_CONNECTED) {délai (500); Serial.println ("Connexion au WiFi.."); } Serial.print ("Connecté au WiFi:"); Serial.println (WiFi.SSID ());
Maintenant, nous devons créer un courtier. Pour cela, nous avons utilisé la méthode setServer ; cette méthode prend deux arguments que nous avons prédéfinis précédemment. Maintenant, si nous voulons recevoir des messages du serveur, nous devons créer une fonction de rappel. Pour cela, nous utilisons la méthode setCallback (callback) .
client.setServer (serveur_mqtt, port_mqtt); client.setCallback (MQTTcallback);
Maintenant, nous avons utilisé la fonction connect (clientID) pour nous connecter au client ESP8266. Ici, clientID est le nom du client et doit être unique. S'il est connecté, un message de réussite peut être affiché à l'intérieur du moniteur série.
if (client.connect ("ESP8266")) {Serial.println ("connecté"); } else {Serial.print ("a échoué avec l'état") Serial.println (client.state ()); retard (2000); }
Ensuite, nous appelons client.subscribe () , une fonction MQTT intégrée, qui est utilisée pour s'abonner à un sujet particulier. Pour ce projet, nous avons utilisé « esp / test » comme nom d'abonné.
client.subscribe ("esp / test");
Désormais, la fonction MQTTcallback est appelée pour vérifier si des informations mises à jour sont disponibles ou non. Si de nouvelles données sont disponibles, cette fonction gère les données reçues et imprime un message sur le moniteur série avec le message d'origine et le nom de la rubrique où le message est reçu.
Ensuite, nous convertissons les messages en une chaîne, afin qu'elle puisse être comparée et vérifiée pour toute action de déclenchement. Dans ce projet, une LED est allumée / éteinte à l'aide des commandes MQTT, comme indiqué dans le code ci-dessous.
for (int i = 0; i <length; i ++) {message = message + (char) payload; } Serial.print (message); if (message == "on") {digitalWrite (LED, HIGH); }
Enfin, publier les informations sur le sujet. La fonction client.publish () est utilisée. Dans ce projet, un état du bouton-poussoir est vérifié, si le bouton est enfoncé, puis un message est publié dans une rubrique « esp / test1 » comme indiqué ci-dessous.
if (digitalRead (D1) == 0)) {client.publish ("esp / test1", "Bonjour de ESP8266"); } autre; client.loop ();
Test de MQTT avec ESP8266 en utilisant Arduino
Pour nos derniers tests, nous allons utiliser l'application Android, que nous avons configurée précédemment.
Ouvrez l'application client MQTT et assurez-vous que votre mobile dispose d'une connexion Internet active. En outre, le point d'accès auquel le NodeMCU est connecté doit avoir une connexion Internet active. Une fois que tout est connecté à Internet, nous allons envoyer une chaîne «Hello from ESP8266» depuis le module ESP, qui sera reflétée dans l'application Android, et nous recevrons une notification. Ensuite, nous enverrons une chaîne de l'application Android, qui allumera une LED connectée à la carte ESP8266 Node MCU.
Étape 1: (Abonnez-vous au sujet):
Cliquez sur l'option MQTT enregistré sur l'application, que nous avons configurée précédemment. Il fera apparaître un écran, où il est invité à «S'abonner à un sujet». Nous avons précédemment configuré le sujet comme « esp / test1 ». Ainsi, dans l'application Android, nous écrirons « esp / test1 ». Cliquez sur S'abonner, cela vous présentera un écran comme ci-dessous, où il sera écrit comme «Aucun message reçu» du sujet particulier.
Maintenant, cliquez sur le bouton «Connecté» qui est connecté au nodeMCU. Maintenant, selon notre code, un message " Bonjour de ESP8266 " sera publié dans le sujet et il y aura une notification à l'écran avec le message reçu comme indiqué ci-dessous.
Étape 2: publier dans le sujet:
Maintenant, pour publier dans le sujet, cliquez sur le bouton FLÈCHE HAUT de l'application, et cela ouvrira un écran comme indiqué ci-dessous.
Maintenant, dans le champ Sujet, écrivez « esp / test » et dans le champ message, écrivez « on » ou « off » pour allumer et éteindre la LED respectivement. Par exemple, si «on» est publié dans le sujet, alors le voyant sera allumé et si «off» est publié sur le sujet, alors le voyant s'éteindra.
J'espère que vous avez aimé l'article et appris quelque chose de nouveau. Si vous avez des questions concernant cet article, n'hésitez pas à commenter ci-dessous ou vous pouvez utiliser notre forum à la place.