Inhaltsverzeichnis:

So verwenden Sie MQTT mit dem Raspberry Pi und ESP8266 - Gunook
So verwenden Sie MQTT mit dem Raspberry Pi und ESP8266 - Gunook

Video: So verwenden Sie MQTT mit dem Raspberry Pi und ESP8266 - Gunook

Video: So verwenden Sie MQTT mit dem Raspberry Pi und ESP8266 - Gunook
Video: MQTT mit ESP8266 nodemcu und Arduino IDE [deutsch] 2024, Juni
Anonim
So verwenden Sie MQTT mit dem Raspberry Pi und ESP8266
So verwenden Sie MQTT mit dem Raspberry Pi und ESP8266

In diesem Instructable werde ich erklären, was das MQTT-Protokoll ist und wie es zur Kommunikation zwischen Geräten verwendet wird. Dann zeige ich Ihnen als praktische Demonstration, wie Sie ein einfaches Zwei-Client-System einrichten, bei dem ein ESP8266-Modul eine Nachricht sendet zu einem Python-Programm, wenn eine Schaltfläche gedrückt wird. Konkret verwende ich für dieses Projekt ein Adafruit HUZZAH-Modul, einen Raspberry Pi und einen Desktop-Computer. Der Raspberry Pi fungiert als MQTT-Broker und der Python-Client wird von einem separaten Desktop-Computer ausgeführt (optional, da dieser auf dem Raspberry Pi ausgeführt werden könnte).

Um diesem Instructable zu folgen, benötigen Sie einige Grundkenntnisse der Elektronik und die Verwendung der Arduino-Software. Sie sollten auch mit der Verwendung einer Befehlszeilenschnittstelle (für den Raspberry Pi) vertraut sein. Sobald Sie wissen, was MQTT ist und wie man es in einem einfachen Szenario verwendet, können Sie hoffentlich Ihre eigenen IoT-Projekte erstellen!

Erforderliche Teile

  • 1 x Raspberry Pi, verbunden mit einem lokalen Netzwerk (mit Jessie)
  • 1 x ESP8266-Modul (Adafruit HUZZAH)
  • 1 x Steckbrett
  • 3 x Überbrückungsdrähte (männlich-zu-männlich)
  • 1 x Taster
  • 1 x 10k Ohm Widerstand (Farbcode Braun-Schwarz-Orange)

Ich habe dieses Instructable erstellt, da MQTT mich immer als Protokoll interessiert hat und es viele verschiedene Möglichkeiten gibt, es zu verwenden. Ich konnte mir jedoch nicht vorstellen, wie man Geräte codiert, um es zu verwenden. Das lag daran, dass ich nicht wusste/verstand, was eigentlich vor sich ging, um mein "Hallo Welt!" von Gerät A und senden Sie es an Gerät B. Daher habe ich beschlossen, dieses Instructable zu schreiben, um Ihnen (hoffentlich) beizubringen, wie es funktioniert, und auch mein eigenes Verständnis davon zu stärken!

Schritt 1: Was ist MQTT?

Was ist MQTT?
Was ist MQTT?

MQTT oder MQ Telemetry Transport ist ein Messaging-Protokoll, das es mehreren Geräten ermöglicht, miteinander zu kommunizieren. Derzeit ist es ein beliebtes Protokoll für das Internet der Dinge, obwohl es für andere Zwecke verwendet wurde – zum Beispiel für den Facebook Messenger. Interessanterweise wurde MQTT 1999 erfunden – das heißt, es ist so alt wie ich!

MQTT basiert auf der Idee, dass Geräte Themen veröffentlichen oder abonnieren können. Also zum Beispiel. Wenn Gerät #1 die Temperatur von einem seiner Sensoren aufgezeichnet hat, kann es eine Nachricht mit dem aufgezeichneten Temperaturwert zu einem Thema (z. B. "Temperatur") veröffentlichen. Diese Nachricht wird an einen MQTT-Broker gesendet, den Sie sich als Switch/Router in einem lokalen Netzwerk vorstellen können. Sobald der MQTT-Broker die Nachricht erhalten hat, sendet er sie an alle Geräte (in diesem Fall Gerät Nr. 2), die dasselbe Thema abonniert haben.

