Arduino UNO R4 - MQTT

In deze handleiding leren we hoe u de Arduino UNO R4 kunt gebruiken om gegevens te verzenden en ontvangen naar een MQTT-broker met behulp van het MQTT-protocol. We behandelen de volgende details:

Arduino UNO R4 MQTT

We bekijken twee verschillende voorbeelden:

Over Arduino UNO R4 en MQTT

We leren hoe u een Arduino UNO R4 programmeert om gegevens te verzenden en ontvangen via een MQTT-broker (ook wel MQTT-server genoemd). Een MQTT-broker kan zijn:

  • MQTT-broker op internet, zoals Mosquitto of AWS IoT.
  • MQTT-broker geïnstalleerd op uw computer, zoals Mosquitto of HiveMQ.
  • MQTT-broker draaiend op uw Raspberry Pi, bijvoorbeeld Mosquitto.
  • MQTT-broker in de cloud, zoals Mosquitto of HiveMQ op AWS EC2.

In deze gids beginnen we met het controleren of Arduino UNO R4 verbinding kan maken met een online Mosquitto-broker. Arduino UNO R4 zal berichten verzenden en ontvangen naar en van deze broker via internet.

Vervolgens installeren we de Mosquitto-broker op onze computer. Daarna verbinden we de Arduino UNO R4 met de MQTT-broker op onze computer. We gebruiken het om gegevens te verzenden en ontvangen via deze lokale broker.

Arduino UNO R4 verbinden met een online MQTT-broker

In dit gedeelte leren we hoe u Arduino UNO R4 kunt verbinden met test.mosquitto.org, een online MQTT-service aangeboden door Mosquitto. Onthoud dat deze service alleen bedoeld is voor testen.

Arduino UNO R4 Code

Deze Arduino UNO R4-code voert de volgende taken uit:

  • Verbinding maken met de MQTT-broker
  • Abonneren op een topic
  • Regelmatig berichten verzenden naar hetzelfde topic waarop u geabonneerd bent
/* * Deze Arduino UNO R4 code is ontwikkeld door newbiely.nl * Deze Arduino UNO R4 code wordt zonder enige beperking aan het publiek beschikbaar gesteld. * Voor volledige instructies en schema's, bezoek: * https://newbiely.nl/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); }

Snelle Stappen

Volg deze instructies stap voor stap:

  • Als dit uw eerste keer is met de Arduino Uno R4 WiFi/Minima, raadpleeg dan de handleiding over het instellen van de omgeving voor Arduino Uno R4 WiFi/Minima in de Arduino IDE.
  • Verbind het Arduino Uno R4 board met uw computer met een USB-kabel.
  • Start de Arduino IDE op uw computer.
  • Selecteer het juiste Arduino Uno R4 board (bijv. Arduino Uno R4 WiFi) en COM-poort.
  • Klik op het "Library Manager" pictogram aan de linkerkant van Arduino IDE om het te openen.
  • Voer in het zoekvenster MQTT in en zoek naar de MQTT-bibliotheek van Joel Gaehwiler.
  • Klik op de Install knop om de MQTT-bibliotheek toe te voegen.
Arduino UNO R4 MQTT library
  • Zoek naar ArduinoJson in het zoekvenster en vind de ArduinoJson-bibliotheek van Benoit Blanchon. Klik vervolgens op de Install knop om de bibliotheek te installeren.
Arduino UNO R4 Json library
  • Kopieer de code en open deze in de Arduino IDE.
  • Verander de WiFi-gegevens (SSID en wachtwoord) in de code naar die van u.
  • U vindt 'YOUR-NAME' drie keer in de code. Vervang dit door uw naam of andere letters (geen spaties). Deze wijziging is belangrijk om conflicten te voorkomen van meerdere gebruikers die dezelfde code uitvoeren.
  • Klik op de Upload knop in Arduino IDE om de code naar uw Arduino UNO R4 te uploaden.
  • Open de Serial Monitor.
  • Controleer de resultaten in de 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  

De Arduino UNO R4 verstuurt berichten naar de MQTT-broker en ontvangt vervolgens hetzelfde bericht terug. Dit gebeurt omdat het is ingesteld om berichten te ontvangen van hetzelfde topic waarnaartoe het ze verstuurt. Als u niet wilt dat de Arduino UNO R4 zijn eigen berichten ontvangt, gebruik dan gewoon verschillende topics voor verzenden en ontvangen.

Arduino UNO R4 verbinden met de MQTT-broker geïnstalleerd op uw PC

Mosquitto MQTT Broker installeren

  • Installeer het op de D: schijf, niet op de C: schijf. Dit helpt mogelijke problemen te voorkomen.

Mosquitto MQTT broker uitvoeren

Laten we nu controleren of de MQTT-broker correct werkt door deze stappen te nemen:

  • Navigeer naar de map waar u Mosquitto hebt geïnstalleerd, zoals D:\Draft\mosquitto. Maak een bestand genaamd test.conf, plak de volgende details erin en bewaar het bestand in deze map.
listener 1883 allow_anonymous true
  • Open een Command Prompt als Administrator op uw computer. Noem dit het "Broker Window." Zorg ervoor dat u dit venster niet sluit totdat u de handleiding hebt voltooid.
Windows command prompt administrator
  • Voer de volgende commando's achtereenvolgens uit:
cd /d D:\Draft\mosquitto mosquitto -v -c test.conf
  • U zult het volgende zien:
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
  • Open een nieuwe Command Prompt als Administrator op uw computer.
  • Om het IP-adres van uw computer te vinden, voert u dit commando uit:
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 . . . . . . . . . :
  • Noteer het IP-adres voor toekomstig gebruik. In het gegeven voorbeeld: 192.168.0.11.

Testen of de Mosquitto Broker werkt

  • Open nog een Command Prompt als Administrator op uw computer. We noemen dit het "Subscriber Window."
  • Om te abonneren op een topic, voert u de volgende commando's een voor een in, waarbij u "uw IP-adres" vervangt door uw werkelijke IP-adres:
cd /d D:\Draft\mosquitto mosquitto_sub -h 192.168.0.11 -p 1883 -t arduino-uno-r4/send
  • Open een extra Command Prompt met Administrator-rechten op uw computer. Noem dit Publisher Window.
  • Om een bericht naar hetzelfde topic te publiceren, voert u de volgende commando's een na een uit (vervang door uw IP-adres):
cd /d D:\Draft\mosquitto mosquitto_pub -h 192.168.0.11 -p 1883 -t arduino-uno-r4/send -m "Hello, MQTT!"
  • U zult het volgende zien:
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>

Het bericht wordt verzonden naar het Subscriber Window zoals dit:

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!

U hebt met succes de Mosquitto MQTT-broker op uw PC geïnstalleerd. Sluit de drie vensters niet: Broker Window, Subscriber Window en Publisher Window. We zullen ze hierna gebruiken.

Arduino UNO R4 Code

De volgende code is voor Arduino UNO R4 en doet het volgende:

  • Verbinding maken met de MQTT-broker
  • Abonneren op een topic
  • Regelmatig berichten verzenden naar een ander topic
/* * Deze Arduino UNO R4 code is ontwikkeld door newbiely.nl * Deze Arduino UNO R4 code wordt zonder enige beperking aan het publiek beschikbaar gesteld. * Voor volledige instructies en schema's, bezoek: * https://newbiely.nl/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"]; */ }

