Bemerkung
Hallo und willkommen in der SunFounder Raspberry Pi & Arduino & ESP32 Enthusiasten-Gemeinschaft auf Facebook! Tauchen Sie tiefer ein in die Welt von Raspberry Pi, Arduino und ESP32 mit anderen Enthusiasten.
Warum beitreten?
Expertenunterstützung: Lösen Sie Nachverkaufsprobleme und technische Herausforderungen mit Hilfe unserer Gemeinschaft und unseres Teams.
Lernen & Teilen: Tauschen Sie Tipps und Anleitungen aus, um Ihre Fähigkeiten zu verbessern.
Exklusive Vorschauen: Erhalten Sie frühzeitigen Zugang zu neuen Produktankündigungen und exklusiven Einblicken.
Spezialrabatte: Genießen Sie exklusive Rabatte auf unsere neuesten Produkte.
Festliche Aktionen und Gewinnspiele: Nehmen Sie an Gewinnspielen und Feiertagsaktionen teil.
👉 Sind Sie bereit, mit uns zu erkunden und zu erschaffen? Klicken Sie auf [hier] und treten Sie heute bei!
Lektion 47: IoT-Kommunikation mit MQTT
Dieses Projekt konzentriert sich auf die Nutzung von MQTT, einem beliebten Kommunikationsprotokoll im Bereich des Internets der Dinge (IoT). MQTT ermöglicht es IoT-Geräten, Daten mithilfe eines Publish/Subscribe-Modells auszutauschen, wobei Geräte über Themen (Topics) kommunizieren.
In diesem Projekt erkunden wir die Implementierung von MQTT, indem wir eine Schaltung mit einer LED, einem Taster und einem Thermistor aufbauen. Der ESP32-WROOM-32E-Mikrocontroller wird verwendet, um eine Verbindung zum WLAN herzustellen und mit einem MQTT-Broker zu kommunizieren. Der Code ermöglicht es dem Mikrocontroller, bestimmte Themen zu abonnieren, Nachrichten zu empfangen und die LED basierend auf den empfangenen Informationen zu steuern. Darüber hinaus demonstriert das Projekt das Veröffentlichen von Temperaturdaten des Thermistors in einem bestimmten Thema, wenn der Taster gedrückt wird.
Benötigte Komponenten
In diesem Projekt benötigen wir die folgenden Komponenten.
Es ist definitiv praktisch, ein komplettes Kit zu kaufen, hier ist der Link:
Name |
ITEMS IN THIS KIT |
LINK |
|---|---|---|
Universal Maker Sensor Kit |
94 |
Sie können sie auch einzeln über die folgenden Links kaufen.
COMPONENT INTRODUCTION |
PURCHASE LINK |
|---|---|
ESP32 & Development Board |
|
- |
|
- |
Code-Upload
Bauen Sie die Schaltung auf.
Bemerkung
Beim Herstellen einer Verbindung zum WLAN können nur die Pins 36, 39, 34, 35, 32, 33 für das analoge Lesen verwendet werden. Bitte stellen Sie sicher, dass der Thermistor an diese bestimmten Pins angeschlossen ist.
Verbinden Sie dann den ESP32-WROOM-32E mit dem USB-Kabel mit dem Computer.
Öffnen Sie den Code.
Öffnen Sie die Datei
Lesson_47_MQTT.inoim Verzeichnisuniversal-maker-sensor-kit\esp32\Lesson_47_MQTToder kopieren Sie den Code in die Arduino IDE.Nachdem Sie das Board (ESP32 Dev Module) und den entsprechenden Port ausgewählt haben, klicken Sie auf die Schaltfläche Upload.
Die Bibliothek
PubSubClientwird hier verwendet und kann über den Library Manager installiert werden.
Suchen Sie die folgenden Zeilen und passen Sie sie mit Ihrem
<SSID>und<PASSWORD>an.// Replace the next variables with your SSID/Password combination const char* ssid = "<SSID>"; const char* password = "<PASSWORD>";
Suchen Sie die nächste Zeile und passen Sie Ihren
unique_identifieran. Stellen Sie sicher, dass Ihrunique_identifierwirklich einzigartig ist, da identische IDs, die versuchen, sich beim selben MQTT-Broker anzumelden, zu einem Anmeldefehler führen können.// Add your MQTT Broker address, example: const char* mqtt_server = "broker.hivemq.com"; const char* unique_identifier = "sunfounder-client-sdgvsda";
Topic-Abonnement
Um Störungen durch Nachrichten anderer Teilnehmer zu vermeiden, können Sie einen ungewöhnlichen oder seltenen String festlegen. Ersetzen Sie einfach das aktuelle Topic
SF/LEDdurch Ihren gewünschten Topic-Namen.Bemerkung
Sie haben die Freiheit, das Topic auf beliebige Zeichen zu setzen. Jedes MQTT-Gerät, das dasselbe Topic abonniert hat, kann dieselbe Nachricht empfangen. Sie können auch gleichzeitig mehrere Topics abonnieren.
void reconnect() { // Loop until we're reconnected while (!client.connected()) { Serial.print("Attempting MQTT connection..."); // Attempt to connect if (client.connect(unique_identifier)) { Serial.println("connected"); // Subscribe client.subscribe("SF/LED"); } else { Serial.print("failed, rc="); Serial.print(client.state()); Serial.println(" try again in 5 seconds"); // Wait 5 seconds before retrying delay(5000); } } }
Ändern Sie die Funktionalität, um auf das abonnierte Topic zu reagieren. Im bereitgestellten Code wird, wenn eine Nachricht auf dem Topic
SF/LEDempfangen wird, überprüft, ob die Nachrichtonoderoffist. Abhängig von der empfangenen Nachricht ändert sich der Ausgangszustand, um den LED-Status zu steuern.Bemerkung
Sie können es für jedes abonniertes Topic anpassen und mehrere if-Anweisungen schreiben, um auf mehrere Topics zu reagieren.
void callback(char* topic, byte* message, unsigned int length) { Serial.print("Message arrived on topic: "); Serial.print(topic); Serial.print(". Message: "); String messageTemp; for (int i = 0; i < length; i++) { Serial.print((char)message[i]); messageTemp += (char)message[i]; } Serial.println(); // If a message is received on the topic "SF/LED", you check if the message is either "on" or "off". // Changes the output state according to the message if (String(topic) == "SF/LED") { Serial.print("Changing state to "); if (messageTemp == "on") { Serial.println("on"); digitalWrite(ledPin, HIGH); } else if (messageTemp == "off") { Serial.println("off"); digitalWrite(ledPin, LOW); } } }
Nachdem Sie das richtige Board (ESP32 Dev Module) und den entsprechenden Port ausgewählt haben, klicken Sie auf die Schaltfläche Upload.
Öffnen Sie den seriellen Monitor. Wenn die folgende Information ausgegeben wird, bedeutet dies, dass die Verbindung zum MQTT-Server erfolgreich hergestellt wurde.
WiFi connected IP address: 192.168.18.77 Attempting MQTT connection...connected
Nachrichtenübermittlung über HiveMQ
HiveMQ ist eine Messaging-Plattform, die als MQTT-Broker fungiert und eine schnelle, effiziente und zuverlässige Datenübertragung zu IoT-Geräten ermöglicht.
Unser Code nutzt den von HiveMQ bereitgestellten MQTT-Broker. Wir haben die Adresse des HiveMQ MQTT-Brokers im Code wie folgt eingefügt:
// Add your MQTT Broker address, example: const char* mqtt_server = "broker.hivemq.com";
Öffnen Sie nun HiveMQ Web Client in Ihrem Webbrowser.
Verbinden Sie den Client mit dem Standard-Öffentlichkeits-Proxy.
Veröffentlichen Sie eine Nachricht im abonnierten Topic. In diesem Projekt können Sie
onoderoffveröffentlichen, um Ihre LED zu steuern.
Nachrichtenübermittlung an MQTT
Wir können den Code auch nutzen, um Informationen an das Topic zu senden. In dieser Demonstration haben wir eine Funktion programmiert, die eine einfache Nachricht an das Topic sendet, wenn Sie die Taste drücken.
Klicken Sie auf Add New Topic Subscription.
Füllen Sie die gewünschten Topics aus und klicken Sie auf Subscribe. Im Code senden wir eine Nachricht an das Topic
SF/TEMP.void loop() { if (!client.connected()) { reconnect(); } client.loop(); // if the button pressed, publish the temperature to topic "SF/TEMP" if (digitalRead(buttonPin)) { long now = millis(); if (now - lastMsg > 5000) { lastMsg = now; char tempString[8]; strcpy(tempString,"hello"); client.publish("SF/TEMP", tempString); } } }
Daher können wir dieses Topic auf HiveMQ überwachen und die Informationen anzeigen, die Sie veröffentlicht haben.