ESP32 连接到免费的公共 MQTT 服务器
MQTT是一种轻量级、灵活的物联网消息交换和数据传输协议,致力于为物联网开发人员实现灵活性与硬件/网络资源之间的平衡。
ESP32是 ESP8266 的升级版。除了 Wi-Fi 模块外,该模块还集成了蓝牙 4.0 模块。其双核 CPU 的工作频率为 80 至 240 MHz。它包含两个 Wi-Fi 和蓝牙模块以及各种输入输出引脚。ESP32 是物联网项目的理想选择。
在这个项目中,我们将把 ESP32 连接到由 EMQX MQTT Cloud 运营和维护的免费公共 MQTT 代理,并使用 Arduino IDE 对 ESP32 进行编程。EMQX Cloud 是一个安全的 MQTT 物联网云服务平台,提供MQTT 5.0接入服务,具有一站式运维管理和独特的隔离环境。
所需的物联网组件
- ESP32
- Arduino IDE
- MQTT 5.0 客户端工具 - MQTT X
- 部署在EMQX 云上的免费公共 MQTT 代理
- 经纪商:broker.emqx.io
- TCP端口:1883
- WebSocket端口:8083
Arduino配置
安装 ESP32 开发板
点击“工具”->“开发板”->“开发板管理”->搜索“ESP32”->“安装”。
安装 PubSub 客户端
项目 -> 加载库 -> 库管理器... -> 搜索 PubSubClient -> 安装 Nick O'Leary 的 PubSubClient
ESP32 发布/订阅电路图
使用 Arduino IDE 对 ESP32 开发板进行编程
逐步连接到 MQTT
首先,我们将导入WiFi和PubSubClient库。ESP8266WiFi 库可以将 ESP32 连接到 Wi-Fi 网络,而 PubSubClient 库可以将 ESP32 连接到 MQTT 服务器,以发布消息和订阅主题。
#include <WiFi.h>
#include <PubSubClient.h>
2.设置 Wi-Fi 名称和密码,以及 MQTT 服务器连接地址和端口,并将主题设置为“esp32/test”。
// WiFi
const char *ssid = "mousse"; // Enter your WiFi name
const char *password = "qweqweqwe"; // Enter WiFi password
// MQTT Broker
const char *mqtt_broker = "broker.emqx.io";
const char *topic = "esp32/test";
const char *mqtt_username = "emqx";
const char *mqtt_password = "public";
const int mqtt_port = 1883;
3.打开串口连接以输出程序结果,并连接到Wi-Fi网络。
// Set software serial baud to 115200;
Serial.begin(115200);
// connecting to a WiFi network
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.println("Connecting to WiFi..");
}
4.使用 PubSubClient 连接到公共 MQTT 代理。
client.setServer(mqtt_broker, mqtt_port);
client.setCallback(callback);
while (!client.connected()) {
String client_id = "esp32-client-";
client_id += String(WiFi.macAddress());
Serial.printf("The client %s connects to the public mqtt broker\n", client_id.c_str());
if (client.connect(client_id.c_str(), mqtt_username, mqtt_password)) {
Serial.println("Public emqx mqtt broker connected");
} else {
Serial.print("failed with state ");
Serial.print(client.state());
delay(2000);
}
}
5. MQTT 服务器连接成功后,ESP32 将向 MQTT 服务器发布消息,esp/test并订阅主题 messages esp/test。
// publish and subscribe
client.publish(topic, "Hi EMQX I'm ESP32 ^^");
client.subscribe(topic);
6.设置回调函数,将主题名称打印到串口,并打印从该esp32/test主题收到的消息。
void callback(char *topic, byte *payload, unsigned int length) {
Serial.print("Message arrived in topic: ");
Serial.println(topic);
Serial.print("Message:");
for (int i = 0; i < length; i++) {
Serial.print((char) payload[i]);
}
Serial.println();
Serial.println("-----------------------");
}
完整代码
#include <WiFi.h>
#include <PubSubClient.h>
// WiFi
const char *ssid = "mousse"; // Enter your WiFi name
const char *password = "qweqweqwe"; // Enter WiFi password
// MQTT Broker
const char *mqtt_broker = "broker.emqx.io";
const char *topic = "esp32/test";
const char *mqtt_username = "emqx";
const char *mqtt_password = "public";
const int mqtt_port = 1883;
WiFiClient espClient;
PubSubClient client(espClient);
void setup() {
// Set software serial baud to 115200;
Serial.begin(115200);
// connecting to a WiFi network
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.println("Connecting to WiFi..");
}
Serial.println("Connected to the WiFi network");
//connecting to a mqtt broker
client.setServer(mqtt_broker, mqtt_port);
client.setCallback(callback);
while (!client.connected()) {
String client_id = "esp32-client-";
client_id += String(WiFi.macAddress());
Serial.printf("The client %s connects to the public mqtt broker\n", client_id.c_str());
if (client.connect(client_id.c_str(), mqtt_username, mqtt_password)) {
Serial.println("Public emqx mqtt broker connected");
} else {
Serial.print("failed with state ");
Serial.print(client.state());
delay(2000);
}
}
// publish and subscribe
client.publish(topic, "Hi EMQX I'm ESP32 ^^");
client.subscribe(topic);
}
void callback(char *topic, byte *payload, unsigned int length) {
Serial.print("Message arrived in topic: ");
Serial.println(topic);
Serial.print("Message:");
for (int i = 0; i < length; i++) {
Serial.print((char) payload[i]);
}
Serial.println();
Serial.println("-----------------------");
}
void loop() {
client.loop();
}
运行和测试
1.使用 Arduino 上传完整代码并给 esp32 上电。
2.打开串口监视器,选择115200波特率,检查ESP32连接状态。
3.使用MQTT X客户端连接到公共MQTT服务器,并向ESP32发布消息。
概括
目前,我们已经成功将ESP32连接到MQTT服务器。这只是ESP32的基本功能之一。实际上,ESP32还可以连接到各种物联网传感器,并将传感器数据报告给MQTT服务器。
原文发表于https://www.emqx.com。
文章来源:https://dev.to/emqx/esp32-connects-to-the-free-public-mqtt-broker-386k




