Arduino Nano ESP32 - MQTT

Neste guia, vamos mergulhar no uso do Arduino Nano ESP32 para enviar e receber dados de/para um broker MQTT por meio do protocolo MQTT. Especificamente, vamos abordar:

MQTT do Arduino Nano ESP32

Vamos examinar dois cenários distintos:

Hardware Necessário

1×Arduino Nano ESP32
1×Cabo USB Tipo-A para Tipo-C (para PC com USB-A)
1×Cabo USB Tipo-C para Tipo-C (para PC com USB-C)
1×Protoboard
1×Fios Jumper
1×(Recomendado) Placa de Expansão com Bornes de Parafuso para Arduino Nano
1×(Recomendado) Placa de Expansão Breakout para Arduino Nano
1×(Recomendado) Divisor de Alimentação para Arduino Nano ESP32

Or you can buy the following kits:

1×DIYables Sensor Kit (18 sensors/displays)
Divulgação: Alguns dos links desta seção são links de afiliado da Amazon. Podemos receber uma comissão pelas compras feitas por meio desses links, sem custo adicional para você. Agradecemos o seu apoio.

Sobre o Arduino Nano ESP32 e o MQTT

Se você já está familiarizado com o protocolo MQTT, ótimo! Se não, você pode pesquisar sobre ele online. Este tutorial é focado em usar o Arduino Nano ESP32 para enviar e receber dados usando MQTT.

Aqui estão diferentes maneiras de usar o Arduino Nano ESP32 com MQTT:

  • Você pode conectar o Arduino Nano ESP32 a um broker MQTT online, como o Mosquitto ou o AWS IoT.
  • Você pode conectar o Arduino Nano ESP32 a um broker MQTT instalado no seu computador, como o Mosquitto ou o HiveMQ.
  • Você pode conectar o Arduino Nano ESP32 a um broker MQTT rodando no seu Raspberry Pi, por exemplo, o Mosquitto.
  • Você também pode conectar o Arduino Nano ESP32 a um broker MQTT baseado em nuvem, como o Mosquitto ou o HiveMQ no AWS EC2.

Neste tutorial, vamos começar verificando se o Arduino Nano ESP32 consegue se conectar a um broker Mosquitto online. Vamos fazer o Arduino Nano ESP32 trocar dados por meio desse broker pela internet.

Depois disso, vamos configurar o broker Mosquitto no nosso computador. Em seguida, vamos conectar o Arduino Nano ESP32 a esse broker local e continuar enviando e recebendo dados.

Depois de concluir este tutorial, você pode explorar mais consultando estes tutoriais adicionais:

Esses tutoriais fornecerão mais informações sobre tópicos relacionados.

Conectar o Arduino Nano ESP32 a um broker MQTT online

Nesta parte, vamos aprender como conectar o Arduino Nano ESP32 ao test.mosquitto.org, um broker MQTT online criado pelo Mosquitto. Observe que este broker deve ser usado apenas para fins de teste.

Código Arduino Nano ESP32

O código Arduino Nano ESP32 abaixo faz o seguinte:

  • Conecta ao broker MQTT
  • Assina um tópico
  • Publica mensagens periodicamente no mesmo tópico que assinou
/* * Este código de Arduino Nano ESP32 foi desenvolvido por pt.newbiely.com * Este código de Arduino Nano ESP32 é disponibilizado ao público sem nenhuma restrição. * Para tutoriais completos e diagramas de ligação, visite: * https://pt.newbiely.com/tutorials/arduino-nano-esp32/arduino-nano-esp32-mqtt */ #include <WiFi.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-esp32-001"; // 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 ESP32 should publish/subscribe const char PUBLISH_TOPIC[] = "YOUR-NAME-esp32-001/loopback"; // CHANGE IT AS YOU DESIRE const char SUBSCRIBE_TOPIC[] = "YOUR-NAME-esp32-001/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); // set the ADC attenuation to 11 dB (up to ~3.3V input) analogSetAttenuation(ADC_11db); WiFi.mode(WIFI_STA); WiFi.begin(WIFI_SSID, WIFI_PASSWORD); Serial.println("Arduino Nano ESP32 - Connecting to Wi-Fi"); while (WiFi.status() != WL_CONNECTED) { delay(500); Serial.print("."); } Serial.println(); 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 Nano ESP32 - 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 Nano ESP32 - MQTT broker Timeout!"); return; } // Subscribe to a topic, the incoming messages are processed by messageHandler() function if (mqtt.subscribe(SUBSCRIBE_TOPIC)) Serial.print("Arduino Nano ESP32 - Subscribed to the topic: "); else Serial.print("Arduino Nano ESP32 - Failed to subscribe to the topic: "); Serial.println(SUBSCRIBE_TOPIC); Serial.println("Arduino Nano ESP32 - 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 Nano ESP32 - 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 Nano ESP32 - received from MQTT:"); Serial.println("- topic: " + topic); Serial.println("- payload:"); Serial.println(payload); }

