Arduino UNO R4 - MQTT

Neste tutorial, vamos aprender a usar o Arduino UNO R4 para enviar e receber dados de um broker MQTT usando o protocolo MQTT. Vamos abordar os seguintes detalhes:

Arduino UNO R4 MQTT

Vamos ver dois exemplos diferentes:

Sobre o Arduino UNO R4 e o MQTT

Vamos aprender a programar um Arduino UNO R4 para enviar e receber dados por meio de um broker MQTT (também chamado de servidor MQTT). O broker MQTT pode ser:

  • Um broker MQTT na Internet, como o Mosquitto ou o AWS IoT.
  • Um broker MQTT configurado no seu computador, como o Mosquitto ou o HiveMQ.
  • Um broker MQTT rodando no seu Raspberry Pi, por exemplo, o Mosquitto.
  • Um broker MQTT na nuvem, como o Mosquitto ou o HiveMQ no AWS EC2.

Neste guia, vamos começar verificando se o Arduino UNO R4 consegue se conectar a um broker Mosquitto online. O Arduino UNO R4 vai enviar e receber mensagens de e para esse broker pela internet.

Depois, vamos instalar o broker Mosquitto no nosso computador. Em seguida, vamos conectar o Arduino UNO R4 ao broker MQTT no nosso computador. Vamos usá-lo para enviar e receber dados por esse broker local.

Conecte o Arduino UNO R4 a um broker MQTT online

Nesta seção, vamos entender como ligar o Arduino UNO R4 ao test.mosquitto.org, um serviço MQTT online fornecido pelo Mosquitto. Lembre-se, este serviço serve apenas para testes.

Código Arduino UNO R4

Este código do Arduino UNO R4 realiza as seguintes tarefas:

  • Conectar ao broker MQTT
  • Assinar um tópico
  • Enviar mensagens regularmente para o mesmo tópico que você assinou
/* * Este código de Arduino UNO R4 foi desenvolvido por pt.newbiely.com * Este código de Arduino UNO R4 é disponibilizado ao público sem nenhuma restrição. * Para tutoriais completos e diagramas de ligação, visite: * https://pt.newbiely.com/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); }

Passos Rápidos

Siga estas instruções passo a passo:

  • Se esta é a primeira vez que você usa o Arduino Uno R4 WiFi/Minima, consulte o tutorial sobre como configurar o ambiente para o Arduino Uno R4 WiFi/Minima no Arduino IDE.
  • Conecte a placa Arduino Uno R4 ao seu computador usando um cabo USB.
  • Abra o Arduino IDE no seu computador.
  • Selecione a placa Arduino Uno R4 apropriada (por exemplo, Arduino Uno R4 WiFi) e a porta COM.
  • Clique no ícone "Library Manager" no lado esquerdo do Arduino IDE para abri-lo.
  • Na caixa de pesquisa, digite MQTT e procure a biblioteca MQTT de Joel Gaehwiler.
  • Clique no botão Install para adicionar a biblioteca MQTT.
Biblioteca MQTT do Arduino UNO R4
  • Pesquise por ArduinoJson na caixa de pesquisa e encontre a biblioteca ArduinoJson de Benoit Blanchon. Depois, clique no botão Install para instalar a biblioteca.
Biblioteca Json do Arduino UNO R4
  • Copie o código e abra-o no Arduino IDE.
  • Altere os dados do WiFi (SSID e senha) no código para os seus.
  • Você vai encontrar 'YOUR-NAME' três vezes no código. Substitua por seu nome ou por quaisquer letras (sem espaços). Essa mudança é importante para evitar conflitos com vários usuários rodando o mesmo código.
  • Clique no botão Upload no Arduino IDE para fazer o upload do código para o seu Arduino UNO R4.
  • Abra o Serial Monitor.
  • Confira os resultados no Serial Monitor.
∞
Newbiely | Arduino IDE 2.3.8
──
☐
✕
File
Edit
Sketch
Tools
Help
Arduino Uno R4 WiFi
Newbiely.ino
···
8 Serial.println("Hello World!");
Output
Serial Monitor
Message (Enter to send message to 'Arduino Uno R4 WiFi' on 'COM15')
New Line
9600 baud
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}
Ln 11, Col 1
Arduino Uno R4 WiFi on COM15
2

O Arduino UNO R4 envia mensagens ao broker MQTT e depois recebe a mesma mensagem de volta. Isso acontece porque ele está configurado para receber mensagens do mesmo tópico para o qual as envia. Se você não quer que o Arduino UNO R4 receba as próprias mensagens, basta usar tópicos diferentes para enviar e receber.

Conecte o Arduino UNO R4 ao broker MQTT instalado no seu PC

Instalando o Broker MQTT Mosquitto

  • Instale-o na unidade D:, não na unidade C:. Isso ajuda a evitar possíveis problemas.

Executando o broker MQTT Mosquitto

Agora, vamos ver se o broker MQTT está funcionando corretamente seguindo estes passos:

  • Navegue até a pasta onde você instalou o Mosquitto, como D:\Draft\mosquitto. Crie um arquivo chamado test.conf, cole nele os detalhes a seguir e salve o arquivo nesta pasta.
listener 1883 allow_anonymous true
  • Abra um Prompt de Comando como Administrador no seu computador. Vamos chamá-lo de "Janela do Broker". Lembre-se de não fechar esta janela até terminar o tutorial.
Prompt de comando do Windows como administrador
  • Execute os comandos a seguir em sequência:
cd /d D:\Draft\mosquitto mosquitto -v -c test.conf
  • Você vai notar:
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
  • Abra um novo Prompt de Comando como Administrador no seu computador.
  • Para descobrir o endereço IP do seu computador, execute este comando:
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 . . . . . . . . . :
  • Anote o endereço IP para consulta futura. No exemplo fornecido: 192.168.0.11.

Teste se o Broker Mosquitto funciona

  • Abra outro Prompt de Comando como Administrador no seu computador. Vamos chamá-lo de "Janela do Assinante".
  • Para assinar um tópico, digite os comandos a seguir, um de cada vez, substituindo "your IP address" pelo seu endereço IP real:
cd /d D:\Draft\mosquitto mosquitto_sub -h 192.168.0.11 -p 1883 -t arduino-uno-r4/send
  • Abra mais um Prompt de Comando com direitos de Administrador no seu computador. Dê a ele o nome Janela do Publicador.
  • Para publicar uma mensagem no mesmo tópico, execute os comandos a seguir um após o outro (substitua pelo seu endereço IP):
cd /d D:\Draft\mosquitto mosquitto_pub -h 192.168.0.11 -p 1883 -t arduino-uno-r4/send -m "Hello, MQTT!"
  • Você vai notar:
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>

A mensagem é enviada para a Janela do Assinante assim:

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!

Você instalou com sucesso o broker MQTT Mosquitto no seu PC. Por favor, não feche as três janelas: Janela do Broker, Janela do Assinante e Janela do Publicador. Vamos usá-las a seguir.

Código Arduino UNO R4

O código a seguir é para o Arduino UNO R4 e faz o seguinte:

  • Conectar ao broker MQTT
  • Assinar um tópico
  • Enviar mensagens regularmente para um tópico diferente
/* * Este código de Arduino UNO R4 foi desenvolvido por pt.newbiely.com * Este código de Arduino UNO R4 é disponibilizado ao público sem nenhuma restrição. * Para tutoriais completos e diagramas de ligação, visite: * https://pt.newbiely.com/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"]; */ }

