- Was ist das MQTT-Protokoll?
- Wie funktioniert MQTT?
- Der Eclipse Mosquitto Broker
- Erforderliche Komponenten
- Eclipse MQTT Test-Circuit - Schema
- Programmieren von ESP8266 zum Herstellen einer Kommunikation mit Broker
- Testen von MQTT mit ESP8266 unter Verwendung von Arduino
In den letzten Jahren sind IoT- Geräte (Internet of Things) zu einem ununterscheidbaren Bestandteil unseres täglichen Lebens geworden. Von Smart Homes über Smart Bulbs bis hin zu Smart Appliances. Entwickler und Entwickler integrieren diese Technologie, um ein Netzwerk verbundener Geräte zu schaffen, das unser tägliches Leben ein wenig aufregender macht. All dies wurde durch die einfache Kommunikation ermöglicht. Es gibt viele Möglichkeiten, zwischen Geräten zu kommunizieren. In kommerziellen und Hobbyprodukten wird jedoch häufig nur ein einziges Protokoll verwendet: Message Queuing Telemetry Transport (MQTT). Wir haben zuvor ein sprachgesteuertes FM-Radio mit Arduino und Google Assistant erstellt, das MQTT für die Kommunikation mit der NodeMCU-Karte verwendet. Probieren Sie es aus, wenn das für Sie interessant klingt.
In diesem Projekt verwenden wir einen kostenlosen und beliebten Eclipse MQTT-Broker und lernen, wie Sie ein IoT-Gerät (in unserem Fall ein NodeMCU-Modul) mit einem MQTT-Broker verbinden und Daten zwischen dem MQTT-Broker und NodeMCU übertragen.
Was ist das MQTT-Protokoll?
Bevor wir fortfahren, ist es besser, eine klare Vorstellung vom MQTT- Protokoll (Message Queuing Telemetry Transport) zu haben. Es ist ein leichtes Messaging-Protokoll, das die Publish / Subscribe-Methode verwendet und Nachrichten zwischen mehreren Geräten übersetzt. Mit dem MQTT-Protokoll können wir auch Daten senden / empfangen und verschiedene Ausgabegeräte wie das Lesen von Sensordaten usw. steuern. Es wurde auf TCP-Basis entwickelt und ist daher schneller als ähnliche Protokolle wie HTTP. Abgesehen davon hat es viele andere Vorteile gegenüber anderen Protokollen, wie z. B. sein sehr geringes Gewicht, sodass es keinen überschüssigen Speicher verbraucht. Es kann mit sehr wenig Netzwerkbandbreite arbeiten. Darüber hinaus verfügt es über ein robustes Sicherheitsprotokoll. Diese Eigenschaften machen es für viele Anwendungen geeignet.
Wie funktioniert MQTT?
Um die Funktionsweise des MQTT-Protokolls zu verstehen, müssen wir nur drei grundlegende Dinge verstehen. Das obige Diagramm zeigt das. Außerdem haben wir es unten im Artikel erklärt.
MQTT-Client:
Ein MQTT-Client ist ein beliebiges Gerät (es kann ein Mikrocontroller oder ein Server sein), das MQTT-Funktionen ausführt und mit einem zentralen Server kommuniziert, der als " Broker " bezeichnet wird. Der Broker übernimmt die Datenkommunikation zwischen den verbundenen Clients.
MQTT Verlag:
Wenn ein Client Informationen senden möchte, wird er als "Publisher" bezeichnet. Der Herausgeber veröffentlicht die Informationen zu einem bestimmten Thema. " Thema " ist ein Pfad, über den wir Nachrichten veröffentlichen / abonnieren können. Der Broker sendet dann die vom Benutzer veröffentlichten Informationen an die Clients (auch als Abonnent bezeichnet), die dieses bestimmte Thema abonniert haben.
MQTT-Abonnent:
Der MQTT-Abonnent abonniert Themen auf einem MQTT- Broker, um die vom Broker gesendeten Nachrichten zu lesen.
Der Eclipse Mosquitto Broker
Eclipse Mosquitto ist ein Open-Source-MQTT-Broker, der leichtgewichtig ist und für die Verwendung auf IoT-Geräten für die Kommunikation geeignet ist. Das MQTT-Protokoll bietet eine einfache Methode zum Übertragen von Informationen mithilfe eines Publish / Subscribe-Modells. Wenn Sie mehr über das Thema erfahren möchten, können Sie die offizielle Website für Mücken besuchen.
Einrichten des Eclipse Mosquitto-Brokers:
Um die Kommunikation mit dem Broker herzustellen, müssen wir sie zuerst einrichten. In diesem Projekt wird eine Android-Anwendung verwendet, um die Informationen mit dem Broker zu veröffentlichen und zu abonnieren. Die folgenden Schritte geben Ihnen einen besseren Überblick über den Einrichtungsprozess.
Schritt 1:
Laden Sie zunächst eine im Google Play Store / App Store verfügbare Anwendung „MQTT-Client“ herunter und installieren Sie sie. In diesem Projekt wird eine Anwendung mit dem Namen "MQTT-Client" verwendet, die wie im folgenden Bild aussieht.
Schritt 2:
Klicken Sie auf das Pluszeichen (+), um die zusätzlichen Optionen in der Anwendung aufzulisten, in denen wir einen neuen Broker hinzufügen werden. Wenn Sie auf die Schaltfläche klicken, wird ein neuer Bildschirm angezeigt (siehe unten).
Schritt 3:
Danach müssen die Details des Brokers in das erforderliche Feld eingetragen werden. Klicken Sie zunächst auf die in der Anwendung angezeigte Option "Aktiviert". In diesem Projekt wird der Eclipse MQTT-Broker verwendet. Die Details, die ausgefüllt werden müssen, sind unten angegeben:
Spitzname: Geben Sie einen Namen Ihrer Präferenz an
Host: mqtt.eclipse.org
Hafen: 1883
Kunden-ID: Geben Sie eine ID Ihrer Präferenz an
Die oben genannten Details müssen in die entsprechenden Felder eingetragen werden. Alle anderen Felder sind nicht erforderlich und können leer gelassen werden. Klicken Sie nach erfolgreichem Abschluss auf die Schaltfläche Speichern, um die Broker-Details zu speichern.
Sobald dies erledigt ist, ist der Einrichtungsprozess für die Android-Anwendung beendet und jetzt können wir zur Hardwareseite übergehen.
Erforderliche Komponenten
Eine vollständige Liste der erforderlichen Teile wird unten beschrieben. Da diese Schaltung einfach ist, finden Sie alle erforderlichen Teile in Ihrem örtlichen Hobbygeschäft.
- NodeMCU
- LED
- Steckbrett
- Kabel anschließen
- Programmierkabel
Eclipse MQTT Test-Circuit - Schema
Der Schaltplan für das Basic MQTT-Projekt ist unten angegeben:
Programmieren von ESP8266 zum Herstellen einer Kommunikation mit Broker
Ein einfacher Arduino-Code sorgt für die gesamte notwendige Kommunikation zwischen dem MQTT-Broker und der NodeMCU. In diesem Abschnitt erfahren Sie ausführlich, wie diese Funktionalität funktioniert.
Richten Sie die Arduino IDE ein und laden Sie den Code hoch:
Wenn Sie den Code zum ersten Mal auf die NodeMCU hochladen, müssen Sie zuerst die Arduino IDE einrichten. Befolgen Sie dazu einfach die unten angegebenen einfachen Anweisungen.
Öffnen Sie zuerst die Arduino IDE und gehen Sie dann zu Datei–> Einstellungen–> Einstellungen .
Kopieren Sie als Nächstes die folgende URL, fügen Sie sie in das Feld "Zusätzliche Board Manager-URL " ein und klicken Sie auf "OK". Sie können das Bild unten überprüfen, um zu erfahren, wie wir das gemacht haben.
Link:
Gehen Sie anschließend zu Tools> Board> Boards Manager . Geben Sie im Manager-Fenster des Boards ESP 8266 in das Suchfeld ein und drücken Sie die Eingabetaste. Wählen Sie dann die neueste Version aus der Dropdown-Liste und klicken Sie auf Installieren. Das Bild unten gibt Ihnen eine klare Vorstellung.
Gehen Sie nach Abschluss der Installation zu Extras -> Karte -> und wählen Sie NodeMCU 1.0 (ESP-12E-Modul). Jetzt können Sie NodeMCU mit Arduino IDE programmieren. Nachdem wir die Arduino IDE eingerichtet haben, können wir jetzt den vollständigen Code hochladen. Aber lesen Sie zuerst die kurze Erklärung des gesamten Codes.
Erstens haben wir "ESP8266WiFi.h" für die Verwendung von ESP8266 und "PubSubClient.h" für MQTT aufgenommen.
Sie finden die vorgefertigte ESP8266-Bibliothek in der Arduino-Bibliothek, müssen jedoch die PubSubClient-Bibliothek aus dem zugehörigen GitHub-Repository herunterladen.
#einschließen
Definieren Sie dann die Netzwerkanmeldeinformationen wie Ihren WLAN-Benutzernamen und Ihr Kennwort. Ersetzen Sie Ihre Anmeldeinformationen anstelle von "admin" bzw. "12345678".
const char * ssid = "admin"; const char * password = "12345678";
Als nächstes müssen wir den MQTT-Server konfigurieren. Wir haben für dieses Projekt den Eclipse MQTT-Server verwendet, weshalb die Serveradresse als "mqtt.eclipse.org" angegeben wird. Wenn Sie jedoch einen anderen Server wie Mosquitto oder Adafruit verwenden möchten, können Sie diesen durch Ihre spezifische Serveradresse und Portnummer ersetzen.
const char * mqtt_server = "mqtt.eclipse.org"; const int mqtt_port = 1883;
Als Nächstes werden die Instanzen für die Klassen WiFiClient und PubSubClient erstellt , die im gesamten Programm verwendet werden.
WiFiClient espClient; PubSubClient-Client (espClient);
Im Abschnitt setup () rufen wir zuerst WiFi.begin () auf. Wenn Sie diese Methode aufrufen, wird das ESP mit Ihrem bevorzugten HotSpot verbunden.
WiFi.begin (ssid, Passwort);
Als Nächstes überprüfen wir mithilfe der WiFi.status () -Methode , ob eine erfolgreiche Netzwerkverbindung besteht . Nach einer erfolgreichen Verbindung wird auf dem seriellen Monitor eine Nachricht mit der SSID des verbundenen Netzwerks gedruckt.
while (WiFi.status ()! = WL_CONNECTED) {delay (500); Serial.println ("Verbindung zu WiFi herstellen.."); } Serial.print ("Verbunden mit WiFi:"); Serial.println (WiFi.SSID ());
Jetzt müssen wir einen Broker erstellen. Dafür haben wir die setServer- Methode verwendet; Diese Methode verwendet zwei Argumente, die wir zuvor vordefiniert haben. Wenn wir jetzt Nachrichten vom Server empfangen möchten, müssen wir eine Rückruffunktion erstellen . Dafür verwenden wir die setCallback (Callback) -Methode.
client.setServer (mqtt_server, mqtt_port); client.setCallback (MQTTcallback);
Jetzt haben wir die Verbindungsfunktion (clientID) verwendet, um eine Verbindung zum ESP8266-Client herzustellen . Hier ist clientID der Name des Clients und muss eindeutig sein. Wenn es verbunden ist, kann eine Erfolgsmeldung im seriellen Monitor angezeigt werden.
if (client.connect ("ESP8266")) {Serial.println ("verbunden"); } else {Serial.print ("mit Status fehlgeschlagen") Serial.println (client.state ()); Verzögerung (2000); }}
Als Nächstes rufen wir client.subscribe () auf , eine integrierte MQTT-Funktion, mit der ein bestimmtes Thema abonniert wird. Für dieses Projekt haben wir " esp / test " als Abonnentennamen verwendet.
client.subscribe ("esp / test");
Jetzt wird die MQTTcallback- Funktion aufgerufen, um zu überprüfen, ob aktualisierte Informationen verfügbar sind oder nicht. Wenn neue Daten verfügbar sind, verarbeitet diese Funktion die empfangenen Daten und druckt eine Nachricht auf dem seriellen Monitor mit der ursprünglichen Nachricht und dem Themennamen, unter dem die Nachricht empfangen wird.
Als nächstes konvertieren wir die Nachrichten in eine Zeichenfolge, damit sie verglichen und auf auslösende Aktionen überprüft werden können. In diesem Projekt wird eine LED mithilfe von MQTT-Befehlen ein- und ausgeschaltet, wie im folgenden Code gezeigt.
für (int i = 0; i <Länge; i ++) {message = message + (char) payload; } Serial.print (Nachricht); if (message == "on") {digitalWrite (LED, HIGH); }}
Zum Schluss veröffentlichen Sie die Informationen zum Thema. Die Funktion client.publish () wird verwendet. In diesem Projekt wird ein Drucktastenstatus überprüft. Wenn die Taste gedrückt wird, wird eine Nachricht in einem Thema " esp / test1 " veröffentlicht, wie unten gezeigt.
if (digitalRead (D1) == 0)) {client.publish ("esp / test1", "Hallo von ESP8266"); } else; client.loop ();
Testen von MQTT mit ESP8266 unter Verwendung von Arduino
Für unsere abschließenden Tests werden wir die Android-Anwendung verwenden, die wir zuvor eingerichtet haben.
Öffnen Sie die MQTT-Clientanwendung und stellen Sie sicher, dass Ihr Mobiltelefon über eine aktive Internetverbindung verfügt. Außerdem sollte der Hotspot, mit dem die NodeMCU verbunden ist, über eine aktive Internetverbindung verfügen. Sobald alles mit dem Internet verbunden ist, senden wir vom ESP-Modul eine Zeichenfolge "Hallo von ESP8266", die in der Android-App angezeigt wird, und wir erhalten eine Benachrichtigung. Als Nächstes senden wir einen String von der Android-App, der eine LED einschaltet, die mit der ESP8266 Node MCU-Karte verbunden ist.
Schritt 1: (Abonnieren Sie das Thema):
Klicken Sie in der App auf die Option Gespeicherte MQTT, die wir zuvor konfiguriert haben. Es wird ein Bildschirm angezeigt, in dem Sie aufgefordert werden , ein Thema zu abonnieren. Wir haben das Thema zuvor als " esp / test1 " konfiguriert . In der Android-App schreiben wir also " esp / test1 ". Klicken Sie auf Abonnieren. Dadurch wird ein Bildschirm wie unten angezeigt, in dem der Text "Keine Nachricht empfangen" des jeweiligen Themas angezeigt wird.
Klicken Sie nun auf die Schaltfläche 'Verbunden', die mit der NodeMCU verbunden ist. Gemäß unserem Code wird nun eine Nachricht " Hallo von ESP8266 " zum Thema veröffentlicht und auf dem Bildschirm wird eine Benachrichtigung mit der empfangenen Nachricht angezeigt (siehe unten).
Schritt 2: Zum Thema veröffentlichen:
Um nun im Thema zu veröffentlichen, klicken Sie auf die Schaltfläche PFEIL NACH OBEN der Anwendung. Daraufhin wird ein Bildschirm wie unten gezeigt geöffnet.
Schreiben Sie nun im Feld Thema " esp / test " und im Feld "Nachricht" " ein " oder " aus ", um die LED ein- bzw. auszuschalten. Wenn beispielsweise "Ein" im Thema veröffentlicht wird, wird die LED eingeschaltet, und wenn "Aus" im Thema veröffentlicht wird, wird die LED ausgeschaltet.
Ich hoffe, Ihnen hat der Artikel gefallen und Sie haben etwas Neues gelernt. Wenn Sie Fragen zu diesem Artikel haben, können Sie diese gerne unten kommentieren oder stattdessen unser Forum nutzen.