MQTT-Kommunikation zwischen NodeMCU und Raspberry Pi 3 B+
Verwenden von MQTT, NodeMCU, DHT22, RaspberryPi und IoT MQTT Panel zur Überwachung von Temperatur und Luftfeuchtigkeit.
Verwendung eines Raspberry Pi 3 B+ als Broker für mehrere NodeMCU mit DHT-22-Sensoren, die Temperatur und Luftfeuchtigkeit messen und in der IoT MQTT Panel App überwachen. Ich habe den Algorithmus für NodeMCU und Raspberry eskalierbar gemacht. Ändern Sie einfach die veröffentlichten und abonnierten Themen und fügen Sie die IoT MQTT Panel App hinzu, um alle Daten jederzeit zur Hand zu haben.
Ich habe im Internet nach vielen Informationen gesucht, da ich keine Kenntnisse über Himbeere, Python und MQTT habe. Also habe ich alles, was ich gelernt habe, zusammengefasst und diesen Websites Anerkennung geschenkt.
Wenn Ihre Internetverbindung unterbrochen wird, senden Ihre Sensoren weiterhin Daten an Ihren Broker. Das heißt, Sie können Ihre Daten speichern!!! (natürlich musst du etwas programmieren)
Bitte folgen Sie mir für alle Updates. Bald werde ich ein Video von allem posten, was läuft!
1. Dinge verbinden:
So wird Ihr Netzwerk aussehen:
2. Dinge programmieren:
Zuerst müssen Sie sicherstellen, dass alle Bibliotheken auf Ihrer Arduino IDE und auf Ihrem Raspberry Pi 3B+ installiert sind.
2.1 Arduino
Installieren Sie die Bibliotheken auf Ihrer Arduino-IDE.
- MQTT – https://github.com/knolleary/pubsubclient/releases/tag/v2.7
- DHT-Sensorbibliothek: https://github.com/adafruit/DHT-sensor-library
- Adafruit Unified Sensor Lib: https://github.com/adafruit/Adafruit_Sensor
- Esp8266 – https://github.com/esp8266/Arduino/tree/master/libraries/ESP8266WiFi
2.2 Raspberry Pi 3 b+
Installieren Sie die Bibliotheken auf Ihrer Python-IDE.
- time – Native Bibliothek auf Python
- Paho MQTT – Geben Sie „pip install paho-mqtt“ auf Ihrem LX-Terminal ein, um die MQTT-Bibliothek zu installieren. Wenn Sie Zweifel haben, ist diese Website FANTASTISCH !! http://www.steves-internet-guide.com/mqtt/
2.3 Hochladen von Codes
Laden Sie die Codes jeweils auf Ihre NodeMCU und Ihren Raspberry hoch.
2.4 Erklären des Codes – ARDUINO IDE
Dies sind die zuvor erwähnten Bibliotheken, die auf Ihrer Arduino-IDE installiert werden sollen.
#include // Esp8266/NodeMCU Library#include // MQTT Library#include "DHT.h" // DHT Sensor
Variablen, die im gesamten Code verwendet werden sollen:
const char* mqtt_server ="Broker_IP_Address"; // MQTT-Server-IP-Adresse
mqtt_server :Um die IP-Adresse auf Raspberry Pi zu erhalten, öffnen Sie einen Terminalbildschirm und geben Sie Folgendes ein:
[email protected]:~ $ ifconfigwlan0:flags=4163 mtu 1500 inet 192.168.1.200 Netzmaske 255.255.255.0 Broadcast 192.168.1.255
In diesem Beispiel wäre die IP-Adresse 192.168.1.200
const char* clientID ="room1"; // Die Client-ID identifiziert das NodeMCU-Gerät.
clientID :Ein beliebiger Name oder eine beliebige Nummer zur Identifizierung der von Ihnen verwendeten NodeMCU. In diesem Fall befindet es sich in Raum1. Also heißt es room1.
const char* topicT ="/room1/temperature"; // Topic temperatureconst char* topicH ="/room1/humidity"; // Thema Luftfeuchtigkeit
thema :Thema zur Veröffentlichung der Temperatur. In diesem Beispiel für die Raumtemperatur lautet das Thema „/Raum1/Temperatur“.
ThemaH :Thema Luftfeuchtigkeit zu veröffentlichen. In diesem Beispiel für Raum1 Luftfeuchtigkeit lautet das Thema „/Raum1/Feuchtigkeit“.
const char* willTopic ="/room1/status"; // Thema Statusconst char* willMessage ="0"; // 0 - Getrennt
willTopic :Thema zur Veröffentlichung des Testaments. Dies wird verwendet, um zu überprüfen, ob die NodeMCU angeschlossen/eingeschaltet ist. Wenn die Verbindung getrennt wird, wird die willMessage . veröffentlicht zum willTopic. In diesem Fall „/room1/status“
willMessage :Nachricht wird auf willTopic veröffentlicht wenn die NodeMCU getrennt/ausgeschaltet ist.
int willQoS =0;boolean willRetain =true;
willQoS :Wird verwendet, um die Dienstqualität einzustellen. In diesem Fall 0.
wird behalten :Wird verwendet, um die Nachricht im Falle einer Trennung aufzubewahren. Auf Wahr setzen.
int counter =0; // Wird verwendet, um die Verbindung zum MQTT-Server wieder herzustellen const char* swversion ="1.0"; // Softwareversion
Zähler :Zähler, der bei der Wiederverbindungsroutine verwendet wird.
swversion :verwendet, um meine Software-Revision zu kontrollieren.
WiFiClient wifiClient;PubSubClient client(mqtt_server, 1883, wifiClient); // 1883 ist der Listener-Port für den Broker
wifiClient :Erstellt einen Client, der eine Verbindung zu einer angegebenen Internet-IP-Adresse und einem angegebenen Port herstellen kann, wie in client.connect() definiert.
client() :Client ist die Basisklasse für alle WiFi-Client-basierten Anrufe. Es wird nicht direkt aufgerufen, sondern immer dann aufgerufen, wenn Sie eine darauf basierende Funktion verwenden.
DHT dhtA(2, DHT22); // DHT-Instanz namens dhtA, Pin auf NodeMCU D4 und Sensortyp
DHT :Erstellt eine Instanz namens dhtA und weist Pin 2 der NodeMCU V3 (D4) des Sensors DHT-22 zu. Gemäß den unten stehenden Schemata. Wenn Sie einen anderen Pin verwenden möchten, ändern Sie den Wert auf den richtigen Pin. Bevor Sie den verwendeten Pin ändern, überprüfen Sie die unten stehende Pinbelegung, um den richtigen Pin zuzuweisen.
- Mit Pin D2 -> GPIO4
- DHT dhtA(4, DHT22)
Wenn Sie DHT-11 verwenden, wäre dies:
- Mit Pin D2 -> GPIO4
- DHT dhtA(4, DHT11)
HINWEIS: Wenn Sie dieselbe Bibliothek verwenden wie ich. Wenn Sie eine andere Bibliothek verwenden, lesen Sie bitte in der Bibliotheksdokumentation nach, wie Sie Pins und Sensoren als verwendet deklarieren sollten.
Einrichtung ungültig() :Hier initialisieren wir die Dinge.
void setup() {Serial.begin(9600); // Debug-Zwecke prüfen, ob DHT und Verbindung mit MQTT Broker funktionierenSerial.print(swversion); // Debug. SoftwareversiondhtA.begin(); // Starten des DHT-22
Verbindung mit MQTT-Broker herstellen.
Verzögerung(2000); // Verzögerung, um die erste Verbindung mit MQTT Broker zuzulassen
Verspätung(2000) :Erhöhen Sie die Zeit, wenn die erste Verbindung fehlschlägt. In diesem Fall erlaubt 2000 der NodeMCU, sich mit dem Broker zu verbinden.
if (client.connect(clientID,"","", willTopic, willQoS, willRetain, willMessage, true)) { // Verbindung mit MQTT Broker
client.connect() :unten erklärt. Aus: https://pubsubclient.knolleary.net/api.html#connect5
____________________________________________________________
Boolesche Verbindung (clientID, Benutzername, Passwort, willTopic, willQoS, willRetain, willMessage, cleanSession)
Verbindet den Client mit einer Will-Nachricht, einem Benutzernamen, einem Passwort und einem Flag für eine saubere Sitzung.
Hinweis :auch wenn die cleanSession
ist auf false
eingestellt /0
der Kunde wird nicht qos 1-Veröffentlichungen sind fehlgeschlagen. Dieses Flag ist nur von Nutzen, um Abonnements auf dem Broker aufrechtzuerhalten.
Parameter
- clientID :die Client-ID, die beim Herstellen einer Verbindung zum Server verwendet wird.
- Benutzername :der zu verwendende Benutzername. Bei NULL wird kein Benutzername oder Passwort verwendet (const char[])
- password :das zu verwendende Passwort. Bei NULL wird kein Passwort verwendet (const char[])
- willTopic :das von der Willensnachricht zu verwendende Thema (const char[])
- willQoS :die von der Willensnachricht zu verwendende Dienstqualität (int :0,1 oder 2)
- willRetain :ob das Testament mit dem Retain Flag veröffentlicht werden soll (int :0 oder 1)
- willMessage :die Nutzlast der Willensnachricht (const char[])
- cleanSession :ob clean-session verbunden werden soll oder nicht (boolean)
Rückgabe
- falsch – Verbindung fehlgeschlagen.
- wahr – Verbindung erfolgreich.
Quelle:MQTT-Kommunikation zwischen NodeMCU und Raspberry Pi 3 B+
Herstellungsprozess
- Python- und Raspberry Pi-Temperatursensor
- Raspberry Pi Temperatur- und Lichtsensor
- Raspberry Pi Sensor- und Aktuatorsteuerung
- NEUES HIMBEE PI 3 MODELL B + FUNKTIONEN UND KAUF
- Roboter bauen mit Raspberry Pi und Python
- Unterschied zwischen Galvanisieren und Eloxieren
- Unterschied zwischen Nichteisen- und Eisenmetallen
- Unterschied zwischen Hartlöten und Weichlöten
- Unterschied zwischen Bohren, Bohren und Reiben
- Unterschied zwischen Hobelmaschine und Hobelmaschine