ESP32利用PubSubClient库实现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主题。 ######[AI写代码神器 | 1996点数解答 | 2024-04-19 23:03:08]
- Java实现链表反转:迭代与递归双解法详解及开发实战指南(DeepSeek | 1409点数解答 | 2026-03-15 15:09:29)50
- Python 实现球类:精准计算半径、表面积与体积,附输入验证与异常处理!(阿里通义 | 261点数解答 | 2024-11-28 21:19:39)368
- 揭秘 @value("${mqtt.host}"):Spring 框架读取配置文件属性值注解的用途( | 87点数解答 | 2024-04-29 15:50:51)193
- 缜密逻辑,全新无名杀“风餐”技能代码精心打造与深度解析 (字节豆包 | 469点数解答 | 2025-04-05 11:37:06)261
- 优化高中英语核心词汇短语HTML页面,这些建议不容错过!(DeepSeek | 217点数解答 | 2025-07-01 23:41:02)201
- ESP-IDF实现ESP32蓝牙手柄:含十字键、多按键及睡眠功能完整工程(GPT | 5792点数解答 | 2024-11-26 13:35:09)145
- ESP32标准蓝牙手柄开发:含按键、指示灯及睡眠功能完整工程方案(GPT | 2834点数解答 | 2024-11-26 13:37:12)379
- 探寻数组中最长摆动子序列长度:思路剖析与代码优化(GPT | 758点数解答 | 2024-12-23 23:18:29)285
- 独家剖析:求解数组最长摆动子序列长度的代码实现与改进建议(GPT | 350点数解答 | 2024-12-23 23:20:54)282
- Three.js 示例代码解析:优化场景渲染与注意要点(字节豆包 | 164点数解答 | 2025-02-27 23:30:20)281
- 51 单片机:定时器 0 实现 8 个 LED 循环点亮,附代码及优化建议(字节豆包 | 1193点数解答 | 2024-12-27 15:10:29)337
- 用 JS 中 for 循环实现 1 到 100 相加并输出结果到页面的完整代码 ( | 240点数解答 | 2024-05-20 22:11:29)491