ESP8266 - MQTT

In diesem Tutorial werden wir untersuchen, wie man den ESP8266 nutzt, um Daten mit einem MQTT-Broker unter Verwendung des MQTT-Protokolls zu senden und zu empfangen. Genauer gesagt werden wir Folgendes behandeln:

ESP8266 NodeMCU MQTT

Wir werden zwei verschiedene Szenarien eingehend betrachten:

Erforderliche Hardware

1×ESP8266 NodeMCU
1×USB-Kabel Typ-A zu Typ-C (für USB-A PC)
1×USB-Kabel Typ-C zu Typ-C (für USB-C PC)
1×(Empfohlen) Schraubklemmen-Erweiterungsboard für ESP8266
1×(Empfohlen) Stromverteiler für ESP8266 Typ-C

Oder Sie können die folgenden Kits kaufen:

1×DIYables Sensor-Kit (30 Sensoren/Displays)
1×DIYables Sensor-Kit (18 Sensoren/Displays)
Offenlegung: Einige der in diesem Abschnitt bereitgestellten Links sind Amazon-Affiliate-Links. Wir können eine Provision für Käufe erhalten, die über diese Links getätigt werden, ohne zusätzliche Kosten für Sie. Wir schätzen Ihre Unterstützung.

Über ESP8266 und MQTT

Wenn Sie mit dem MQTT-Protokoll noch nicht vertraut sind, können Sie online Informationen dazu finden. Dieses Tutorial konzentriert sich auf die Verwendung des ESP8266 zum Senden und Empfangen von Daten über MQTT.

Hier sind einige Möglichkeiten, wie der ESP8266 mit MQTT verwendet werden kann:

  • Sie können den ESP8266 mit einem Online-MQTT-Broker wie Mosquitto oder AWS IoT verbinden.
  • Alternativ können Sie den ESP8266 mit einem MQTT-Broker verbinden, der auf Ihrem Computer installiert ist, wie Mosquitto oder HiveMQ.
  • Wenn Sie einen Raspberry Pi haben, kann der ESP8266 eine Verbindung zu einem MQTT-Broker herstellen, der darauf läuft, zum Beispiel Mosquitto.
  • Zusätzlich kann der ESP8266 mit einem cloud-basierten MQTT-Broker verbunden werden, z. B. Mosquitto oder HiveMQ auf AWS EC2.

In diesem Tutorial beginnen wir damit zu testen, ob der ESP8266 eine Verbindung zu einem Online-Mosquitto-Broker herstellen kann. Wir demonstrieren die Fähigkeit des ESP8266, über diesen Broker Daten zu senden und über das Internet zu empfangen.

Als Nächstes führen wir Sie durch die Einrichtung des Mosquitto-Brokers auf Ihrem Computer. Der ESP8266 wird sich dann mit diesem lokalen Broker verbinden, sodass Sie weiterhin Daten senden und empfangen können.

Nachdem Sie dieses Tutorial abgeschlossen haben, können Sie tiefer einsteigen, indem Sie diese zusätzlichen Tutorials erkunden:

Diese Ressourcen bieten weitere Einblicke in verwandte Themen.

Verbinde ESP8266 mit einem Online-MQTT-Broker

In diesem Abschnitt lernen wir, wie man den ESP8266 mit test.mosquitto.org verbindet, einem Online-MQTT-Broker, der von Mosquitto erstellt wurde. Bitte beachten Sie, dass dieser Broker nur zu Testzwecken verwendet werden sollte.

ESP8266-Code

Der untenstehende ESP8266-Code macht Folgendes:

  • Mit dem MQTT-Broker verbinden
  • Zu einem Topic abonnieren
  • Regelmäßig Nachrichten auf demselben Topic veröffentlichen, auf das es abonniert