Snelle Stappen

  • Kopieer de bovenstaande code en open deze met Arduino IDE
  • Verander de WiFi-gegevens (SSID en wachtwoord) in de code naar die van u.
  • Verander het MQTT-broker adres in de code (domeinnaam of IP-adres).
  • Klik op de Upload knop in Arduino IDE om de code naar uw Arduino UNO R4 te verzenden.

Bericht verzenden van Arduino UNO R4 naar PC via MQTT

De Arduino UNO R4 verstuurt informatie naar het MQTT-topic genaamd arduino-uno-r4/send. Op een computer abonneert het Subscriber Window zich op dat topic om de gegevens te ontvangen.

  • Open de Serial Monitor om te zien dat de Arduino UNO R4 regelmatig een bericht naar een topic verstuurt.
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  
  • Kijk naar het Subscriber Window en u zult zien dat het het bericht toont dat door de Arduino UNO R4 is verzonden zoals dit:
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}

Bericht verzenden van PC naar Arduino UNO R4 via MQTT

De Arduino UNO R4 is ingesteld om berichten te ontvangen van het topic arduino-uno-r4/receive. Het Publisher Window op de PC verstuurt berichten naar dit topic om te communiceren met de Arduino UNO R4.

  • Verstuur een bericht naar het topic waarop Arduino UNO R4 is geabonneerd met dit commando in het Publisher Window:
mosquitto_pub -h 192.168.0.11 -p 1883 -t arduino-uno-r4/receive -m "Hello, Arduino UNO R4!"
  • U zult zien dat Arduino UNO R4 dit bericht ontvangt, zoals getoond in de Serial Monitor:
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

We overwegen het maken van videotutorials. Als u videotutorials belangrijk vindt, abonneer u dan op ons YouTube-kanaal om ons te motiveren de video's te maken.

※ ONZE BERICHTEN

  • U bent welkom om de link naar deze tutorial te delen. Gebruik onze inhoud echter niet op andere websites. We hebben veel moeite en tijd gestoken in het maken van de inhoud, respecteer alstublieft ons werk!