In diesem Projekt veröffentlichen wir ein Thema mit einem ESP8266 und erstellen ein Python-Skript, das dasselbe Thema über einen Raspberry Pi abonniert, der als MQTT-Broker fungiert. Das Tolle an MQTT ist, dass es leichtgewichtig ist, sodass es sich perfekt für die Ausführung auf kleinen Mikrocontrollern wie einem ESP8266 eignet, aber auch weit verbreitet ist – sodass wir es auch auf einem Python-Skript ausführen können.

Hoffentlich haben Sie am Ende dieses Projekts ein Verständnis dafür, was MQTT ist und wie Sie es in Zukunft für Ihre eigenen Projekte verwenden können.

Schritt 2: Installation des MQTT Brokers auf dem Raspberry Pi

Installation des MQTT Brokers auf dem Raspberry Pi
Installation des MQTT Brokers auf dem Raspberry Pi
Installation des MQTT Brokers auf dem Raspberry Pi
Installation des MQTT Brokers auf dem Raspberry Pi
Installation des MQTT Brokers auf dem Raspberry Pi
Installation des MQTT Brokers auf dem Raspberry Pi

Um unser MQTT-System einzurichten, benötigen wir einen Broker, wie im vorherigen Schritt erklärt. Für den Raspberry Pi verwenden wir den MQTT-Broker " Mosquitto ". Bevor wir dies installieren, ist es immer am besten, unseren Raspberry Pi zu aktualisieren.

sudo apt-get update

sudo apt-get upgrade

Sobald Sie dies getan haben, installieren Sie mosquitto und dann die mosquitto-clients-Pakete.

sudo apt-get install mosquitto -y

sudo apt-get install mosquitto-clients -y

Wenn Sie die Installation dieser beiden Pakete abgeschlossen haben, müssen wir den Broker konfigurieren. Die Konfigurationsdatei des Mosquitto Brokers befindet sich unter /etc/mosquitto/mosquitto.conf, also öffnen Sie diese mit Ihrem bevorzugten Texteditor. Wenn Sie keinen bevorzugten Texteditor haben oder nicht wissen, wie Sie einen der Befehlszeileneditoren verwenden, verwende ich nano, damit Sie mitmachen können:

sudo nano /etc/mosquitto/mosquitto.conf

Am Ende dieser Datei sollten Sie die Zeile sehen:

include_dir /etc/mosquitto/conf.d

Löschen Sie diese Zeile. Fügen Sie die folgenden Zeilen am Ende der Datei hinzu.

allow_anonymous false

passwortdatei /etc/mosquitto/pwfile listener 1883

Durch die Eingabe dieser Zeilen haben wir mosquitto mitgeteilt, dass wir nicht möchten, dass sich jemand mit unserem Broker verbindet, der keinen gültigen Benutzernamen und kein gültiges Passwort angibt (wir werden diese in einer Sekunde festlegen) und dass wir möchten, dass mosquitto dies tut lauschen Sie auf Nachrichten auf Portnummer 1883.

Wenn Sie nicht möchten, dass der Broker einen Benutzernamen und ein Passwort verlangt, fügen Sie die ersten beiden Zeilen, die wir hinzugefügt haben, nicht ein (d. h. allow_anonymous… und password_file…). Wenn Sie dies getan haben, fahren Sie mit dem Neustart des Raspberry Pi fort.

Schließen (und speichern) Sie nun diese Datei. Wenn Sie dem Nano-Beispiel folgen, drücken Sie STRG+X, und geben Sie Y ein, wenn Sie dazu aufgefordert werden.

Da wir mosquitto gerade mitgeteilt haben, dass Benutzer, die versuchen, den MQTT-Broker zu verwenden, authentifiziert werden müssen, müssen wir mosquitto jetzt den Benutzernamen und das Passwort mitteilen! Geben Sie also den folgenden Befehl ein - ersetzen Sie den Benutzernamen durch den gewünschten Benutzernamen - und geben Sie dann das gewünschte Kennwort ein, wenn Sie dazu aufgefordert werden (Hinweis: Wenn Sie beim Bearbeiten der Konfigurationsdatei einen anderen Kennwortdateipfad angegeben haben, ersetzen Sie den folgenden Pfad durch das eine, die Sie verwendet haben).

