一、公共免费 MQTT 服务器EMQX 公开地址plaintext服务器地址broker.emqx.io 端口1883无加密 TCP端口1883 无需账号密码、免费不限量二、准备工作开发板ESP32软件Arduino IDE安装库PubSubClientMQTT 库三、完整可直接运行代码cpp运行#include WiFi.h #include PubSubClient.h // 1.填写自己WIFI信息 const char* ssid 你的WiFi名称; const char* password 你的WiFi密码; // 2.公共EMQX服务器 const char* mqttServer broker.emqx.io; const int mqttPort 1883; // 3.自定义主题全局唯一别重复 #define TOPIC_PUB esp32/test/send // 发布主题 #define TOPIC_SUB esp32/test/recv // 订阅主题 WiFiClient espClient; PubSubClient client(espClient); // 连接WIFI void setupWifi(){ delay(10); Serial.println(连接WiFi...); WiFi.begin(ssid, password); while (WiFi.status() ! WL_CONNECTED) { delay(500); Serial.print(.); } Serial.println(WiFi连接成功); } // MQTT重连 void reconnectMQTT() { while (!client.connected()) { if (client.connect(ESP32_001)) { // 设备ID随意写 Serial.println(MQTT连接成功); client.subscribe(TOPIC_SUB); // 订阅接收消息 } else { delay(2000); } } } // 收到订阅消息回调 void callback(char* topic, byte* payload, unsigned int length) { Serial.print(收到消息); for (int i0;ilength;i){ Serial.print((char)payload[i]); } Serial.println(); } void setup() { Serial.begin(115200); setupWifi(); client.setServer(mqttServer, mqttPort); client.setCallback(callback); } void loop() { if (!client.connected()) { reconnectMQTT(); } client.loop(); // 每隔3秒发布一条数据 static unsigned long t0; if(millis()-t3000){ tmillis(); client.publish(TOPIC_PUB,ESP32在线数据); Serial.println(已发布数据); } }四、使用步骤修改代码里WiFi 名称 密码选择开发板ESP32 Dev Module选择对应端口上传代码打开串口助手 115200 波特率五、双向通信逻辑ESP32 Publish往esp32/test/send发数据ESP32 Subscribe监听esp32/test/recv收指令电脑 / 手机 MQTT 工具同主题即可互通六、电脑端测试工具浏览器直接用EMQX 在线 MQTT 客户端地址https://www.emqx.io/online-mqtt-client填入服务器broker.emqx.io:1883订阅 / 发布相同主题即可收发 ESP32 数据七、常见报错解决连不上 WiFi → 密码大小写错误MQTT 连不上 → 网络无法访问外网收不到消息 →主题名必须完全一致频繁掉线 → 设备 ID 重复改ESP32_001随机名字