Passos Rápidos

Para começar com o Arduino Nano ESP32, siga estes passos:

  • Se você é novo no Arduino Nano ESP32, consulte o tutorial sobre como configurar o ambiente para o Arduino Nano ESP32 na Arduino IDE.
  • Ligue os componentes de acordo com o diagrama fornecido.
  • Conecte a placa Arduino Nano ESP32 ao seu computador usando um cabo USB.
  • Abra a Arduino IDE no seu computador.
  • Selecione a placa Arduino Nano ESP32 e a porta COM correspondente.
  • Abra a Arduino IDE no seu PC
  • Abra o Library Manager clicando no ícone Library Manager na barra de navegação esquerda da Arduino IDE
  • Digite MQTT na caixa de pesquisa, depois procure a biblioteca MQTT de Joel Gaehwiler.
  • Clique no botão Install para instalar a biblioteca MQTT.
Biblioteca MQTT para Arduino Nano ESP32
  • Digite Arduino Nano ESP32Json na caixa de pesquisa, depois procure a biblioteca Arduino Nano ESP32Json de Benoit Blanchon.
  • Clique no botão Install para instalar a biblioteca Arduino Nano ESP32Json.
Biblioteca Json para Arduino Nano ESP32
  • Copie o código acima e abra-o com a Arduino IDE
  • Substitua as informações de WiFi (SSID e senha) no código pelas suas.
  • No código, você verá a palavra 'YOUR-NAME' três vezes. Substitua essa palavra pelo seu nome ou por caracteres aleatórios (apenas letras do alfabeto, sem espaços). Isso é necessário porque, se você não fizer a alteração, várias pessoas podem estar executando este código ao mesmo tempo, o que pode causar conflitos, pois os IDs de cliente e os tópicos MQTT são os mesmos para todos.
  • Clique no botão Upload na Arduino IDE para enviar o código ao Arduino Nano ESP32
  • Abra o Serial Monitor
  • Veja o resultado no Serial Monitor.
∞
Newbiely | Arduino IDE 2.3.8
──
☐
✕
File
Edit
Sketch
Tools
Help
Arduino Nano ESP32
Newbiely.ino
···
8 Serial.println("Hello World!");
Output
Serial Monitor
Message (Enter to send message to 'Arduino Nano ESP32' on 'COM15')
New Line
9600 baud
Arduino Nano ESP32 - Connecting to MQTT broker Arduino Nano ESP32 - Subscribed to the topic: YOUR-NAME-esp32-001/loopback Arduino Nano ESP32 - MQTT broker Connected! Arduino Nano ESP32 - sent to MQTT: - topic: YOUR-NAME-esp32-001/loopback - payload:{"timestamp":11757,"data":255} Arduino Nano ESP32 - received from MQTT: - topic: YOUR-NAME-esp32-001/loopback - payload: {"timestamp":11757,"data":255} Arduino Nano ESP32 - sent to MQTT: - topic: YOUR-NAME-esp32-001/loopback - payload:{"timestamp":16896,"data":259} Arduino Nano ESP32 - received from MQTT: - topic: YOUR-NAME-esp32-001/loopback - payload: {"timestamp":16896,"data":259}
Ln 11, Col 1
Arduino Nano ESP32 on COM15
2

Como você pode ver, o Arduino Nano ESP32 publica mensagens no broker MQTT e depois recebe de volta a mesma mensagem. Isso acontece porque o código acima assina o mesmo tópico no qual publica dados. Se você não quiser que o Arduino Nano ESP32 receba a mensagem que ele publica, basta fazer o tópico SUBSCRIBE ser diferente do tópico PUBLISH.

Conectar o Arduino Nano ESP32 ao broker MQTT instalado no seu PC

Instalando o Broker MQTT Mosquitto

  • Instale-o na unidade D: em vez da unidade C:. Evite instalar o broker Mosquitto na unidade C: para prevenir possíveis problemas.

Executar o broker MQTT Mosquitto

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

  • Vá até o diretório onde o Mosquitto foi instalado. Por exemplo: D:\mosquitto>
  • Crie um novo arquivo chamado test.conf, copie o conteúdo abaixo e salve-o nesse diretório:
