esp32收发mqtt主题

要在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主题。

相关代码参考