sudo mosquitto_passwd -c /etc/mosquitto/pwfile Benutzername

Da wir gerade die Mosquitto-Konfigurationsdatei geändert haben, sollten wir den Raspberry Pi neu starten.

sudo neu starten

Sobald der Neustart des Raspberry Pi abgeschlossen ist, sollten Sie einen voll funktionsfähigen MQTT-Broker haben! Als nächstes werden wir versuchen, mit einer Reihe verschiedener Geräte/Methoden damit zu interagieren!

Schritt 3: Testen des Brokers

Testen des Brokers
Testen des Brokers

Sobald Sie mosquitto auf dem Raspberry Pi installiert haben, können Sie es schnell testen - nur um sicherzustellen, dass alles richtig funktioniert. Zu diesem Zweck gibt es zwei Befehle, die wir in der Befehlszeile verwenden können. mosquitto_pub und mosquitto_sub. In diesem Schritt werde ich Sie durch die Verwendung jedes dieser Elemente führen, um unseren Broker zu testen.

Um den Broker zu testen, müssen Sie zwei Befehlszeilenfenster öffnen. Wenn Sie Putty oder einen anderen SSH-Client verwenden, müssen Sie einfach ein weiteres SSH-Fenster öffnen und sich wie gewohnt anmelden. Wenn Sie von einem UNIX-Terminal auf Ihren Pi zugreifen, ist dies genau dasselbe. Wenn Sie den Raspberry Pi direkt verwenden, müssen Sie im GUI-Modus zwei Terminalfenster öffnen (zum Starten der GUI kann der Befehl startx verwendet werden).

Nachdem Sie nun zwei Fenster geöffnet haben, können wir mit dem Testen beginnen. Geben Sie in einem der beiden Terminals den folgenden Befehl ein und ersetzen Sie Benutzername und Kennwort durch die im vorherigen Schritt eingerichteten.

mosquitto_sub -d -u Benutzername -P Passwort -t Test

Wenn Sie sich im vorherigen Schritt entschieden haben, keinen Benutzernamen und kein Passwort festzulegen, ignorieren Sie von nun an die Flags -u und -P in den Befehlen. Als Beispiel wäre der Befehl mosquitto_sub jetzt also:

mosquitto_sub -d -t test

Der Befehl mosquitto_sub abonniert ein Thema und zeigt alle Nachrichten an, die an das angegebene Thema im Terminalfenster gesendet werden. -d bedeutet hier Debug-Modus, alle Meldungen und Aktivitäten werden also auf dem Bildschirm ausgegeben. -u und -P sollten selbsterklärend sein. Schließlich ist -t der Name des Themas, das wir abonnieren möchten - in diesem Fall "test".

Als nächstes werden wir im anderen Terminalfenster versuchen, eine Nachricht zum Thema "Test" zu veröffentlichen. Geben Sie Folgendes ein und denken Sie noch einmal daran, den Benutzernamen und das Kennwort zu ändern:

mosquitto_pub -d -u Benutzername -P Passwort -t Test -m "Hallo Welt!"

Wenn Sie die Eingabetaste drücken, sollten Sie Ihre Nachricht "Hello, World!" erscheinen im ersten Terminalfenster, das wir verwendet haben (zum Abonnieren). Wenn dies der Fall ist, können Sie mit der Arbeit am ESP8266 beginnen!

Schritt 4: Einrichten des ESP8266 (Adafruit HUZZAH)

Einrichten des ESP8266 (Adafruit HUZZAH)
Einrichten des ESP8266 (Adafruit HUZZAH)
Einrichten des ESP8266 (Adafruit HUZZAH)
Einrichten des ESP8266 (Adafruit HUZZAH)
Einrichten des ESP8266 (Adafruit HUZZAH)
Einrichten des ESP8266 (Adafruit HUZZAH)
Einrichten des ESP8266 (Adafruit HUZZAH)
Einrichten des ESP8266 (Adafruit HUZZAH)