listener 1883 allow_anonymous true
  • Execute um Prompt de Comando como Administrador no seu PC. Vamos chamá-lo de Janela do Broker. Não o feche até o final do tutorial.
Prompt de comando do Windows como administrador
  • Execute os comandos abaixo um por um:
cd /d D:\mosquitto mosquitto -v -c test.conf
  • Você verá:
Command Prompt
Microsoft Windows [Version 10.0.19045.3930] (c) Microsoft Corporation. All rights reserved. C:\WINDOWS\system32>cd /d D:\mosquitto D:\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 outro Prompt de Comando como Administrador no seu PC.
  • Descubra o endereço IP do seu PC executando o comando abaixo:
ipconfig
Command Prompt
C:\WINDOWS\system32>ipconfig Windows IP Configuration Ethernet adapter: Subnet Mask . . . . . . . . . . . : 255.0.0.0 IPv4 Address. . . . . . . . . . . : 192.168.0.5 Subnet Mask . . . . . . . . . . . : 255.255.255.0 Default Gateway . . . . . . . . . :
  • Anote o endereço IP para usar depois. No exemplo acima: 192.168.0.5

Teste se o Broker Mosquitto funciona

  • Abra outro Prompt de Comando como Administrador no seu PC. Vamos chamá-lo de Janela do Assinante
  • Assine um tópico executando os comandos abaixo um por um (substitua pelo seu endereço IP):
cd /d D:\mosquitto mosquitto_sub -h 192.168.0.5 -p 1883 -t esp32-001/send
  • Abra outro Prompt de Comando como Administrador no seu PC. Vamos chamá-lo de Janela do Publicador
  • Publique uma mensagem no mesmo tópico executando os comandos abaixo um por um (substitua pelo seu endereço IP):
cd /d D:\mosquitto mosquitto_pub -h 192.168.0.5 -p 1883 -t esp32-001/send -m "Hello, MQTT!"
  • Você verá:
Command Prompt
Microsoft Windows [Version 10.0.19045.3930] (c) Microsoft Corporation. All rights reserved. C:\WINDOWS\system32>cd /d D:\mosquitto D:\mosquitto>mosquitto_pub -h 192.168.0.5 -p 1883 -t esp32-001/send -m "Hello, MQTT!" D:\mosquitto>

Você verá que a mensagem é encaminhada para a Janela do Assinante da seguinte forma:

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

Agora, 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 Nano ESP32

O código Arduino Nano ESP32 abaixo faz o seguinte:

  • Conecta ao broker MQTT
  • Assina um tópico
  • Publica mensagens periodicamente em outro tópico
/* * Este código de Arduino Nano ESP32 foi desenvolvido por pt.newbiely.com * Este código de Arduino Nano ESP32 é disponibilizado ao público sem nenhuma restrição. * Para tutoriais completos e diagramas de ligação, visite: * https://pt.newbiely.com/tutorials/arduino-nano-esp32/arduino-nano-esp32-mqtt */ #include <WiFi.h> #include <MQTTClient.h> #include <ArduinoJson.h> #define CLIENT_ID "ESP32-001" // CHANGE IT AS YOU DESIRE 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[] = "192.168.0.5"; // CHANGE TO MQTT BROKER'S IP ADDRESS const int MQTT_PORT = 1883; const char MQTT_USERNAME[] = ""; // CHANGE IT IF REQUIRED const char MQTT_PASSWORD[] = ""; // CHANGE IT IF REQUIRED // The MQTT topics that this device should publish/subscribe #define PUBLISH_TOPIC "esp32-001/send" #define SUBSCRIBE_TOPIC "esp32-001/receive" #define PUBLISH_INTERVAL 5000 // 4 seconds WiFiClient network; MQTTClient mqtt = MQTTClient(256); unsigned long lastPublishTime = 0; void setup() { Serial.begin(9600); // set the ADC attenuation to 11 dB (up to ~3.3V input) analogSetAttenuation(ADC_11db); WiFi.mode(WIFI_STA); WiFi.begin(WIFI_SSID, WIFI_PASSWORD); Serial.println("Arduino Nano ESP32 - Connecting to Wi-Fi"); while (WiFi.status() != WL_CONNECTED) { delay(500); Serial.print("."); } Serial.println(); 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 Nano ESP32 - Connecting to MQTT broker"); while (!mqtt.connect(CLIENT_ID, MQTT_USERNAME, MQTT_PASSWORD)) { Serial.print("."); delay(100); } Serial.println(); if (!mqtt.connected()) { Serial.println("Arduino Nano ESP32 - MQTT broker Timeout!"); return; } // Subscribe to a topic, the incoming messages are processed by messageHandler() function if (mqtt.subscribe(SUBSCRIBE_TOPIC)) Serial.print("Arduino Nano ESP32 - Subscribed to the topic: "); else Serial.print("Arduino Nano ESP32 - Failed to subscribe to the topic: "); Serial.println(SUBSCRIBE_TOPIC); Serial.println("Arduino Nano ESP32 - 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 Nano ESP32 - 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 Nano ESP32 - 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

