- Was ist MQTT?
- Installieren von Mosquitto MQTT Broker auf Raspberry Pi
- Testen des Raspberry Pi Mosquitto Broker
- Schaltplan
- Code und Erklärung
MQTT ist ein Protokoll zum Senden und Empfangen von Nachrichten über das Internet. Wir haben dieses Protokoll zuvor in Iot Electricity Meter und Raspberry Pi Alexa verwendet, um die Daten im Internet zu veröffentlichen. In diesem Tutorial erfahren Sie mehr über das MQTT und die damit verbundenen Begriffe. Hier verwenden wir den Raspberry Pi als lokalen MQTT-Broker und steuern eine LED, die über das MQTT-Anwendungs-Dashboard mit NodeMCU ESP12E verbunden ist. Ein DHT11-Sensor ist ebenfalls an NodeMCU angeschlossen, sodass wir die Temperatur und Luftfeuchtigkeit auf dem MQTT-Dashboard ablesen können, indem wir den Raspberry Pi erneut als lokalen MQTT-Broker verwenden.
Beginnen wir also damit, das MQTT und die damit verbundenen Begriffe zu verstehen.
Was ist MQTT?
MQTT steht für Message Queue Telemetry Transport, das von IBM entwickelt wurde. Dieses Protokoll ist einfach und leicht und wird zum Senden und Empfangen von Nachrichten über das Internet verwendet. Es wurde für Geräte mit geringer Bandbreite entwickelt. Heutzutage wird dieses Protokoll häufig in IoT-Geräten verwendet, um die Sensordaten zu senden und zu empfangen. In IoT-basierten Hausautomationssystemen kann dieses Protokoll problemlos verwendet werden, ohne dass viele Internetdaten verwendet werden.
Es gibt wenige Begriffe, die in MQTT häufig verwendet werden:
- Abonnieren und veröffentlichen
- Botschaft
- Thema
- Makler
1. Abonnieren und veröffentlichen: Abonnieren bedeutet, die Daten von einem anderen Gerät abzurufen, und veröffentlichen bedeutet, die Daten an ein anderes Gerät zu senden.
Wenn Gerät1 die Daten an Gerät2 sendet, wird es als Publisher bezeichnet und ein anderes ist Subscriber und umgekehrt.
2. Nachricht: Nachrichten sind die Informationen, die wir senden und empfangen. Dies können Daten oder beliebige Befehle sein. Wenn wir beispielsweise die Temperaturdaten in der Cloud veröffentlichen, werden diese Temperaturdaten als Nachricht bezeichnet.
3. Thema: Auf diese Weise registrieren Sie Interesse für eingehende Nachrichten oder geben an, wo Sie die Nachricht veröffentlichen möchten. Themen werden mit Zeichenfolgen dargestellt, die durch einen Schrägstrich getrennt sind. Daten werden zu den Themen mit MQTT veröffentlicht, und dann abonniert das MQTT-Gerät das Thema, um die Daten abzurufen.
4. MQTT Broker: Dieses Ding ist dafür verantwortlich, alle Nachrichten von Herausgebern zu empfangen, die Nachrichten zu filtern und sie dann an die Abonnenten zu veröffentlichen, die an ihnen interessiert sind.
Wenn dieser Broker in der Cloud gehostet wird, wird er als MQTT-Cloud bezeichnet. Es gibt viele Cloud-basierte MQTT-Dienste wie Adafruit IO, MQTT.IO, IBM Bluemix, Microsoft Azure usw. MQTT kann auch mit der beliebten Amazon AWS Cloud verwendet werden, die wir im Tutorial Erste Schritte mit Amazon AWS erläutert haben.
Mit dem Raspberry Pi können wir unseren eigenen MQTT-Broker erstellen. Dies ist der lokale MQTT-Broker, dh Sie können die Daten in Ihrem lokalen Netzwerk nur von nirgendwo aus senden und empfangen. Also hier werden wir mosquitto MQTT Broker in Raspberry Pi installieren lokale MQTT Broker zu machen und die Temperaturdaten aus dem NodeMCU zu MQTT Dashboard - Anwendung senden. Außerdem steuern wir eine mit NodeMCU verbundene LED über den Broker.
Installieren von Mosquitto MQTT Broker auf Raspberry Pi
Öffnen Sie das Terminal in Ihrem Raspberry Pi und geben Sie die folgenden Befehle ein, um den Broker zu installieren
sudo apt update sudo apt install -y mosquitto mosquitto-clients
Warten Sie, bis die Installation abgeschlossen ist. Geben Sie den folgenden Befehl ein, um den Broker beim Start von Himbeer-Pi zu starten
sudo systemctl aktiviert mosquitto.service
Das war's, wir sind alle bereit, unseren MQTT-Broker zu starten. Geben Sie den folgenden Befehl ein, um zu überprüfen, ob es ordnungsgemäß installiert ist
Mücke -v
Dieser Befehl gibt Ihnen die Version Ihres MQTT-Brokers. Es sollte 1.4.x oder höher sein.
Testen des Raspberry Pi Mosquitto Broker
1. Führen Sie den Mosquitto-Broker im Hintergrund mit dem folgenden Befehl aus
Mücke -d
2. Nun abonnieren wir ein Thema in exampleTopic mit dem folgenden Befehl
mosquitto_s -d -t exampleTopic
3. Nun veröffentlichen wir eine Nachricht in exampleTopic
mosquitto_pub -d -t exampleTopic -m "Hallo Welt!"
Sie erhalten die Hallo Welt! Nachricht im Teilnehmerterminal.
Jetzt ist es an der Zeit, die Daten von einem anderen Gerät zu steuern und abzurufen. In unserem Fall verwenden wir die Dashboard- Anwendung NodeMCU und MQTT .
- Zuerst steuern wir eine LED, indem wir einen Befehl mit der App senden. In diesem Fall verhält sich NodeMCU als Abonnent und App als Herausgeber.
- Dann ist an den ESP12E auch ein DHT11-Sensor angeschlossen, und dieser Temperaturmesswert wird an die Mobile MQTT-Anwendung gesendet. In diesem Fall ist Mobile der Teilnehmer und NodeMCU der Herausgeber. Um diese Nachrichten zu den jeweiligen Themen weiterzuleiten, wird der Mosquitto MQTT-Broker verwendet.
Schaltplan
Schließen Sie den Stromkreis wie in der Abbildung gezeigt an. Hier wird der DHT11 für die Temperaturmessungen verwendet, es kann jedoch auch ein LM35-Temperatursensor verwendet werden. Wir haben bereits in vielen unserer Projekte den DHT11-Sensor verwendet, einschließlich mit NodeMCU, um eine Wetterstation zu bauen.
Beginnen wir mit dem Schreiben des Codes für die NodeMCU, um die Daten zu abonnieren und zu veröffentlichen.
Code und Erklärung
Hier verwenden wir die Adafruit MQTT-Bibliotheksvorlage und ändern die erforderlichen Dinge im Code. Mit demselben Code können die Daten in der Adafruit IO-Cloud veröffentlicht und abonniert werden, indem nur wenige Änderungen vorgenommen werden.Laden Sie dazu die Adafruit MQTT-Bibliothek von Sketch -> Include Library -> Manage Libraries herunter . Suchen Sie nach Adafruit MQTT und installieren Sie es. Nach der Installation der Bibliothek. Gehen Sie zu Beispielen -> Adafruit mqtt-Bibliothek -> mqtt_esp8266
Bearbeiten Sie diesen Code anschließend gemäß unserer Raspberry Pi-IP-Adresse und den Wi-Fi-Anmeldeinformationen.
Schließen Sie alle Bibliotheken für ESP8266WIFI und Adafruit MQTT ein .
#einschließen
Definieren Sie dann die SSID und das Kennwort für Ihr WLAN, über das Sie Ihr ESP-12e verbinden möchten. Stellen Sie sicher, dass Ihr RPi und Ihre NodeMCU mit demselben Netzwerk verbunden sind.
#define WLAN_SSID "xxxxxxxx" #define WLAN_PASS "xxxxxxxxxxx"
In diesem Abschnitt wird der Adafruit-Server definiert, in diesem Fall die IP-Adresse Ihres Raspberry Pi und des Server-Ports.
#define AIO_SERVER "IP-Adresse Ihres Pi" #define AIO_SERVERPORT 1883
Die folgenden Felder bleiben leer, da wir die Adafruit-Cloud nicht verwenden.
#define AIO_USERNAME "" #define AIO_KEY ""
Erstellen Sie dann eine ESP8266 WiFiClient-Klasse, um eine Verbindung zum MQTT-Server herzustellen.
WiFiClient-Client;
Richten Sie die MQTT-Clientklasse ein, indem Sie den WiFi-Client und den MQTT-Server übergeben und die Anmeldedaten angeben.
Adafruit_MQTT_Client mqtt (& client, AIO_SERVER, AIO_SERVERPORT, AIO_USERNAME, AIO_KEY);
Richten Sie einen Feed mit dem Namen "Temperatur" ein, um die Temperatur zu veröffentlichen.
Adafruit_MQTT_Publish Temperature = Adafruit_MQTT_Publish (& mqtt, AIO_USERNAME "/ feeds / temperatur");
Richten Sie einen Feed mit dem Namen 'led1' ein, um Änderungen zu abonnieren.
Adafruit_MQTT_Subscribe led1 = Adafruit_MQTT_Subscribe (& mqtt, AIO_USERNAME "/ feeds / led");
In der Setup- Funktion deklarieren wir die PIN der NodeMCU, auf der Sie die Ausgabe erhalten möchten. Verbinden Sie dann NodeMCU mit dem Wi-Fi-Zugangspunkt.
void setup () { Serial.begin (115200); Verzögerung (10); PinMode (LED, OUTPUT); Serial.println (F ("Adafruit MQTT-Demo")); // Verbindung zum WiFi-Zugangspunkt herstellen. Serial.println (); Serial.println (); Serial.print ("Herstellen einer Verbindung zu"); Serial.println (WLAN_SSID); WiFi.begin (WLAN_SSID, WLAN_PASS); while (WiFi.status ()! = WL_CONNECTED) { …. …. … MQTT-Abonnement für LED-Feed einrichten. mqtt.subscribe (& led1); }}
In der Schleifenfunktion stellen wir mithilfe von MQTT_connect () sicher, dass die Verbindung zum MQTT-Server besteht. Funktion.
void loop () { MQTT_connect ();
Abonnieren Sie jetzt den LED -Feed, holen Sie sich die Zeichenfolge vom MQTT-Broker und konvertieren Sie diese Zeichenfolge mit atoi () in eine Zahl . Funktion und schreiben Sie diese Nummer mit digitalWrite () auf den LED-Pin . Funktion.
Adafruit_MQTT_Subscribe * -Abonnement; 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); }}
Ermitteln Sie nun die Temperatur in einer Variablen und veröffentlichen Sie diesen Wert mit der Funktion Temperature.publish (t) .
float t = dht.readTemperature (); … .. if (! Temperature.publish (t)) { Serial.println (F ("Failed")); } else { Serial.println (F ("OK!")); }}
Den vollständigen Code mit einem Demonstrationsvideo finden Sie am Ende dieses Tutorials. Laden Sie den Code auf das NodeMCU-Board hoch und öffnen Sie die MQTT-Dashboard-App, die Sie auf das Smartphone heruntergeladen haben.
Sie können Raspberry Pi GPIO auch von überall auf der Welt mit MQTT-Clouds wie Adafruit IO, MQTT.IO usw. steuern, die wir im nächsten Tutorial lernen werden.