Arduino UNO R4 - MQTT

Dans ce tutoriel, nous apprendrons comment utiliser l'Arduino UNO R4 pour envoyer et recevoir des données à un broker MQTT en utilisant le protocole MQTT. Nous couvrirons les détails suivants :

Arduino UNO R4 MQTT

Nous examinerons deux exemples variés :

À propos de Arduino UNO R4 et MQTT

Nous allons apprendre à programmer un Arduino UNO R4 pour envoyer et recevoir des données via un broker MQTT (aussi appelé serveur MQTT). Le broker MQTT peut être :

  • Broker MQTT sur Internet, tel que Mosquitto ou AWS IoT.
  • Broker MQTT configuré sur votre ordinateur, comme Mosquitto ou HiveMQ.
  • Broker MQTT fonctionnant sur votre Raspberry Pi, par exemple Mosquitto.
  • Broker MQTT dans le cloud, tel que Mosquitto ou HiveMQ sur AWS EC2.

Dans ce guide, nous commencerons par vérifier si l'Arduino UNO R4 peut se connecter à un broker Mosquitto en ligne. L'Arduino UNO R4 enverra et recevra des messages vers et depuis ce broker via Internet.

Ensuite, nous installerons le broker Mosquitto sur notre ordinateur. Après cela, nous connecterons l'Arduino UNO R4 au broker MQTT sur notre ordinateur. Nous l'utiliserons pour envoyer et recevoir des données via ce broker local.

Connecter l'Arduino UNO R4 à un broker MQTT en ligne

Dans cette section, nous verrons comment connecter l'Arduino UNO R4 à test.mosquitto.org, un service MQTT en ligne fourni par Mosquitto. N'oubliez pas que ce service est destiné uniquement à des fins de test.

Code Arduino UNO R4

Ce code Arduino UNO R4 effectue les tâches suivantes :

  • Se connecter au courtier MQTT
  • S'abonner à un sujet
  • Envoyer régulièrement des messages sur le même sujet auquel vous vous êtes abonné
/* * Ce code Arduino UNO R4 a été développé par newbiely.fr * Ce code Arduino UNO R4 est mis à disposition du public sans aucune restriction. * Pour des instructions complètes et des schémas de câblage, veuillez visiter: * https://newbiely.fr/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); }

Étapes rapides

Suivez ces instructions étape par étape :

  • Si c'est la première fois que vous utilisez l'Arduino Uno R4 WiFi/Minima, reportez-vous au tutoriel sur Arduino UNO R4 - Installation du logiciel..
  • Connectez la carte Arduino Uno R4 à votre ordinateur à l'aide d'un câble USB.
  • Lancez l'IDE Arduino sur votre ordinateur.
  • Sélectionnez la carte Arduino Uno R4 appropriée (par exemple, Arduino Uno R4 WiFi) et le port COM.
  • Cliquez sur l'icône du « Gestionnaire de bibliothèque » située sur le côté gauche de l'IDE Arduino pour l'ouvrir.
  • Dans la boîte de recherche, saisissez MQTT et cherchez la bibliothèque MQTT de Joel Gaehwiler.
  • Cliquez sur le bouton Install pour ajouter la bibliothèque MQTT.
Bibliothèque MQTT pour Arduino UNO R4
  • Recherchez ArduinoJson dans la barre de recherche et trouvez la bibliothèque ArduinoJson de Benoit Blanchon. Ensuite, cliquez sur le bouton Install pour installer la bibliothèque.
Bibliothèque JSON pour Arduino UNO R4
  • Copiez le code et ouvrez-le dans l'IDE Arduino.
  • Modifiez les détails WiFi (SSID et mot de passe) dans le code pour les adapter à vos propres paramètres.
  • Vous trouverez 'YOUR-NAME' trois fois dans le code. Remplacez-le par votre nom ou par des lettres quelconques (sans espaces). Cette modification est importante pour éviter les conflits entre plusieurs utilisateurs exécutant le même code.
  • Cliquez sur le bouton Upload dans l'IDE Arduino pour téléverser le code sur votre Arduino UNO R4.
  • Ouvrez le Moniteur série.
  • Vérifiez les résultats sur le Moniteur série.
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  

L'Arduino UNO R4 envoie des messages au broker MQTT, puis reçoit le même message en retour. Cela se produit car il est configuré pour recevoir des messages sur le même sujet sur lequel il les envoie. Si vous ne souhaitez pas que l'Arduino UNO R4 reçoive ses propres messages, utilisez simplement des sujets différents pour l'envoi et la réception.

Connectez l'Arduino UNO R4 au broker MQTT installé sur votre PC

Installation du broker MQTT Mosquitto

  • Téléchargez le Mosquitto MQTT Broker
  • Installez-le sur le lecteur D:, pas sur le lecteur C:. Cela permet d'éviter d'éventuels problèmes.

Lancer le broker MQTT Mosquitto

Maintenant, voyons si le courtier MQTT fonctionne correctement en suivant ces étapes :

  • Accédez au dossier où vous avez installé Mosquitto, par exemple D:\Draft\mosquitto. Créez un fichier nommé test.conf, collez les détails suivants dedans et enregistrez le fichier dans ce dossier.
listener 1883 allow_anonymous true
  • Ouvrez une invite de commandes en tant qu'administrateur sur votre ordinateur. Appelez-la « Broker Window ». N'oubliez pas de ne pas fermer cette fenêtre jusqu'à ce que vous ayez terminé le tutoriel.
Administrateur de l'invite de commandes Windows
  • Exécutez les commandes suivantes séquentiellement:
cd /d D:\Draft\mosquitto mosquitto -v -c test.conf
  • Vous remarquerez :
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
  • Ouvrez une nouvelle invite de commandes en tant qu'administrateur sur votre ordinateur.
  • Pour trouver l'adresse IP de votre ordinateur, exécutez cette commande :
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 . . . . . . . . . :
  • Veuillez noter l'adresse IP pour référence future. Dans l'exemple fourni : 192.168.0.11.

Tester si le broker Mosquitto fonctionne

  • Ouvrez une autre invite de commandes en tant qu'administrateur sur votre ordinateur. Nous l'appellerons « Subscriber Window ».
  • Pour vous abonner à un sujet, saisissez les commandes suivantes une à une, en remplaçant « votre adresse IP » par votre adresse IP réelle :
cd /d D:\Draft\mosquitto mosquitto_sub -h 192.168.0.11 -p 1883 -t arduino-uno-r4/send
  • Ouvrez une invite de commandes supplémentaire avec les droits d'administrateur sur votre ordinateur. Nommez-la Fenêtre Éditeur.
  • Pour publier un message sur le même sujet, exécutez les commandes suivantes les unes après les autres (remplacez par votre adresse IP):
cd /d D:\Draft\mosquitto mosquitto_pub -h 192.168.0.11 -p 1883 -t arduino-uno-r4/send -m "Hello, MQTT!"
  • Vous remarquerez :
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>

Le message est envoyé à la Fenêtre des abonnés comme ceci :

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!

Vous avez installé avec succès le courtier MQTT Mosquitto sur votre PC. Veuillez ne pas fermer trois fenêtres : la fenêtre du courtier, la fenêtre de l’abonné et la fenêtre de l’éditeur. Nous les utiliserons ensuite.

Code Arduino UNO R4

Le code ci-dessous est destiné à l'Arduino UNO R4 et il fait ce qui suit :

  • Se connecter au broker MQTT
  • S'abonner à un sujet
  • Envoyer régulièrement des messages vers un autre sujet
/* * Ce code Arduino UNO R4 a été développé par newbiely.fr * Ce code Arduino UNO R4 est mis à disposition du public sans aucune restriction. * Pour des instructions complètes et des schémas de câblage, veuillez visiter: * https://newbiely.fr/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"]; */ }

