Arduino UNO R4 - MQTT

In diesem Tutorial lernen wir, wie man den Arduino UNO R4 verwendet, um Daten an einen MQTT-Broker zu senden und von ihm zu empfangen, wobei das MQTT-Protokoll verwendet wird. Wir werden die folgenden Details behandeln:

Arduino UNO R4 MQTT

Wir werden uns zwei verschiedene Beispiele ansehen:

Erforderliche Hardware

1×Arduino UNO R4 WiFi
1×Alternativ: DIYables STEM V4 IoT
1×USB-Kabel Typ-A zu Typ-C (für USB-A PC)
1×USB-Kabel Typ-C zu Typ-C (für USB-C PC)
1×(Empfohlen) Schraubklemmenblock-Shield für Arduino Uno R4
1×(Empfohlen) Breadboard-Shield für Arduino Uno R4
1×(Empfohlen) Gehäuse für Arduino Uno R4
1×(Empfohlen) Stromverteiler für Arduino Uno R4
1×(Empfohlen) Prototyping-Grundplatte & Breadboard-Kit für Arduino Uno

Oder Sie können die folgenden Kits kaufen:

1×DIYables STEM V4 IoT Starter-Kit (Arduino enthalten)
1×DIYables Sensor-Kit (30 Sensoren/Displays)
1×DIYables Sensor-Kit (18 Sensoren/Displays)
Offenlegung: Einige der in diesem Abschnitt bereitgestellten Links sind Amazon-Affiliate-Links. Wir können eine Provision für Käufe erhalten, die über diese Links getätigt werden, ohne zusätzliche Kosten für Sie. Wir schätzen Ihre Unterstützung.

Über Arduino UNO R4 und MQTT

Wir werden lernen, wie man einen Arduino UNO R4 programmiert, um Daten über einen MQTT-Broker (auch als MQTT-Server bezeichnet) zu senden und zu empfangen. Der MQTT-Broker kann Folgendes sein:

  • MQTT-Broker im Internet, z. B. Mosquitto oder AWS IoT.
  • MQTT-Broker auf Ihrem Computer eingerichtet, wie Mosquitto oder HiveMQ.
  • MQTT-Broker, der auf Ihrem Raspberry Pi läuft, z. B. Mosquitto.
  • MQTT-Broker in der Cloud, z. B. Mosquitto oder HiveMQ auf AWS EC2.

In diesem Leitfaden beginnen wir damit zu prüfen, ob der Arduino UNO R4 eine Verbindung zu einem Mosquitto-Broker im Internet herstellen kann. Der Arduino UNO R4 wird Nachrichten an diesen Broker senden und von diesem Broker über das Internet empfangen.

Als Nächstes installieren wir den Mosquitto-Broker auf unserem Computer. Danach verbinden wir den Arduino UNO R4 mit dem MQTT-Broker auf unserem Computer. Wir verwenden ihn, um über diesen lokalen Broker Daten zu senden und zu empfangen.

Verbinde Arduino UNO R4 mit einem Online-MQTT-Broker

In diesem Abschnitt erfahren wir, wie man Arduino UNO R4 mit test.mosquitto.org verbindet, einem Online-MQTT-Dienst von Mosquitto. Beachte, dass dieser Dienst nur zum Testen gedacht ist.

Arduino UNO R4 Quellcode

Dieser Arduino UNO R4-Code führt die folgenden Aufgaben aus:

  • Mit dem MQTT-Broker verbinden
  • Auf ein Thema abonnieren
  • Regelmäßig Nachrichten an dasselbe Thema senden, auf das Sie abonniert haben
/* * Dieser Arduino UNO R4 Code wurde von newbiely.de entwickelt * Dieser Arduino UNO R4 Code wird der Öffentlichkeit ohne jegliche Einschränkung zur Verfügung gestellt. * Für vollständige Anleitungen und Schaltpläne besuchen Sie bitte: * https://newbiely.de/tutorials/arduino-uno-r4/arduino-uno-r4-mqtt */ #include <WiFiS3.h> #include <MQTTClient.h> #include <ArduinoJson.h> const char WIFI_SSID[] = "YOUR_WIFI_SSID"; // CHANGE TO YOUR WIFI SSID const char WIFI_PASSWORD[] = "YOUR_WIFI_PASSWORD"; // CHANGE TO YOUR WIFI PASSWORD const char MQTT_BROKER_ADRRESS[] = "test.mosquitto.org"; // CHANGE TO MQTT BROKER'S ADDRESS const int MQTT_PORT = 1883; const char MQTT_CLIENT_ID[] = "YOUR-NAME-arduino-uno-r4"; // CHANGE IT AS YOU DESIRE const char MQTT_USERNAME[] = ""; // CHANGE IT IF REQUIRED, empty if not required const char MQTT_PASSWORD[] = ""; // CHANGE IT IF REQUIRED, empty if not required // The MQTT topics that Arduino should publish/subscribe const char PUBLISH_TOPIC[] = "YOUR-NAME-arduino-uno-r4/loopback"; // CHANGE IT AS YOU DESIRE const char SUBSCRIBE_TOPIC[] = "YOUR-NAME-arduino-uno-r4/loopback"; // CHANGE IT AS YOU DESIRE const int PUBLISH_INTERVAL = 5000; // 5 seconds WiFiClient network; MQTTClient mqtt = MQTTClient(256); unsigned long lastPublishTime = 0; void setup() { Serial.begin(9600); int status = WL_IDLE_STATUS; while (status != WL_CONNECTED) { Serial.print("Arduino UNO R4 - Attempting to connect to SSID: "); Serial.println(WIFI_SSID); // Connect to WPA/WPA2 network. Change this line if using open or WEP network: status = WiFi.begin(WIFI_SSID, WIFI_PASSWORD); // wait 5 seconds for connection: delay(5000); } // print your board's IP address: Serial.print("IP Address: "); Serial.println(WiFi.localIP()); connectToMQTT(); } void loop() { mqtt.loop(); if (millis() - lastPublishTime > PUBLISH_INTERVAL) { sendToMQTT(); lastPublishTime = millis(); } } void connectToMQTT() { // Connect to the MQTT broker mqtt.begin(MQTT_BROKER_ADRRESS, MQTT_PORT, network); // Create a handler for incoming messages mqtt.onMessage(messageHandler); Serial.print("Arduino UNO R4 - Connecting to MQTT broker"); while (!mqtt.connect(MQTT_CLIENT_ID, MQTT_USERNAME, MQTT_PASSWORD)) { Serial.print("."); delay(100); } Serial.println(); if (!mqtt.connected()) { Serial.println("Arduino UNO R4 - MQTT broker Timeout!"); return; } // Subscribe to a topic, the incoming messages are processed by messageHandler() function if (mqtt.subscribe(SUBSCRIBE_TOPIC)) Serial.print("Arduino UNO R4 - Subscribed to the topic: "); else Serial.print("Arduino UNO R4 - Failed to subscribe to the topic: "); Serial.println(SUBSCRIBE_TOPIC); Serial.println("Arduino UNO R4 - MQTT broker Connected!"); } void sendToMQTT() { StaticJsonDocument<200> message; message["timestamp"] = millis(); message["data"] = analogRead(0); // Or you can read data from other sensors char messageBuffer[512]; serializeJson(message, messageBuffer); mqtt.publish(PUBLISH_TOPIC, messageBuffer); Serial.println("Arduino UNO R4 - sent to MQTT:"); Serial.print("- topic: "); Serial.println(PUBLISH_TOPIC); Serial.print("- payload:"); Serial.println(messageBuffer); } void messageHandler(String &topic, String &payload) { Serial.println("Arduino UNO R4 - received from MQTT:"); Serial.println("- topic: " + topic); Serial.println("- payload:"); Serial.println(payload); }

Schnelle Schritte

Folgen Sie diesen Anweisungen Schritt für Schritt:

  • Wenn Sie zum ersten Mal den Arduino Uno R4 WiFi/Minima verwenden, lesen Sie das Tutorial zum Einrichten der Umgebung für Arduino Uno R4 WiFi/Minima in der Arduino IDE Einrichten der Umgebung für Arduino Uno R4 WiFi/Minima in der Arduino IDE.
  • Verbinden Sie das Arduino Uno R4-Board über ein USB-Kabel mit Ihrem Computer.
  • Starten Sie die Arduino IDE auf Ihrem Computer.
  • Wählen Sie das passende Arduino Uno R4-Board (z. B. Arduino Uno R4 WiFi) und den COM-Port aus.
  • Klicken Sie auf das Symbol 'Library Manager', das sich links in der Arduino IDE befindet, um es zu öffnen.
  • Geben Sie im Suchfeld MQTT ein und suchen Sie nach der MQTT-Bibliothek von Joel Gaehwiler.
  • Klicken Sie auf die Install-Schaltfläche, um die MQTT-Bibliothek hinzuzufügen.
Arduino UNO R4 MQTT-Bibliothek
  • Suchen Sie im Suchfeld nach ArduinoJson und finden Sie die ArduinoJson-Bibliothek von Benoit Blanchon. Dann klicken Sie auf die Schaltfläche Installieren, um die Bibliothek zu installieren.
Arduino UNO R4 JSON-Bibliothek
  • Kopieren Sie den Code und öffnen Sie ihn in der Arduino-IDE.
  • Ändern Sie die WiFi-Daten (SSID und Passwort) im Code auf Ihre eigenen WLAN-Zugangsdaten.
  • Sie finden 'YOUR-NAME' dreimal im Code. Ersetzen Sie es durch Ihren Namen oder beliebige Buchstaben (keine Leerzeichen). Diese Änderung ist wichtig, um Konflikte durch mehrere Benutzer zu vermeiden, die denselben Code ausführen.
  • Klicken Sie auf die Hochladen-Schaltfläche in der Arduino-IDE, um den Code auf Ihren Arduino UNO R4 hochzuladen.
  • Öffnen Sie den Serial Monitor.
  • Überprüfen Sie die Ergebnisse im Serial Monitor.
COM6
Send
IP Address: 192.168.0.2 Arduino UNO R4 - Connecting to MQTT broker Arduino UNO R4 - Subscribed to the topic: YOUR-NAME-arduino-uno-r4/loopback Arduino UNO R4 - MQTT broker Connected! Arduino UNO R4 - sent to MQTT: - topic: YOUR-NAME-arduino-uno-r4/loopback - payload:{"timestamp":11757,"data":255} Arduino UNO R4 - received from MQTT: - topic: YOUR-NAME-arduino-uno-r4/loopback - payload: {"timestamp":11757,"data":255} Arduino UNO R4 - sent to MQTT: - topic: YOUR-NAME-arduino-uno-r4/loopback - payload:{"timestamp":16896,"data":259} Arduino UNO R4 - received from MQTT: - topic: YOUR-NAME-arduino-uno-r4/loopback - payload: {"timestamp":16896,"data":259}
Autoscroll Show timestamp
Clear output
9600 baud  
Newline  

Der Arduino UNO R4 sendet Nachrichten an den MQTT-Broker und erhält dann dieselbe Nachricht zurück. Das passiert, weil es so eingestellt ist, Nachrichten vom gleichen Thema zu empfangen, zu dem es sie sendet. Wenn Sie nicht möchten, dass der Arduino UNO R4 seine eigenen Nachrichten empfängt, verwenden Sie einfach verschiedene Themen zum Senden und Empfangen.

Verbinden Sie Arduino UNO R4 mit dem MQTT-Broker, der auf Ihrem PC installiert ist

Mosquitto MQTT-Broker installieren

  • Laden Sie den Mosquitto MQTT Broker herunter
  • Installieren Sie ihn auf dem Laufwerk D:, nicht auf dem Laufwerk C:. Dies hilft, mögliche Probleme zu vermeiden.

Mosquitto MQTT-Broker starten

Lassen Sie uns nun prüfen, ob der MQTT-Broker ordnungsgemäß funktioniert, indem wir diese Schritte ausführen:

  • Navigieren Sie zu dem Ordner, in dem Sie Mosquitto installiert haben, z. B. D:\Draft\mosquitto. Erstellen Sie eine Datei namens test.conf, fügen Sie die folgenden Details hinein und speichern Sie die Datei in diesem Ordner.
listener 1883 allow_anonymous true
  • Öffnen Sie eine Eingabeaufforderung als Administrator auf Ihrem Computer. Bezeichnen Sie sie als „Broker Window“. Schließen Sie dieses Fenster erst, nachdem Sie das Tutorial beendet haben.
Administrator der Windows-Eingabeaufforderung
  • Führen Sie die folgenden Befehle der Reihe nach aus:
cd /d D:\Draft\mosquitto mosquitto -v -c test.conf
  • Du wirst feststellen:
Command Prompt
Microsoft Windows [Version 10.0.19045.3930] (c) Microsoft Corporation. All rights reserved. C:\WINDOWS\system32>cd /d D:\Draft\mosquitto D:\Draft\mosquitto>mosquitto -v -c test.conf 1710918939: mosquitto version 2.0.18 starting 1710918939: Config loaded from test.conf. 1710918939: Opening ipv6 listen socket on port 1883. 1710918939: Opening ipv4 listen socket on port 1883. 1710918939: mosquitto version 2.0.18 running
  • Öffnen Sie eine neue Eingabeaufforderung als Administrator auf Ihrem Computer.
  • Um die IP-Adresse Ihres Computers zu finden, führen Sie diesen Befehl aus:
ipconfig
Command Prompt
C:\WINDOWS\system32>ipconfig Windows IP Configuration Ethernet adapter: Subnet Mask . . . . . . . . . . . : 255.0.0.0 IPv4 Address. . . . . . . . . . . : 192.168.0.11 Subnet Mask . . . . . . . . . . . : 255.255.255.0 Default Gateway . . . . . . . . . :
  • Bitte beachten Sie die IP-Adresse zur zukünftigen Referenz. Im bereitgestellten Beispiel: 192.168.0.11.

Prüfe, ob der Mosquitto-Broker funktioniert

  • Öffnen Sie eine weitere Eingabeaufforderung als Administrator auf Ihrem Computer. Wir bezeichnen sie als "Subscriber Window".
  • Um ein Thema zu abonnieren, geben Sie nacheinander die folgenden Befehle ein, wobei Sie "your IP address" durch Ihre tatsächliche IP-Adresse ersetzen:
cd /d D:\Draft\mosquitto mosquitto_sub -h 192.168.0.11 -p 1883 -t arduino-uno-r4/send
  • Öffnen Sie eine zusätzliche Eingabeaufforderung mit Administratorrechten auf Ihrem Computer. Benennen Sie sie Verlegerfenster.
  • Um eine Nachricht im gleichen Thema zu veröffentlichen, führen Sie die folgenden Befehle der Reihe nach aus (ersetzen Sie dabei die IP-Adresse durch Ihre eigene):
cd /d D:\Draft\mosquitto mosquitto_pub -h 192.168.0.11 -p 1883 -t arduino-uno-r4/send -m "Hello, MQTT!"
  • Sie werden bemerken:
Command Prompt
Microsoft Windows [Version 10.0.19045.3930] (c) Microsoft Corporation. All rights reserved. C:\WINDOWS\system32>cd /d D:\Draft\mosquitto D:\Draft\mosquitto>mosquitto_pub -h 192.168.0.11 -p 1883 -t arduino-uno-r4/send -m "Hello, MQTT!" D:\Draft\mosquitto>

Die Nachricht wird an das Abonnentenfenster wie folgt gesendet:

Command Prompt
Microsoft Windows [Version 10.0.19045.3930] (c) Microsoft Corporation. All rights reserved. C:\WINDOWS\system32>cd /d D:\Draft\mosquitto D:\Draft\mosquitto>mosquitto_sub -h 192.168.0.11 -p 1883 -t arduino-uno-r4/send Hello, MQTT!

Sie haben den Mosquitto MQTT-Broker erfolgreich auf Ihrem PC installiert. Bitte schließen Sie nicht drei Fenster: Broker-Fenster, Abonnenten-Fenster und Publisher-Fenster. Wir werden sie als Nächstes verwenden.

Arduino UNO R4-Quellcode

Der folgende Code ist für Arduino UNO R4 und führt Folgendes aus:

  • Mit dem MQTT-Broker verbinden
  • Ein Topic abonnieren
  • Regelmäßig Nachrichten an ein anderes Topic senden
/* * Dieser Arduino UNO R4 Code wurde von newbiely.de entwickelt * Dieser Arduino UNO R4 Code wird der Öffentlichkeit ohne jegliche Einschränkung zur Verfügung gestellt. * Für vollständige Anleitungen und Schaltpläne besuchen Sie bitte: * https://newbiely.de/tutorials/arduino-uno-r4/arduino-uno-r4-mqtt */ #include <WiFiS3.h> #include <MQTTClient.h> #include <ArduinoJson.h> const char WIFI_SSID[] = "YOUR_WIFI_SSID"; // CHANGE TO YOUR WIFI SSID const char WIFI_PASSWORD[] = "YOUR_WIFI_PASSWORD"; // CHANGE TO YOUR WIFI PASSWORD //const char MQTT_BROKER_ADRRESS[] = "test.mosquitto.org"; // CHANGE TO MQTT BROKER'S ADDRESS const char MQTT_BROKER_ADRRESS[] = "192.168.0.11"; // CHANGE TO MQTT BROKER'S IP ADDRESS const int MQTT_PORT = 1883; const char MQTT_CLIENT_ID[] = "arduino-uno-r4"; // CHANGE IT AS YOU DESIRE const char MQTT_USERNAME[] = ""; // CHANGE IT IF REQUIRED, empty if not required const char MQTT_PASSWORD[] = ""; // CHANGE IT IF REQUIRED, empty if not required // The MQTT topics that Arduino should publish/subscribe const char PUBLISH_TOPIC[] = "arduino-uno-r4/send"; // CHANGE IT AS YOU DESIRE const char SUBSCRIBE_TOPIC[] = "arduino-uno-r4/receive"; // CHANGE IT AS YOU DESIRE const int PUBLISH_INTERVAL = 5000; // 5 seconds WiFiClient network; MQTTClient mqtt = MQTTClient(256); unsigned long lastPublishTime = 0; void setup() { Serial.begin(9600); int status = WL_IDLE_STATUS; while (status != WL_CONNECTED) { Serial.print("Arduino UNO R4 - Attempting to connect to SSID: "); Serial.println(WIFI_SSID); // Connect to WPA/WPA2 network. Change this line if using open or WEP network: status = WiFi.begin(WIFI_SSID, WIFI_PASSWORD); // wait 10 seconds for connection: delay(10000); } // print your board's IP address: Serial.print("IP Address: "); Serial.println(WiFi.localIP()); connectToMQTT(); } void loop() { mqtt.loop(); if (millis() - lastPublishTime > PUBLISH_INTERVAL) { sendToMQTT(); lastPublishTime = millis(); } } void connectToMQTT() { // Connect to the MQTT broker mqtt.begin(MQTT_BROKER_ADRRESS, MQTT_PORT, network); // Create a handler for incoming messages mqtt.onMessage(messageHandler); Serial.print("Arduino UNO R4 - Connecting to MQTT broker"); while (!mqtt.connect(MQTT_CLIENT_ID, MQTT_USERNAME, MQTT_PASSWORD)) { Serial.print("."); delay(100); } Serial.println(); if (!mqtt.connected()) { Serial.println("Arduino UNO R4 - MQTT broker Timeout!"); return; } // Subscribe to a topic, the incoming messages are processed by messageHandler() function if (mqtt.subscribe(SUBSCRIBE_TOPIC)) Serial.print("Arduino UNO R4 - Subscribed to the topic: "); else Serial.print("Arduino UNO R4 - Failed to subscribe to the topic: "); Serial.println(SUBSCRIBE_TOPIC); Serial.println("Arduino UNO R4 - MQTT broker Connected!"); } void sendToMQTT() { StaticJsonDocument<200> message; message["timestamp"] = millis(); message["data"] = analogRead(0); // Or you can read data from other sensors char messageBuffer[512]; serializeJson(message, messageBuffer); mqtt.publish(PUBLISH_TOPIC, messageBuffer); Serial.println("Arduino UNO R4 - sent to MQTT:"); Serial.print("- topic: "); Serial.println(PUBLISH_TOPIC); Serial.print("- payload:"); Serial.println(messageBuffer); } void messageHandler(String &topic, String &payload) { Serial.println("Arduino UNO R4 - received from MQTT:"); Serial.println("- topic: " + topic); Serial.println("- payload:"); Serial.println(payload); // You can process the incoming data as json object, then control something /* StaticJsonDocument<200> doc; deserializeJson(doc, payload); const char* message = doc["message"]; */ }

Schnelle Schritte

  • Kopieren Sie den obigen Code und öffnen Sie ihn in der Arduino IDE.
  • Passen Sie die WiFi-Details (SSID und Passwort) im Code an Ihr eigenes Netzwerk an.
  • Ändern Sie die MQTT-Brokeradresse im Code (entweder Domänenname oder IP-Adresse).
  • Klicken Sie in der Arduino IDE auf die Schaltfläche Hochladen, um den Code an Ihr Arduino UNO R4 zu senden.

Nachricht vom Arduino UNO R4 an den PC über MQTT senden

Der Arduino UNO R4 sendet Informationen an das MQTT-Thema mit dem Namen „arduino-uno-r4/send“. Auf einem Computer abonniert das Abonnentenfenster dieses Themas, um die Daten zu empfangen.

  • Öffnen Sie den seriellen Monitor, um zu sehen, dass der Arduino UNO R4 regelmäßig eine Nachricht an ein Thema sendet.
COM6
Send
IP Address: 192.168.0.2 Arduino UNO R4 - Connecting to MQTT broker Arduino UNO R4 - Subscribed to the topic: arduino-uno-r4/receive Arduino UNO R4 - MQTT broker Connected! Arduino UNO R4 - sent to MQTT: - topic: arduino-uno-r4/send - payload:{"timestamp":10708,"data":311} Arduino UNO R4 - sent to MQTT: - topic: arduino-uno-r4/send - payload:{"timestamp":15837,"data":298} Arduino UNO R4 - sent to MQTT: - topic: arduino-uno-r4/send - payload:{"timestamp":20965,"data":291} Arduino UNO R4 - sent to MQTT: - topic: arduino-uno-r4/send - payload:{"timestamp":26094,"data":286}
Autoscroll Show timestamp
Clear output
9600 baud  
Newline  
  • Schau dir das Abonnentenfenster an, und du wirst feststellen, dass es die vom Arduino UNO R4 gesendete Nachricht so anzeigt:
Command Prompt
Microsoft Windows [Version 10.0.19045.3930] (c) Microsoft Corporation. All rights reserved. C:\WINDOWS\system32>cd /d D:\Draft\mosquitto D:\Draft\mosquitto>mosquitto_sub -h 192.168.0.11 -p 1883 -t arduino-uno-r4/send Hello, MQTT! {"timestamp":10708,"data":311} {"timestamp":15837,"data":298} {"timestamp":20965,"data":291} {"timestamp":26094,"data":286}

Nachricht vom PC an Arduino UNO R4 über MQTT senden

Der Arduino UNO R4 ist so eingerichtet, dass er Nachrichten vom Thema arduino-uno-r4/receive empfängt. Das Publisher-Fenster auf dem PC sendet Nachrichten an dieses Thema, um mit dem Arduino UNO R4 zu kommunizieren.

  • Senden Sie eine Nachricht an das vom Arduino UNO R4 abonnierten Thema mit diesem Befehl im Publisher-Fenster:
mosquitto_pub -h 192.168.0.11 -p 1883 -t arduino-uno-r4/receive -m "Hello, Arduino UNO R4!"
  • Sie werden feststellen, dass Arduino UNO R4 diese Nachricht empfängt, wie im Serial Monitor angezeigt wird:
COM6
Send
Arduino UNO R4 - received from MQTT: - topic: arduino-uno-r4/receive - payload: Hello, Arduino UNO R4!
Autoscroll Show timestamp
Clear output
9600 baud  
Newline  

Video Tutorial

Wir erwägen die Erstellung von Video-Tutorials. Wenn Sie Video-Tutorials für wichtig halten, abonnieren Sie bitte unseren YouTube-Kanal , um uns zu motivieren, die Videos zu erstellen.

※ UNSERE NACHRICHTEN

  • Sie können gerne den Link zu diesem Tutorial teilen. Bitte verwenden Sie jedoch unsere Inhalte nicht auf anderen Websites. Wir haben viel Mühe und Zeit in die Erstellung der Inhalte investiert, bitte respektieren Sie unsere Arbeit!