【ESP32】mqtt 发送和接收
一、首先下载MQTT-X软件
二、下载后建立mqtt,设置这些参数
点击连接,然后创建topic主题
三、程序
注释已经写的很清楚了
#include <WiFi.h> // 包含WiFi库,用于连接WiFi网络
#include <PubSubClient.h> // 包含MQTT库,用于与MQTT服务器通信
// WiFi网络名称和密码
const char *ssid = "li123";
const char *psw = "li123321";
// MQTT服务器地址
const char *mqtt_broker = "broker.emqx.io";
// 订阅的主题
const char *topic = "esp32/test";
// MQTT用户名和密码
const char *mqtt_username = "Li_MQTT";
const char *mqtt_password = "li123321";
// MQTT服务器端口号
const int mqtt_port = 1883;
// 创建WiFi客户端对象
WiFiClient espClient;
// 创建MQTT客户端对象,并传入WiFi客户端对象
PubSubClient client(espClient);
// 当接收到MQTT消息时调用的回调函数
void callback(char *topic, byte *payload, unsigned int length) {
// 打印主题
Serial.print("Received message on topic: ");
Serial.println(topic);
// 打印负载
Serial.print("Payload: ");
for (unsigned int i = 0; i < length; i++) {
Serial.print((char)payload[i]);
}
Serial.println();
// 在这里可以添加处理消息的代码
}
void setup() {
// 初始化串口通信,设置波特率为115200
Serial.begin(115200);
// 连接到WiFi网络
WiFi.begin(ssid, psw);
// 循环直到连接到WiFi
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.println("Connecting to WiFi...");
}
// 打印WiFi连接成功信息
Serial.println("Connected to WiFi");
// 设置MQTT服务器的地址和端口号
client.setServer(mqtt_broker, mqtt_port);
// 设置MQTT消息回调函数
client.setCallback(callback);
// 循环直到连接到MQTT服务器
while (!client.connected()) {
// 创建一个唯一的客户端ID
String clientId = "esp32-client-";
clientId += WiFi.macAddress();
// 尝试连接到MQTT服务器
Serial.printf("Connecting to MQTT broker: %s\\n", clientId.c_str());
if (client.connect(clientId.c_str(), mqtt_username, mqtt_password)) {
// 如果连接成功,打印连接成功信息
Serial.println("Connected to MQTT broker");
// 订阅主题,以便接收消息
client.subscribe(topic);
} else {
// 如果连接失败,打印错误信息
Serial.print("Connection failed with state: ");
Serial.print(client.state());
// 等待2秒后重试
delay(2000);
}
}
}
void loop() {
// 检查MQTT客户端是否连接,并处理任何传入的消息
client.loop();
// 等待100毫秒,避免过于频繁的循环检查
// client.publish(topic, "aa");//发送
delay(100);
}