Étapes rapides

  • Copiez le code ci-dessus et ouvrez-le avec l'IDE Arduino
  • Modifiez les informations WiFi (SSID et mot de passe) dans le code en mettant les vôtres.
  • Modifiez l'adresse du broker MQTT dans le code (soit un nom de domaine, soit une adresse IP).
  • Cliquez sur le bouton Upload dans l'IDE Arduino pour envoyer le code à votre Arduino UNO R4.

Envoyer un message depuis l'Arduino UNO R4 vers le PC via MQTT

L'Arduino UNO R4 envoie des informations au sujet MQTT nommé arduino-uno-r4/send. Sur un ordinateur, la fenêtre d'abonnement s'abonne à ce sujet pour recevoir les données.

  • Ouvrez le Moniteur série pour voir que l'Arduino UNO R4 envoie régulièrement un message à un sujet.
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  
  • Regardez la Fenêtre des abonnés et vous remarquerez qu'il affiche le message envoyé par l'Arduino UNO R4 comme ceci :
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}

Envoyer un message depuis le PC vers l'Arduino UNO R4 via MQTT

L'Arduino UNO R4 est configuré pour recevoir des messages du sujet arduino-uno-r4/receive. La fenêtre Publisher sur le PC envoie des messages à ce sujet pour communiquer avec l'Arduino UNO R4.

  • Envoyez un message au sujet auquel l'Arduino UNO R4 est abonné en utilisant cette commande dans la fenêtre Publisher :
mosquitto_pub -h 192.168.0.11 -p 1883 -t arduino-uno-r4/receive -m "Hello, Arduino UNO R4!"
  • Vous remarquerez que l'Arduino UNO R4 reçoit ce message, comme affiché sur le Moniteur Série :
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  

Vidéo

※ NOS MESSAGES

  • N'hésitez pas à partager le lien de ce tutoriel. Cependant, veuillez ne pas utiliser notre contenu sur d'autres sites web. Nous avons investi beaucoup d'efforts et de temps pour créer ce contenu, veuillez respecter notre travail !