要在ESP32上实现MQTT主题的收发,你可以使用一个MQTT客户端库,比如PubSubClient库。以下是一个示例代码,展示了如何在ESP32上使用PubSubClient库实现MQTT主题的收发:
```cpp
#include <WiFi.h>
#include <PubSubClient.h>
// WiFi参数
const char* ssid = "YourWiFiSSID";
const char* password = "YourWiFiPassword";
// MQTT服务器参数
const char* mqttServer = "mqttServerIP";
const int mqttPort = 1883;
const char* mqttUser = "YourMQTTUsername";
const char* mqttPassword = "YourMQTTPassword";
// MQTT客户端
WiFiClient espClient;
PubSubClient client(espClient);
// MQTT订阅回调函数
void callback(char* topic, byte* payload, unsigned int length) {
Serial.print("收到主题:");
Serial.println(topic);
Serial.print("收到消息:");
for (int i = 0; i < length; i++) {
Serial.print((char)payload[i]);
}
Serial.println();
}
// 连接WiFi和MQTT服务器
void setup() {
// 初始化串口
Serial.begin(115200);
// 连接WiFi
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(1000);
Serial.println("连接到WiFi...");
}
Serial.println("WiFi连接成功!");
// 设置MQTT服务器和回调函数
client.setServer(mqttServer, mqttPort);
client.setCallback(callback);
// 连接MQTT服务器
while (!client.connected()) {
if (client.connect("ESP32Client", mqttUser, mqttPassword)) {
Serial.println("MQTT服务器连接成功!");
// 订阅主题
client.subscribe("your/mqtt/topic");
}
else {
Serial.print("连接失败,错误码:");
Serial.println(client.state());
delay(2000);
}
}
}
void loop() {
// 保持MQTT连接
if (!client.connected()) {
reconnect();
}
// 处理MQTT消息
client.loop();
}
// 重新连接MQTT服务器
void reconnect() {
while (!client.connected()) {
Serial.println("尝试重新连接到MQTT服务器...");
if (client.connect("ESP32Client", mqttUser, mqttPassword)) {
Serial.println("MQTT服务器连接成功!");
// 恢复订阅
client.subscribe("your/mqtt/topic");
}
else {
Serial.print("连接失败,错误码:");
Serial.println(client.state());
delay(2000);
}
}
}
```
上述代码将ESP32连接到WiFi,并实现了MQTT主题的订阅和发布功能。你需要将其中的参数替换为你的WiFi和MQTT服务器的相关信息,以及设置你想要订阅和发布的MQTT主题。