Para começar com o Arduino Nano ESP32, siga estes passos:

  • Se você é novo no Arduino Nano ESP32, consulte o tutorial sobre como configurar o ambiente para o Arduino Nano ESP32 na Arduino IDE.
  • Ligue os componentes de acordo com o diagrama fornecido.
  • Conecte a placa Arduino Nano ESP32 ao seu computador usando um cabo USB.
  • Abra a Arduino IDE no seu computador.
  • Selecione a placa Arduino Nano ESP32 e a porta COM correspondente.
  • Copie o código acima e abra-o com a Arduino IDE
  • Substitua as informações de WiFi (SSID e senha) no código pelas suas.
  • Substitua o endereço do broker MQTT no código (nome de domínio ou endereço IP).
  • Clique no botão Upload na Arduino IDE para enviar o código ao Arduino Nano ESP32

Enviar mensagem do Arduino Nano ESP32 para o PC via MQTT

O código do Arduino Nano ESP32 publica dados no tópico MQTT esp32-001/send, e a Janela do Assinante no PC assina esse tópico para receber os dados.

  • Abra o Serial Monitor, você verá o Arduino Nano ESP32 publicar periodicamente uma mensagem em um tópico.
∞
Newbiely | Arduino IDE 2.3.8
──
☐
✕
File
Edit
Sketch
Tools
Help
Arduino Nano ESP32
Newbiely.ino
···
8 Serial.println("Hello World!");
Output
Serial Monitor
Message (Enter to send message to 'Arduino Nano ESP32' on 'COM15')
New Line
9600 baud
Arduino Nano ESP32 - Connecting to MQTT broker Arduino Nano ESP32 - Subscribed to the topic: esp32-001/receive Arduino Nano ESP32 - MQTT broker Connected! Arduino Nano ESP32 - sent to MQTT: - topic: esp32-001/send - payload:{"timestamp":10708,"data":311} Arduino Nano ESP32 - sent to MQTT: - topic: esp32-001/send - payload:{"timestamp":15837,"data":298} Arduino Nano ESP32 - sent to MQTT: - topic: esp32-001/send - payload:{"timestamp":20965,"data":291} Arduino Nano ESP32 - sent to MQTT: - topic: esp32-001/send - payload:{"timestamp":26094,"data":286}
Ln 11, Col 1
Arduino Nano ESP32 on COM15
2
  • Verifique a Janela do Assinante, você verá que ela recebe a mensagem publicada pelo Arduino Nano ESP32 como abaixo:
Command Prompt
Microsoft Windows [Version 10.0.19045.3930] (c) Microsoft Corporation. All rights reserved. C:\WINDOWS\system32>cd /d D:\mosquitto D:\mosquitto>mosquitto_sub -h 192.168.0.5 -p 1883 -t esp32-001/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 Nano ESP32 via MQTT

O Arduino Nano ESP32 assina o tópico esp32-001/receive, e a Janela do Publicador no PC publica uma mensagem nesse tópico para enviá-la ao Arduino Nano ESP32.

  • Publique uma mensagem no tópico que o Arduino Nano ESP32 assinou executando o seguinte comando na Janela do Publicador:
mosquitto_pub -h 192.168.0.5 -p 1883 -t esp32-001/receive -m "Hello, Arduino Nano ESP32!"
  • Você verá essa mensagem ser recebida pelo Arduino Nano ESP32 no Serial Monitor como abaixo:
∞
Newbiely | Arduino IDE 2.3.8
──
☐
✕
File
Edit
Sketch
Tools
Help
Arduino Nano ESP32
Newbiely.ino
···
8 Serial.println("Hello World!");
Output
Serial Monitor
Message (Enter to send message to 'Arduino Nano ESP32' on 'COM15')
New Line
9600 baud
Arduino Nano ESP32 - received from MQTT: - topic: esp32-001/receive - payload: Hello, Arduino Nano ESP32!
Ln 11, Col 1
Arduino Nano ESP32 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!