Dieser Schritt ist spezifisch für die Adafruit HUZZAH (da ich dieses Projekt verwende). Wenn Sie ein anderes Arduino / ESP8266-Gerät verwenden, möchten Sie diesen Schritt möglicherweise überspringen. Ich würde Ihnen jedoch raten, es kurz zu lesen, nur für den Fall, dass es hier Informationen gibt, die für Sie relevant sein könnten.

Für dieses Projekt werde ich den HUZZAH mit der Arduino-Software programmieren. Stellen Sie also sicher, dass Sie die Arduino-Software (neuer als 1.6.4) installieren, falls Sie dies noch nicht getan haben. Sie können es hier herunterladen.

Sobald Sie die Arduino-Software installiert haben, öffnen Sie sie und navigieren Sie zu File->Preferences. Hier sollten Sie (am unteren Rand des Fensters) ein Textfeld mit der Bezeichnung "Additional Boards Manager URLs" sehen. Kopieren Sie in dieses Textfeld den folgenden Link und fügen Sie ihn ein:

arduino.esp8266.com/stable/package_esp8266com_index.json

Klicken Sie auf OK, um Ihre Änderungen zu speichern. Öffnen Sie nun den Board Manager (Tools->Board->Board Manager) und suchen Sie nach ESP8266. Installieren Sie das esp8266 by ESP8266 Community-Paket. Starten Sie die Arduino-Software neu.

Bevor wir das Board programmieren können, müssen wir einige verschiedene Optionen auswählen. Wählen Sie in der Menüoption Tools Adafruit HUZZAH ESP8266 für Board, 80 MHz für die CPU-Frequenz (Sie können 160 MHz verwenden, wenn Sie es übertakten möchten, aber im Moment werde ich 80 MHz verwenden), 4M (3M SPIFFS) für die Flash-Größe und 115200 für die Upload-Geschwindigkeit. Stellen Sie außerdem sicher, dass Sie den von Ihnen verwendeten COM-Port auswählen (dies hängt von Ihrem Setup ab).

Bevor Sie Code hochladen können, müssen Sie sicherstellen, dass sich der HUZZAH im Bootloader-Modus befindet. Um dies zu aktivieren, halten Sie die Taste auf der Platine mit der Bezeichnung GPIO0 gedrückt, und halten Sie währenddessen auch die Reset-Taste gedrückt. Lassen Sie dann die Reset-Taste und dann GPIO0 los. Wenn Sie dies richtig gemacht haben, sollte die rote LED, die beim Drücken von GPIO0 aufleuchtete, jetzt schwach leuchten.

Um Code auf den Mikrocontroller hochzuladen, stellen Sie zunächst sicher, dass sich der HUZZAH im Bootloader-Modus befindet, und klicken Sie dann einfach auf die Schaltfläche zum Hochladen in der Arduino IDE.

Sollten Sie Probleme beim Einrichten der HUZZAH haben, finden Sie weitere Informationen im eigenen Tutorial von Adafruit.

Schritt 5: Programmierung des ESP8266

Programmierung des ESP8266
Programmierung des ESP8266

Jetzt beginnen wir mit der Programmierung des ESP8266, aber bevor wir beginnen können, müssen Sie die folgenden Bibliotheken im Arduino-Bibliotheksmanager installieren (Skizze->Bibliotheken einschließen->Bibliotheken verwalten)

  • Bounce2
  • PubSubClient

Sobald Sie diese Bibliotheken installiert haben, können Sie den Code ausführen, den ich in diesem Instructable (MQTT_Publish.zip) enthalten habe. Ich habe darauf geachtet, es zu kommentieren, damit Sie verstehen, was die einzelnen Abschnitte tun, und dies sollte es Ihnen hoffentlich ermöglichen, es an Ihre Bedürfnisse anzupassen.

Denken Sie daran, die Konstanten oben im Code zu ändern, damit sich Ihr ESP8266 mit Ihrem WLAN-Netzwerk und Ihrem MQTT-Broker (dem Raspberry Pi) verbinden kann.

Wenn Sie sich entschieden haben, keinen Benutzernamen und kein Kennwort für den MQTT-Broker festzulegen, laden Sie stattdessen die Datei MQTT_PublishNoPassword.zip herunter.

Schritt 6: Python-Client installieren (paho-mqtt)

Python-Client installieren (paho-mqtt)
Python-Client installieren (paho-mqtt)