/* * Dieser ESP8266 NodeMCU Code wurde von newbiely.de entwickelt * Dieser ESP8266 NodeMCU Code wird der Öffentlichkeit ohne jegliche Einschränkung zur Verfügung gestellt. * Für vollständige Anleitungen und Schaltpläne besuchen Sie bitte: * https://newbiely.de/tutorials/esp8266/esp8266-mqtt */ #include <ESP8266WiFi.h> #include <MQTTClient.h> #include <ArduinoJson.h> const char WIFI_SSID[] = "YOUR_WIFI_SSID"; // CHANGE TO YOUR WIFI SSID const char WIFI_PASSWORD[] = "YOUR_WIFI_PASSWORD"; // CHANGE TO YOUR WIFI PASSWORD const char MQTT_BROKER_ADRRESS[] = "test.mosquitto.org"; // CHANGE TO MQTT BROKER'S ADDRESS const int MQTT_PORT = 1883; const char MQTT_CLIENT_ID[] = "YOUR-NAME-esp8266-001"; // CHANGE IT AS YOU DESIRE const char MQTT_USERNAME[] = ""; // CHANGE IT IF REQUIRED, empty if not required const char MQTT_PASSWORD[] = ""; // CHANGE IT IF REQUIRED, empty if not required // The MQTT topics that ESP8266 should publish/subscribe const char PUBLISH_TOPIC[] = "YOUR-NAME-esp8266-001/loopback"; // CHANGE IT AS YOU DESIRE const char SUBSCRIBE_TOPIC[] = "YOUR-NAME-esp8266-001/loopback"; // CHANGE IT AS YOU DESIRE const int PUBLISH_INTERVAL = 5000; // 5 seconds WiFiClient network; MQTTClient mqtt = MQTTClient(256); unsigned long lastPublishTime = 0; void setup() { Serial.begin(9600); WiFi.begin(WIFI_SSID, WIFI_PASSWORD); Serial.println("ESP8266 - Connecting to Wi-Fi"); while (WiFi.status() != WL_CONNECTED) { delay(500); Serial.print("."); } Serial.println(""); Serial.print("Connected to WiFi network with IP Address: "); Serial.println(WiFi.localIP()); connectToMQTT(); } void loop() { mqtt.loop(); if (millis() - lastPublishTime > PUBLISH_INTERVAL) { sendToMQTT(); lastPublishTime = millis(); } } void connectToMQTT() { // Connect to the MQTT broker mqtt.begin(MQTT_BROKER_ADRRESS, MQTT_PORT, network); // Create a handler for incoming messages mqtt.onMessage(messageHandler); Serial.print("ESP8266 - Connecting to MQTT broker"); while (!mqtt.connect(MQTT_CLIENT_ID, MQTT_USERNAME, MQTT_PASSWORD)) { Serial.print("."); delay(100); } Serial.println(); if (!mqtt.connected()) { Serial.println("ESP8266 - MQTT broker Timeout!"); return; } // Subscribe to a topic, the incoming messages are processed by messageHandler() function if (mqtt.subscribe(SUBSCRIBE_TOPIC)) Serial.print("ESP8266 - Subscribed to the topic: "); else Serial.print("ESP8266 - Failed to subscribe to the topic: "); Serial.println(SUBSCRIBE_TOPIC); Serial.println("ESP8266 - MQTT broker Connected!"); } void sendToMQTT() { StaticJsonDocument<200> message; message["timestamp"] = millis(); message["data"] = analogRead(0); // Or you can read data from other sensors char messageBuffer[512]; serializeJson(message, messageBuffer); mqtt.publish(PUBLISH_TOPIC, messageBuffer); Serial.println("ESP8266 - sent to MQTT:"); Serial.print("- topic: "); Serial.println(PUBLISH_TOPIC); Serial.print("- payload:"); Serial.println(messageBuffer); } void messageHandler(String &topic, String &payload) { Serial.println("ESP8266 - received from MQTT:"); Serial.println("- topic: " + topic); Serial.println("- payload:"); Serial.println(payload); }

Schnelle Schritte

Um mit dem ESP8266 in der Arduino-IDE zu beginnen, befolgen Sie diese Schritte:

  • Schau dir die Anleitung zur Einrichtung der ESP8266-Umgebung in der Arduino IDE an, falls dies dein erster Einsatz mit ESP8266 ist.
  • Schließe das ESP8266-Board über ein USB-Kabel an deinen Computer an.
  • Öffne die Arduino IDE auf deinem Computer.
  • Wähle das richtige ESP8266-Board, z. B. (NodeMCU 1.0 (ESP-12E Module)), und seinen jeweiligen COM-Port.
  • Öffne den Bibliotheks-Manager, indem du auf das Bibliotheks-Manager-Symbol in der linken Navigationsleiste der Arduino IDE klickst.
  • Gib MQTT in das Suchfeld ein, dann suche nach der MQTT-Bibliothek von Joel Gaehwiler.
  • Klicke auf die Installieren-Schaltfläche, um die MQTT-Bibliothek zu installieren.
ESP8266 NodeMCU MQTT-Bibliothek
  • Gib ArduinoJson in das Suchfeld ein, suche dann nach der ArduinoJson-Bibliothek von Benoit Blanchon.
  • Klicke auf die Installieren-Schaltfläche, um die ArduinoJson-Bibliothek zu installieren.
ESP8266 NodeMCU JSON-Bibliothek
  • Kopieren Sie den obigen Code und öffnen Sie ihn mit der Arduino IDE
  • Ersetzen Sie die WLAN-Informationen (SSID und Passwort) im Code durch Ihre eigenen.
  • Im Code sehen Sie das Wort 'YOUR-NAME' dreimal. Ersetzen Sie dieses Wort durch Ihren Namen oder zufällige Zeichenfolgen (nur Buchstaben, keine Leerzeichen). Dies ist notwendig, weil andernfalls mehrere Personen denselben Code gleichzeitig ausführen könnten, was zu Konflikten führen kann, da die MQTT-Client-IDs und -Themen für alle gleich sind.
  • Klicken Sie in der Arduino IDE auf die Schaltfläche Upload, um den Code auf den ESP8266 hochzuladen.
  • Öffnen Sie den seriellen Monitor
  • Sehen Sie das Ergebnis im seriellen Monitor.
COM6
Send
ESP8266 - Connecting to MQTT broker ESP8266 - Subscribed to the topic: YOUR-NAME-esp8266-001/loopback ESP8266 - MQTT broker Connected! ESP8266 - sent to MQTT: - topic: YOUR-NAME-esp8266-001/loopback - payload:{"timestamp":11757,"data":255} ESP8266 - received from MQTT: - topic: YOUR-NAME-esp8266-001/loopback - payload: {"timestamp":11757,"data":255} ESP8266 - sent to MQTT: - topic: YOUR-NAME-esp8266-001/loopback - payload:{"timestamp":16896,"data":259} ESP8266 - received from MQTT: - topic: YOUR-NAME-esp8266-001/loopback - payload: {"timestamp":16896,"data":259}
Autoscroll Show timestamp
Clear output
9600 baud  
Newline  

Wie Sie sehen können, veröffentlicht der ESP8266 Nachrichten an den MQTT-Broker und erhält dann dieselbe Nachricht zurück. Das liegt daran, dass der obige Code dasselbe Thema abonniert, auf dem er Daten veröffentlicht. Wenn Sie nicht möchten, dass der ESP8266 die von ihm veröffentlichten Nachrichten empfängt, sorgen Sie einfach dafür, dass sich das SUBSCRIBE-Thema vom PUBLISH-Thema unterscheidet.

Verbinde den ESP8266 mit dem MQTT-Broker, der auf deinem PC installiert ist

Installation des Mosquitto MQTT-Brokers

  • Lade den Mosquitto MQTT Broker herunter.
  • Installiere es auf dem Laufwerk D: statt auf dem Laufwerk C:. Vermeide es, den Mosquitto-Broker auf dem C-Laufwerk zu installieren, um potenzielle Probleme zu verhindern.

Mosquitto MQTT-Broker starten

Nun prüfen wir, ob der MQTT-Broker ordnungsgemäß funktioniert, indem wir diese Schritte befolgen:

  • Gehen Sie in das Verzeichnis, in dem Mosquitto installiert wurde. Zum Beispiel: D:\mqtt\mosquitto>
  • Erstellen Sie eine neue Datei mit dem Namen test.conf, kopieren Sie den untenstehenden Inhalt und speichern Sie ihn in diesem Verzeichnis:
listener 1883 allow_anonymous true
  • Öffnen Sie eine Eingabeaufforderung als Administrator auf Ihrem PC. Nennen wir es Broker Window. Schließen Sie es nicht bis zum Ende des Tutorials.
Windows-Eingabeaufforderungsadministrator
  • Führe die untenstehenden Befehle der Reihe nach aus:
cd /d D:\mqtt\mosquitto mosquitto -v -c test.conf
  • Du wirst sehen:
Command Prompt
Microsoft Windows [Version 10.0.19045.3930] (c) Microsoft Corporation. All rights reserved. C:\WINDOWS\system32>cd /d D:\mqtt\mosquitto D:\mqtt\mosquitto>mosquitto -v -c test.conf 1710918939: mosquitto version 2.0.18 starting 1710918939: Config loaded from test.conf. 1710918939: Opening ipv6 listen socket on port 1883. 1710918939: Opening ipv4 listen socket on port 1883. 1710918939: mosquitto version 2.0.18 running
  • Öffnen Sie eine weitere Eingabeaufforderung als Administrator auf Ihrem PC.
  • Ermitteln Sie die IP-Adresse Ihres PCs, indem Sie den untenstehenden Befehl ausführen:
ipconfig
Command Prompt
C:\WINDOWS\system32>ipconfig Windows IP Configuration Ethernet adapter: Subnet Mask . . . . . . . . . . . : 255.0.0.0 IPv4 Address. . . . . . . . . . . : 192.168.0.26 Subnet Mask . . . . . . . . . . . : 255.255.255.0 Default Gateway . . . . . . . . . :
  • Schreibe die IP-Adresse für späteren Gebrauch auf. Im obigen Beispiel: 192.168.0.26

Prüfe, ob der Mosquitto-Broker funktioniert

  • Öffnen Sie eine weitere Eingabeaufforderung als Administrator auf Ihrem PC. Wir nennen sie Abonnentenfenster.
  • Abonnieren Sie ein Thema, indem Sie die untenstehenden Befehle nacheinander ausführen (ersetzen Sie dabei Ihre IP-Adresse):
cd /d D:\mqtt\mosquitto mosquitto_sub -h 192.168.0.26 -p 1883 -t esp8266-001/send
  • Öffnen Sie eine weitere Eingabeaufforderung als Administrator auf Ihrem PC. Nennen wir sie Publisher-Fenster.
  • Veröffentlichen Sie eine Nachricht auf dem gleichen Thema, indem Sie die untenstehenden Befehle der Reihe nach ausführen (ersetzen Sie sie durch Ihre IP-Adresse):
cd /d D:\mqtt\mosquitto mosquitto_pub -h 192.168.0.26 -p 1883 -t esp8266-001/send -m "Hello, MQTT!"
  • Sie werden sehen:
Command Prompt
Microsoft Windows [Version 10.0.19045.3930] (c) Microsoft Corporation. All rights reserved. C:\WINDOWS\system32>cd /d D:\mqtt\mosquitto D:\mqtt\mosquitto>mosquitto_pub -h 192.168.0.26 -p 1883 -t esp8266-001/send -m "Hello, MQTT!" D:\mqtt\mosquitto>

Sie werden sehen, dass diese Nachricht an das Abonnentenfenster weitergeleitet wird, wie folgt:

Command Prompt
Microsoft Windows [Version 10.0.19045.3930] (c) Microsoft Corporation. All rights reserved. C:\WINDOWS\system32>cd /d D:\mqtt\mosquitto D:\mqtt\mosquitto>mosquitto_sub -h 192.168.0.26 -p 1883 -t esp8266-001/send Hello, MQTT!

Nun haben Sie den Mosquitto-MQTT-Broker auf Ihrem PC erfolgreich installiert. Bitte schließen Sie NICHT drei Fenster: Broker-Fenster, Subscriber-Fenster und Publisher-Fenster. Wir werden sie als Nächstes verwenden.

ESP8266-Code

Der untenstehende ESP8266-Code tut Folgendes:

  • Mit dem MQTT-Broker verbinden
  • Ein Thema abonnieren
  • Periodisch Nachrichten auf ein anderes Thema veröffentlichen
/* * Dieser ESP8266 NodeMCU Code wurde von newbiely.de entwickelt * Dieser ESP8266 NodeMCU Code wird der Öffentlichkeit ohne jegliche Einschränkung zur Verfügung gestellt. * Für vollständige Anleitungen und Schaltpläne besuchen Sie bitte: * https://newbiely.de/tutorials/esp8266/esp8266-mqtt */ #include <ESP8266WiFi.h> #include <MQTTClient.h> #include <ArduinoJson.h> #define CLIENT_ID "ESP8266-001" // CHANGE IT AS YOU DESIRE const char WIFI_SSID[] = "YOUR_WIFI_SSID"; // CHANGE TO YOUR WIFI SSID const char WIFI_PASSWORD[] = "YOUR_WIFI_PASSWORD"; // CHANGE TO YOUR WIFI PASSWORD const char MQTT_BROKER_ADRRESS[] = "192.168.0.26"; // CHANGE TO MQTT BROKER'S IP ADDRESS const int MQTT_PORT = 1883; const char MQTT_USERNAME[] = ""; // CHANGE IT IF REQUIRED const char MQTT_PASSWORD[] = ""; // CHANGE IT IF REQUIRED // The MQTT topics that this device should publish/subscribe #define PUBLISH_TOPIC "esp8266-001/send" #define SUBSCRIBE_TOPIC "esp8266-001/receive" #define PUBLISH_INTERVAL 5000 // 4 seconds WiFiClient network; MQTTClient mqtt = MQTTClient(256); unsigned long lastPublishTime = 0; void setup() { Serial.begin(9600); WiFi.begin(WIFI_SSID, WIFI_PASSWORD); Serial.println("ESP8266 - Connecting to Wi-Fi"); while (WiFi.status() != WL_CONNECTED) { delay(500); Serial.print("."); } Serial.println(""); Serial.print("Connected to WiFi network with IP Address: "); Serial.println(WiFi.localIP()); connectToMQTT(); } void loop() { mqtt.loop(); if (millis() - lastPublishTime > PUBLISH_INTERVAL) { sendToMQTT(); lastPublishTime = millis(); } } void connectToMQTT() { // Connect to the MQTT broker mqtt.begin(MQTT_BROKER_ADRRESS, MQTT_PORT, network); // Create a handler for incoming messages mqtt.onMessage(messageHandler); Serial.print("ESP8266 - Connecting to MQTT broker"); while (!mqtt.connect(CLIENT_ID, MQTT_USERNAME, MQTT_PASSWORD)) { Serial.print("."); delay(100); } Serial.println(); if (!mqtt.connected()) { Serial.println("ESP8266 - MQTT broker Timeout!"); return; } // Subscribe to a topic, the incoming messages are processed by messageHandler() function if (mqtt.subscribe(SUBSCRIBE_TOPIC)) Serial.print("ESP8266 - Subscribed to the topic: "); else Serial.print("ESP8266 - Failed to subscribe to the topic: "); Serial.println(SUBSCRIBE_TOPIC); Serial.println("ESP8266 - MQTT broker Connected!"); } void sendToMQTT() { StaticJsonDocument<200> message; message["timestamp"] = millis(); message["data"] = analogRead(0); // Or you can read data from other sensors char messageBuffer[512]; serializeJson(message, messageBuffer); mqtt.publish(PUBLISH_TOPIC, messageBuffer); Serial.println("ESP8266 - sent to MQTT:"); Serial.print("- topic: "); Serial.println(PUBLISH_TOPIC); Serial.print("- payload:"); Serial.println(messageBuffer); } void messageHandler(String &topic, String &payload) { Serial.println("ESP8266 - received from MQTT:"); Serial.println("- topic: " + topic); Serial.println("- payload:"); Serial.println(payload); // You can process the incoming data as json object, then control something /* StaticJsonDocument<200> doc; deserializeJson(doc, payload); const char* message = doc["message"]; */ }