Passos Rápidos

  • Copie o código acima e abra-o usando o Arduino IDE
  • Altere os dados do WiFi (SSID e senha) no código para os seus.
  • Altere o endereço do broker MQTT no código (nome de domínio ou endereço IP).
  • Clique no botão Upload no Arduino IDE para enviar o código ao seu Arduino UNO R4.

Enviar mensagem do Arduino UNO R4 para o PC via MQTT

O Arduino UNO R4 envia informações para o tópico MQTT chamado arduino-uno-r4/send. No computador, a Janela do Assinante assina esse tópico para receber os dados.

  • Abra o Serial Monitor para ver que o Arduino UNO R4 envia regularmente uma mensagem para um tópico.
∞
Newbiely | Arduino IDE 2.3.8
──
☐
✕
File
Edit
Sketch
Tools
Help
Arduino Uno R4 WiFi
Newbiely.ino
···
8 Serial.println("Hello World!");
Output
Serial Monitor
Message (Enter to send message to 'Arduino Uno R4 WiFi' on 'COM15')
New Line
9600 baud
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}
Ln 11, Col 1
Arduino Uno R4 WiFi on COM15
2
  • Olhe a Janela do Assinante e você vai notar que ela mostra a mensagem enviada pelo Arduino UNO R4 assim:
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}

Enviar mensagem do PC para o Arduino UNO R4 via MQTT

O Arduino UNO R4 está configurado para receber mensagens do tópico arduino-uno-r4/receive. A Janela do Publicador no PC envia mensagens para esse tópico para se comunicar com o Arduino UNO R4.

  • Envie uma mensagem para o tópico assinado pelo Arduino UNO R4 usando este comando na Janela do Publicador:
mosquitto_pub -h 192.168.0.11 -p 1883 -t arduino-uno-r4/receive -m "Hello, Arduino UNO R4!"
  • Você vai notar que o Arduino UNO R4 recebe essa mensagem, como mostrado no Serial Monitor:
∞
Newbiely | Arduino IDE 2.3.8
──
☐
✕
File
Edit
Sketch
Tools
Help
Arduino Uno R4 WiFi
Newbiely.ino
···
8 Serial.println("Hello World!");
Output
Serial Monitor
Message (Enter to send message to 'Arduino Uno R4 WiFi' on 'COM15')
New Line
9600 baud
Arduino UNO R4 - received from MQTT: - topic: arduino-uno-r4/receive - payload: Hello, Arduino UNO R4!
Ln 11, Col 1
Arduino Uno R4 WiFi on COM15
2

Vídeo

※ NOSSAS MENSAGENS

  • Fique à vontade para compartilhar o link deste tutorial. Porém, por favor, não use nosso conteúdo em outros sites. Investimos muito esforço e tempo para criar este conteúdo, por favor respeite nosso trabalho!