Verwendung von ESP-01 mit MQTT: So verbinden und steuern Sie IoT-Geräte

Verwendung von ESP-01 mit MQTT: So verbinden und steuern Sie IoT-Geräte

Ein begrenztes Budget bedeutet nicht unbedingt, dass Sie keine anspruchsvollen DIY-Projekte in Angriff nehmen können. Wenn Sie nach einem kleinen, erschwinglichen und praktischen WLAN-Modul zur Skalierung Ihrer IoT-Projekte suchen, ist das ESP-01-Modul eine gute Wahl. Allerdings kann die Integration eines solchen Moduls in ein leichtgewichtiges Protokoll wie MQTT schwierig sein, insbesondere wenn Sie neu in der IoT-Entwicklung sind.

Allein die Programmierung der ESP-01-Karte kann im Vergleich zu anderen Modulen der ESP8266-Serie eine Herausforderung darstellen. Aber lassen Sie uns die Grundlagen der gesamten Hardware- und Software-Einrichtung durchgehen, die Sie für die Verwendung des Moduls benötigen, sowie die einfache und prozedurale Einrichtung von MQTT.

Den Vorstand kennenlernen

ESP8266 ESP-01 ist ein kleines und kompaktes WiFi-Modul, das mit einem ESP8266EX-Chip ausgestattet ist, einem hochintegrierten SoC, der für IoT-Anwendungen entwickelt wurde.

Verwendung von ESP-01 mit MQTT: So verbinden und steuern Sie IoT-Geräte

Das Modul umfasst einen drahtlosen Einzelchip-Mikrocontroller mit einem TCP/IP-Protokollstapel und kann eine Verbindung zu einem drahtlosen Netzwerk herstellen oder als Zugangspunkt fungieren. Das ESP-01-Modul verfügt außerdem über einen 2x4-Pin-Header, der Zugriff auf seine GPIO-Pins, Strom und Masse sowie die UART-Schnittstelle bietet.

Einrichten der Hardware

Das Modul ist überhaupt nicht für Breadboards geeignet. Der Einfachheit halber können Sie eine vorgefertigte Erweiterungsplatine kaufen oder einfach den altmodischen Weg gehen – mit Überbrückungsdrähten und einem Steckbrett.

Es gibt einen speziellen Programmierer, das ESP8266 Serial Module Board, der Ihnen das Programmieren erleichtern kann. Wenn Sie diesen Weg bevorzugen, bietet DIYHOBI eine praktische Anleitung zum Flashen eines Programms in das ESP-01-Modul mithilfe eines Programmiergeräts (einschließlich des USB-zu-TTL-Konvertermoduladapters CH340G).

Sie können das Modul jedoch weiterhin mit einem Arduino-Board programmieren. Schauen Sie sich als Referenz den Schaltplan unten an.

Verwendung von ESP-01 mit MQTT: So verbinden und steuern Sie IoT-Geräte

Auch wenn es verlockend aussieht, empfehlen wir im Allgemeinen nicht, das Modul direkt an den 3,3-V-Pin des Arduino anzuschließen, da es mehr Strom benötigt, als der Pin liefert. Schließen Sie stattdessen den Arduino 5V an einen 3,3V-Spannungsregler wie LM1117/LD117 an und versorgen Sie dann das WLAN-Modul über den Regler mit Strom.

Verbinden Sie die VCC- und CH_PD- Pins des ESP nicht mit dem 5-V- Pin des Arduino. Wenn Sie das Modul an eine 5-V- Stromversorgung anschließen, kann es beschädigt werden.

Alle Kondensatoren haben 10uF und der Widerstand ist ein 1K- Widerstand.

Software Anforderungen

Das ESP-01-Modul wird häufig mit der Arduino-Plattform verwendet. Daher ist die Einrichtung der Software ziemlich einfach, insbesondere wenn Sie mit Arduino C vertraut sind. Wenn Sie jedoch mit Raspberry besser vertraut sind, gibt es zahlreiche Raspberry Pi IoT-Projekte, die Sie ausprobieren können.

Das sind die Grundvoraussetzungen:

  • Ein MQTT-Broker oder -Server (z. B. Mosquitto oder CloudMQTT).
  • Eine Arduino IDE mit der ESP8266-Kernbibliothek.
  • Die PubSubClient-Bibliothek für Arduino.

Sie müssen bedenken, dass Ihnen ein eigener MQTT-Server vor Ort Flexibilität bei Ihren Projekten bietet.

Installieren der erforderlichen Bibliotheken

Laden Sie zunächst die Arduino IDE herunter und installieren Sie sie auf Ihrem Computer. Öffnen Sie nach der Installation die Arduino IDE und gehen Sie zu Datei > Einstellungen .

Verwendung von ESP-01 mit MQTT: So verbinden und steuern Sie IoT-Geräte

Geben Sie im Feld Zusätzliche Boards-Manager-URLs die folgende URL ein:

http://arduino.esp8266.com/stable/package_esp8266com_index.json

Klicken Sie auf OK , um das Fenster „Einstellungen“ zu schließen.

Verwendung von ESP-01 mit MQTT: So verbinden und steuern Sie IoT-Geräte

Gehen Sie als Nächstes zu Extras > Board > Boards-Manager .

Suchen Sie dann nach esp8266 und installieren Sie das esp8266-Board-Paket – dieses enthält alle notwendigen Bibliotheken für das ESP-01-Modul.

Verwendung von ESP-01 mit MQTT: So verbinden und steuern Sie IoT-Geräte

Um die PubSubClient-Bibliothek zu installieren, gehen Sie zu Sketch > Bibliothek einschließen > Bibliotheken verwalten .

Verwendung von ESP-01 mit MQTT: So verbinden und steuern Sie IoT-Geräte

Suchen Sie nach PubSubClient und klicken Sie auf die Bibliothek, um sie zu installieren.

Verwendung von ESP-01 mit MQTT: So verbinden und steuern Sie IoT-Geräte

Sobald Sie alle notwendigen Bibliotheken installiert haben, können Sie mit der Programmierung des ESP-01-Moduls beginnen. Beachten Sie jedoch, dass Sie das in der Bibliothek enthaltene Wifi.h verwenden oder die ESPWifi.h- Bibliothek herunterladen und in Ihren Sketch einbinden können.

Herstellen einer Verbindung zwischen ESP-01 und MQTT-Broker

Ein MQTT-Broker ist ein Server, der als Vermittler zwischen MQTT-Clients fungiert. Es ermöglicht Clients, über ein Publish-Subscribe-Modell Nachrichten untereinander zu senden und zu empfangen.

Um Ihr ESP-01-Modul mit einem MQTT-Broker zu verbinden, müssen Sie die IP-Adresse und Portnummer des Brokers in Ihrem Code angeben. Sie müssen außerdem eine eindeutige Client-ID angeben, die Ihr ESP-01-Modul gegenüber dem Broker identifiziert.

Fügen Sie zunächst die erforderlichen Bibliotheken oben in Ihre Skizze ein

#include ESP8266WiFi.h> #include PubSubClient.h>

Als nächstes definieren Sie die WLAN- und MQTT-Verbindungsdetails.

const char* ssid = "YOUR_SSID"; const char* password = "YOUR_PASSWORD"; const char* mqtt_server = "YOUR_MQTT_SERVER";

Vergessen Sie nicht, die Platzhalter durch Ihre eigenen WLAN- und MQTT-Verbindungsdetails zu ersetzen.

Erstellen Sie anschließend einen WLAN-Client und stellen Sie eine Verbindung zu Ihrem lokalen WLAN-Netzwerk her:

WiFiClient espClient; void setup_wifi() {   delay(10);   WiFi.begin(ssid, password);   while (WiFi.status() != WL_CONNECTED) {     delay(500);   } }

Diese Funktion sollte in der Funktion setup() Ihres Sketches aufgerufen werden.

Als Nächstes müssen Sie einen MQTT-Client erstellen und eine Verbindung zu Ihrem MQTT-Broker herstellen:

PubSubClient client(espClient); void reconnect() {   while (!client.connected()) {     if (client.connect("ESP01", mqtt_user, mqtt_password)) {       // Subscribe to a topic       client.subscribe("test/topic");     } else {       delay(5000);     }   } }

Sobald Sie sich mit Ihrem MQTT-Broker verbunden haben, können Sie mit der Veröffentlichung und dem Abonnement von Themen beginnen.

Veröffentlichen von Daten von ESP-01 zum MQTT-Broker

Nachdem Sie nun Ihr ESP01-Modul erfolgreich mit dem MQTT-Broker verbunden haben, schauen wir uns an, wie Sie Daten vom ESP-01 an den Broker veröffentlichen können.

Um Daten zu veröffentlichen, verwenden Sie die Funktion client.publish() , um eine Nachricht im inTopic- Thema zu veröffentlichen.

client.publish("inTopic", "Hello from ESP-01");

Dadurch wird die Nachricht „Hallo von ESP-01“ im inTopic- Thema veröffentlicht.

Sie können auch Sensordaten vom ESP-01 an den Broker veröffentlichen. Wenn Sie beispielsweise einen Temperatursensor an Ihren ESP-01 angeschlossen haben, können Sie die Temperaturdaten wie unten gezeigt an den Broker veröffentlichen.

float temperature = 25.5; String temperatureString = String(temperature); char temperatureChar[5]; temperatureString.toCharArray(temperatureChar, 5); client.publish("Temp", temperatureChar);

Dadurch werden die Temperaturdaten im Thema „Temp“ veröffentlicht .

Abhängig von den Anforderungen Ihres Projekts können die Daten in einer Schleife oder in regelmäßigen Abständen veröffentlicht werden. Stellen Sie sicher, dass Sie den Broker nicht mit zu vielen Daten überfluten und dass Sie die Daten in angemessenen Abständen veröffentlichen.

Abonnieren von MQTT-Themen und Empfangen von Daten auf ESP-01

Um ein Thema zu abonnieren, verwenden Sie die Funktion client.subscribe() . Für unseren Fall unten abonniert der Client das OutTopic- Thema.

client.subscribe("outTopic");

Sobald Sie ein Thema abonniert haben, können Sie mit der Funktion „ client.loop()“ in der Funktion „loop()“ in der folgenden Skizze zu diesem Thema veröffentlichte Nachrichten empfangen:

void loop() {   if (!client.connected()) {     reconnect();   }   client.loop(); }

Dadurch wird kontinuierlich nach neuen Nachrichten gesucht und die Rückruffunktion ausgeführt, wenn eine neue Nachricht empfangen wurde.

Um empfangene Nachrichten zu verarbeiten, definieren Sie eine Rückruffunktion wie die unten gezeigte:

void callback(char* topic, byte* payload, unsigned int length) {   // Print the received message   Serial.print("Message received on topic: ");   Serial.print(topic);   Serial.print(". Message: ");   for (int i=0;i     Serial.print((char)payload[i]);   }   Serial.println(); }

Diese Funktion wird aufgerufen, wenn eine neue Nachricht zum abonnierten Thema eingeht. Die empfangene Nachricht wird auf dem seriellen Monitor gedruckt.

Verwendung von QoS-Levels (Quality of Service) und Sicherheitsfunktionen

Eine der wichtigsten Techniken zur Bearbeitung von Anfragen ist die Verwendung von QoS-Levels (Quality of Service) für Ihre MQTT-Nachrichten. QoS-Ebenen legen fest, wie der Broker und die Abonnenten Ihre Nachrichten verarbeiten sollen. Es gibt drei QoS-Stufen: 0, 1 und 2.

QoS-Level 0 ist am wenigsten zuverlässig, da Nachrichten nur einmal gesendet werden und nicht garantiert werden kann, dass sie dem Abonnenten zugestellt werden. QoS-Level 1 ist zuverlässiger, da Nachrichten mindestens einmal gesendet werden und garantiert mindestens einmal an den Abonnenten zugestellt werden. QoS-Level 2 ist am zuverlässigsten, da Nachrichten genau einmal gesendet werden und garantiert genau einmal an den Abonnenten zugestellt werden. Die Art und Weise, wie Ihre Geräte kommunizieren, hängt mit anderen häufigen Sicherheitsproblemen und Lösungen für das Internet der Dinge (IoT) zusammen, über die Sie auf dem Laufenden bleiben möchten.

Um QoS-Stufen zu verwenden, können Sie die gewünschte Stufe beim Veröffentlichen von Nachrichten mithilfe der Funktion client.publish() angeben :

client.publish("topic", "Hello, world!", 1);

Dadurch wird die Nachricht „Hallo Welt!“ veröffentlicht. zum Thema Thema mit QoS Level 1 .

Eine weitere fortgeschrittene Technik ist die Verwendung von LWT-Nachrichten (Last Will and Testament) . LWT-Nachrichten sind Nachrichten, die vom Broker gesendet werden, wenn ein Client unerwartet die Verbindung trennt. Wir glauben, dass dies wichtig ist, um Offline-Geräte zu erkennen oder Aktionen auszulösen, wenn ein Gerät die Verbindung trennt.

Um LWT-Nachrichten zu verwenden, können Sie die LWT-Nachricht angeben, wenn Sie mit der Funktion client.setWill() eine Verbindung zum Broker herstellen :

client.setWill("status", "offline", 1, true);

Dadurch wird die LWT-Nachricht für das Statusthema auf „ Offline“ gesetzt , mit QoS-Stufe 1 und dem Retain-Flag auf „ true“ .

Bereiten Sie sich auf Ihr nächstes IoT-Projekt vor

Das ESP-01-Modul ist eine kostengünstige und kompakte Lösung für IoT-Projekte und die Verwendung mit MQTT kann Ihr Projekt auf die nächste Stufe heben. Obwohl die anfängliche Einrichtung entmutigend sein kann, machen die Vorteile von MQTT, wie z. B. die einfache Kommunikation und die hohe Skalierbarkeit, es zu einer lohnenden Investition.