Schnelle Schritte

  • Kopieren Sie den obigen Code und öffnen Sie ihn in der Arduino IDE.
  • Ersetzen Sie die WLAN-Informationen (SSID und Passwort) im Code durch Ihre eigenen.
  • Ersetzen Sie die MQTT-Brokeradresse im Code (Domainname oder IP-Adresse).
  • Klicken Sie auf die Upload-Schaltfläche in der Arduino IDE, um den Code auf den ESP8266 hochzuladen.

Nachricht vom ESP8266 an den PC über MQTT senden

ESP8266-Code veröffentlicht Daten zum MQTT-Thema esp8266-001/send; Abonnentenfenster auf dem PC abonniert dieses Thema, um die Daten zu empfangen.

  • Öffnen Sie den seriellen Monitor; Sie werden sehen, dass der ESP8266 periodisch eine Nachricht an ein Topic veröffentlicht.
COM6
Send
ESP8266 - Connecting to MQTT broker ESP8266 - Subscribed to the topic: esp8266-001/receive ESP8266 - MQTT broker Connected! ESP8266 - sent to MQTT: - topic: esp8266-001/send - payload:{"timestamp":10708,"data":311} ESP8266 - sent to MQTT: - topic: esp8266-001/send - payload:{"timestamp":15837,"data":298} ESP8266 - sent to MQTT: - topic: esp8266-001/send - payload:{"timestamp":20965,"data":291} ESP8266 - sent to MQTT: - topic: esp8266-001/send - payload:{"timestamp":26094,"data":286}
Autoscroll Show timestamp
Clear output
9600 baud  
Newline  
  • Überprüfen Sie das Abonnentenfenster, Sie werden sehen, dass es die von ESP8266 veröffentlichte Nachricht, wie unten gezeigt, empfängt:
Command Prompt
Microsoft Windows [Version 10.0.19045.3930] (c) Microsoft Corporation. All rights reserved. C:\WINDOWS\system32>cd /d D:\mqtt\mosquitto D:\mqtt\mosquitto>mosquitto_sub -h 192.168.0.26 -p 1883 -t esp8266-001/send Hello, MQTT! {"timestamp":10708,"data":311} {"timestamp":15837,"data":298} {"timestamp":20965,"data":291} {"timestamp":26094,"data":286}

Nachricht vom PC zum ESP8266 über MQTT senden

ESP8266 abonniert das Thema esp8266-001/receive; Publisher-Fenster auf dem PC veröffentlicht eine Nachricht an dieses Thema, um sie an den ESP8266 zu senden.

  • Veröffentliche eine Nachricht zu dem Thema, auf das der ESP8266 abonniert hat, indem du den folgenden Befehl im Publisher Window ausführst:
mosquitto_pub -h 192.168.0.26 -p 1883 -t esp8266-001/receive -m "Hello, ESP8266!"
  • Sie werden sehen, dass diese Nachricht vom ESP8266 im Serial Monitor wie unten zu sehen ist:
COM6
Send
ESP8266 - received from MQTT: - topic: esp8266-001/receive - payload: Hello, ESP8266!
Autoscroll Show timestamp
Clear output
9600 baud  
Newline  

Video Tutorial

Wir erwägen die Erstellung von Video-Tutorials. Wenn Sie Video-Tutorials für wichtig halten, abonnieren Sie bitte unseren YouTube-Kanal , um uns zu motivieren, die Videos zu erstellen.

※ UNSERE NACHRICHTEN

  • Sie können gerne den Link zu diesem Tutorial teilen. Bitte verwenden Sie jedoch unsere Inhalte nicht auf anderen Websites. Wir haben viel Mühe und Zeit in die Erstellung der Inhalte investiert, bitte respektieren Sie unsere Arbeit!