Zum Glück ist dieser Schritt sehr einfach! Um den Mosquitto-Python-Client zu installieren, müssen Sie nur Folgendes in die Befehlszeile (Linux/Mac) oder sogar die Eingabeaufforderung (Windows) eingeben.

pip install paho-mqtt

Hinweis: Bei der Windows-Eingabeaufforderung kann beim Ausführen des pip-Befehls ein Problem auftreten, wenn Sie bei der Installation von Python nicht angegeben haben, dass pip installiert und Python zu Ihrer PATH-Variablen hinzugefügt werden soll. Es gibt eine Reihe von Möglichkeiten, dies zu beheben, aber ich denke, die Neuinstallation von Python ist der einfachste Weg. Im Zweifelsfall - googeln Sie es!

Schritt 7: Python-Client - Abonnieren

Python-Client - Abonnieren
Python-Client - Abonnieren

In diesem Schritt richten wir das Python-Skript (entweder auf dem Raspberry Pi selbst oder auf einem anderen mit dem Netzwerk verbundenen Computer) ein, um alle Nachrichten zu verarbeiten, die vom ESP8266 an das MQTT-Thema gesendet (veröffentlicht) werden.

Ich habe den Python-Code unten eingefügt (PythonMQTT_Subscribe.py), der kommentiert wurde, um Ihnen zu helfen, zu verstehen, was vor sich geht, aber ich werde hier auch einige der Hauptfunktionen erklären.

Wenn Sie zuvor keinen Benutzernamen und kein Kennwort für die MQTT-Verbindung festgelegt haben, laden Sie stattdessen die Datei PythonMQTT_SubscribeNoPassword.py herunter.

Schritt 8: Kommunikation zwischen ESP8266-Geräten

Kommunikation zwischen ESP8266-Geräten
Kommunikation zwischen ESP8266-Geräten

Wenn Sie beispielsweise ein IoT-Netzwerk einrichten möchten, möchten Sie möglicherweise zwischen ESP8266-Geräten kommunizieren. Zum Glück ist dies nicht viel komplexer als der Code, den wir zuvor geschrieben haben, es gibt jedoch ein paar bemerkenswerte Änderungen.

Damit ein ESP Daten an ein anderes senden kann, muss der erste ESP das Thema veröffentlichen und der zweite ESP dieses Thema abonnieren. Dieses Setup ermöglicht eine unidirektionale Konversation - ESP(1) zu ESP(2). Wenn ESP(2) mit ESP(1) kommunizieren soll, können wir ein neues Thema erstellen, das ESP(2) veröffentlicht und ESP(1) abonniert. Glücklicherweise können wir mehrere Abonnenten zum gleichen Thema haben. Wenn Sie also Daten an mehrere Systeme senden möchten, benötigen Sie nur ein Thema (das alle abonnieren, außer dem Gerät, das die Daten sendet, da dies der Fall ist) veröffentlichen).

Wenn Sie Hilfe benötigen, um herauszufinden, was jedes Gerät tun muss, stellen Sie sich das System als einen Raum voller Menschen vor. Wenn ESP(1) veröffentlicht, können Sie sich dieses Gerät als "Sprecher" vorstellen, und alle Geräte, die das Thema abonnieren, sind in diesem Beispiel "Zuhörer".

Ich habe unten einen Beispielcode eingefügt, der zeigt, wie ein ESP8266 ein Thema abonnieren und auf bestimmte Nachrichten hören kann - 1 und 0. Wenn 1 empfangen wird, wird die On-Board-LED (für den HUZZAH - GPIO 0) eingeschaltet. Wird 0 empfangen, wird diese LED ausgeschaltet.

Wenn Sie komplexere Daten verarbeiten möchten, sollte dies in der Funktion ReceivedMessage erfolgen (siehe Code).

Wenn Sie für Ihre eigenen Projekte sowohl Daten senden als auch empfangen müssen, können Sie die Veröffentlichungsfunktion aus dem vorherigen Beispiel in den in diesem Schritt enthaltenen Code integrieren. Dies sollte in der Hauptfunktion Arduino loop () behandelt werden.

Denken Sie daran, die Variablen oben im Code an Ihr Netzwerk anzupassen!

Empfohlen: