- Qu'est-ce que MQTT?
- Installation de Mosquitto MQTT Broker sur Raspberry Pi
- Test du courtier Raspberry Pi Mosquitto
- Schéma
- Code et explication
MQTT est un protocole utilisé pour envoyer et recevoir des messages sur Internet. Nous avons précédemment utilisé ce protocole dans Iot Electricity meter et Raspberry Pi Alexa pour publier les données sur Internet. Dans ce tutoriel, nous en apprendrons plus sur le MQTT et les termes qui lui sont associés. Ici, nous utiliserons le Raspberry Pi comme courtier MQTT local et contrôlerons une LED connectée à NodeMCU ESP12E via le tableau de bord de l'application MQTT. Un capteur DHT11 est également connecté à NodeMCU afin que nous obtenions la lecture de la température et de l'humidité sur le tableau de bord MQTT, en utilisant à nouveau le Raspberry Pi comme courtier MQTT local.
Alors, commençons par comprendre le MQTT et les termes qui y sont liés.
Qu'est-ce que MQTT?
MQTT signifie Message Queue Telemetry Transport qui est conçu par IBM. Ce protocole est simple et léger.Il est utilisé pour envoyer et recevoir des messages sur Internet et il est conçu pour les appareils à faible bande passante. De nos jours, ce protocole est fréquemment utilisé dans les appareils IoT pour envoyer et recevoir les données des capteurs. En outre, dans les systèmes domotiques basés sur l'IoT, ce protocole peut facilement être utilisé sans utiliser beaucoup de données Internet.
Il existe quelques termes fréquemment utilisés dans MQTT:
- Abonnez-vous et publiez
- Message
- Sujet
- Courtier
1. S'abonner et publier: S'abonner signifie obtenir les données d'un autre appareil, et publier signifie envoyer les données à un autre appareil.
Lorsque device1 envoie les données à device2, il est appelé Publisher et un autre est Subscriber et vice-versa.
2. Message: Les messages sont les informations que nous envoyons et recevons. Cela peut être une donnée ou tout type de commande. Par exemple, si nous publions les données de température sur le nuage, ces données de température sont appelées Message.
3. Sujet: C'est la façon dont vous enregistrez l'intérêt pour les messages entrants ou la façon dont vous spécifiez où vous souhaitez publier le message. Les sujets sont représentés par des chaînes séparées par une barre oblique. Les données sont publiées sur les sujets à l'aide de MQTT, puis le périphérique MQTT s'abonne au sujet pour obtenir les données.
4. MQTT Broker: Cette chose est chargée de recevoir tous les messages des éditeurs, de filtrer les messages, puis de publier les messages aux abonnés qui s'y intéressent.
Lorsque ce courtier est hébergé sur le cloud, il est appelé cloud MQTT. Il existe de nombreux services MQTT basés sur le cloud comme Adafruit IO, MQTT.IO, IBM bluemix, Microsoft Azure, etc. MQTT peut également être utilisé avec le cloud Amazon AWS populaire, ce que nous avons expliqué dans le didacticiel Getting Started with Amazon AWS.
Nous pouvons créer notre propre courtier MQTT en utilisant le Raspberry Pi. Ce sera le courtier MQTT local, c'est-à-dire que vous pouvez envoyer et recevoir les données sur votre réseau local uniquement depuis n'importe où. Donc, nous allons installer ici courtier mosquitto MQTT dans Raspberry Pi pour le rendre courtier MQTT local et envoyer les données de température de l'application du tableau de bord NodeMCU à MQTT. De plus, nous contrôlerons une LED connectée à NodeMCU à l'aide du courtier.
Installation de Mosquitto MQTT Broker sur Raspberry Pi
Ouvrez le terminal dans votre Raspberry pi et tapez les commandes suivantes pour installer le courtier
sudo apt update sudo apt installer -y mosquitto mosquitto-clients
Attendez la fin de l'installation. Maintenant, pour démarrer le courtier au démarrage de raspberry pi, tapez la commande suivante
sudo systemctl activer mosquitto.service
Voilà, nous sommes tous prêts à lancer notre courtier MQTT. Pour vérifier qu'il est correctement installé, entrez la commande suivante
moustique -v
Cette commande vous donnera la version de votre courtier MQTT. Il doit être 1.4.x ou supérieur.
Test du courtier Raspberry Pi Mosquitto
1. Exécutez le courtier Mosquitto en arrière-plan à l'aide de la commande ci-dessous
moustique -d
2. Maintenant, nous allons souscrire un sujet dans exampleTopic en utilisant la commande suivante
mosquitto_sub -d -t exempleTopique
3. Maintenant, nous allons publier un message à exampleTopic
mosquitto_pub -d -t exempleTopique -m "Bonjour tout le monde!"
Vous recevrez le Hello world! Message dans le terminal d'abonné.
Maintenant, il est temps de contrôler et d'obtenir les données d'un autre appareil dans notre cas, nous utilisons l' application de tableau de bord NodeMCU et MQTT .
- Tout d'abord, nous contrôlerons une LED en envoyant une commande à l'aide de l'application.Dans ce cas, NodeMCU se comportera comme un abonné et une application comme un éditeur.
- Ensuite, ESP12E est également connecté à un capteur DHT11 et envoie cette lecture de température à l'application Mobile MQTT.Dans ce cas, le mobile sera l'abonné et NodeMCU sera l'éditeur. Et pour transmettre ces messages sur les sujets respectifs, le courtier Mosquitto MQTT est utilisé.
Schéma
Connectez le circuit comme indiqué sur le schéma. Ici, le DHT11 est utilisé pour les lectures de température, mais un capteur de température LM35 peut également être utilisé. Nous avons déjà utilisé le capteur DHT11 dans plusieurs de nos projets, y compris avec NodeMCU pour construire une station météo.
Permet de commencer à écrire le code pour le NodeMCU pour s'abonner et publier les données.
Code et explication
Ici, nous utiliserons le modèle de bibliothèque Adafruit MQTT et modifierons les éléments requis dans le code. Le même code peut être utilisé pour publier et souscrire les données au cloud Adafruit IO en modifiant simplement quelques éléments.Pour cela, téléchargez la bibliothèque Adafruit MQTT à partir de Sketch -> Inclure la bibliothèque -> Gérer les bibliothèques. Recherchez Adafruit MQTT et installez-le. Après avoir installé la bibliothèque. Aller aux exemples -> Bibliothèque Adafruit mqtt -> mqtt_esp8266
Modifiez ensuite ce code en fonction de notre adresse IP et de nos informations d'identification Wi-Fi Raspberry Pi.
Inclut toutes les bibliothèques pour ESP8266WIFI et Adafruit MQTT .
#comprendre
Définissez ensuite le SSID et le mot de passe de votre Wi-Fi, à partir desquels vous souhaitez connecter votre ESP-12e. Assurez-vous que votre RPi et NodeMCU se connectent au même réseau.
#define WLAN_SSID "xxxxxxxx" #define WLAN_PASS "xxxxxxxxxxx"
Cette section définit le serveur Adafruit, dans ce cas l'adresse IP de votre Raspberry Pi et le port du serveur.
#define AIO_SERVER "adresse IP de votre Pi" #define AIO_SERVERPORT 1883
Les champs ci-dessous resteront vides car nous n'utilisons pas le cloud Adafruit.
#define AIO_USERNAME "" #define AIO_KEY ""
Créez ensuite une classe ESP8266 WiFiClient pour vous connecter au serveur MQTT.
Client WiFiClient;
Configurez la classe client MQTT en transmettant le client WiFi et le serveur MQTT et les informations de connexion.
Adafruit_MQTT_Client mqtt (& client, AIO_SERVER, AIO_SERVERPORT, AIO_USERNAME, AIO_KEY);
Configurez un flux appelé «Température» pour publier la température.
Adafruit_MQTT_Publish Temperature = Adafruit_MQTT_Publish (& mqtt, AIO_USERNAME "/ feeds / temperature");
Configurez un flux appelé «led1» pour vous abonner aux modifications.
Adafruit_MQTT_Subscribe led1 = Adafruit_MQTT_Subscribe (& mqtt, AIO_USERNAME "/ feeds / led");
Dans la fonction de configuration , nous déclarons le code PIN de NodeMCU sur lequel vous souhaitez obtenir une sortie. Ensuite, connectez NodeMCU au point d'accès Wi-Fi.
void setup () { Serial.begin (115200); retard (10); pinMode (LED, SORTIE); Serial.println (F ("Démo Adafruit MQTT")); // Connectez-vous au point d'accès WiFi. Serial.println (); Serial.println (); Serial.print ("Connexion à"); Serial.println (WLAN_SSID); WiFi.begin (WLAN_SSID, WLAN_PASS); while (WiFi.status ()! = WL_CONNECTED) { …. …. … Configurer l'abonnement MQTT pour le flux LED. mqtt.subscribe (& led1); }
En fonction de boucle , nous nous assurerons que la connexion au serveur MQTT est active en utilisant MQTT_connect (); fonction.
boucle vide () { MQTT_connect ();
Maintenant, abonnez-vous au flux 'led' et récupérez la chaîne du courtier MQTT et convertissez cette chaîne en nombre en utilisant atoi (); fonction et écrivez ce numéro sur la broche LED en utilisant digitalWrite (); fonction.
Abonnement Adafruit_MQTT_Subscribe *; while ((abonnement = mqtt.readSubscription (20000))) { if (abonnement == & led1) { Serial.print (F ("Got:")); Serial.println ((char *) led1.lastread); int led1_State = atoi ((char *) led1.lastread); digitalWrite (LED, led1_State); }
Maintenant, obtenez la température dans une variable et publiez cette valeur à l'aide de la fonction Temperature.publish (t) .
float t = dht.readTemperature (); … .. if (! Temperature.publish (t)) { Serial.println (F ("Failed")); } else { Serial.println (F ("OK!")); }
Le code complet avec une vidéo de démonstration est donné à la fin de ce tutoriel. Téléchargez le code sur la carte NodeMCU et ouvrez l'application de tableau de bord MQTT que vous avez téléchargée dans le smartphone.
Vous pouvez également contrôler Raspberry Pi GPIO de n'importe où dans le monde en utilisant le cloud MQTT comme Adafruit IO, MQTT.IO, etc., que nous apprendrons dans le prochain tutoriel.