ESP32 + MQTT 实现 LED 远程控制与数据上报 本人玩各种AI硬件、具身智能、AI算法、模型训练、机器视觉等。欢迎合作通过 ESP32 连接公共 MQTT Brokerbroker.emqx.io实现 LED 远程控制和定时数据上报无需自建服务器。硬件ESP32 开发板任意型号USB 数据线环境Arduino IDE 安装 ESP32 板级支持库管理器搜索安装PubSubClient by Nick O’Leary代码#includeWiFi.h#includePubSubClient.h#defineLED_BUILTIN14// 配置区修改这里 constchar*ssid你的WiFi名称;constchar*password你的WiFi密码;constchar*mqtt_brokerbroker.emqx.io;constchar*mqtt_topicemqx/esp32;constintmqtt_port1883;// WiFiClient espClient;PubSubClientmqtt_client(espClient);// 获取芯片唯一IDStringgetChipId(){returnString((uint32_t)ESP.getEfuseMac());}voidconnectToWiFi(){WiFi.begin(ssid,password);Serial.print(Connecting WiFi);while(WiFi.status()!WL_CONNECTED){delay(500);Serial.print(.);}Serial.printf(\nConnected! IP: %s\n,WiFi.localIP().toString().c_str());}voidconnectToMQTT(){String client_idesp32-getChipId();while(!mqtt_client.connected()){Serial.printf(Connecting MQTT as %s...\n,client_id.c_str());if(mqtt_client.connect(client_id.c_str(),nullptr,nullptr)){mqtt_client.subscribe(mqtt_topic);mqtt_client.publish(mqtt_topic,ESP32 online);Serial.println(MQTT connected subscribed);}else{Serial.printf(Failed (rc%d), retry in 5s\n,mqtt_client.state());delay(5000);}}}// 每10秒发布模拟传感器数据voidpublishMessage(){String msg{\device\:\esp32-getChipId()\,\temp\:String(random(20,30)),\humidity\:String(random(40,70))};if(mqtt_client.publish(mqtt_topic,msg.c_str()))Serial.printf(Published: %s\n,msg.c_str());}// 收到消息时自动触发voidmqttCallback(char*topic,byte*payload,unsignedintlength){String msg;for(unsignedinti0;ilength;i)msg(char)payload[i];Serial.printf(Received [%s]: %s\n,topic,msg.c_str());if(msgledon)digitalWrite(LED_BUILTIN,HIGH);if(msgledoff)digitalWrite(LED_BUILTIN,LOW);}voidsetup(){Serial.begin(115200);pinMode(LED_BUILTIN,OUTPUT);connectToWiFi();mqtt_client.setServer(mqtt_broker,mqtt_port);mqtt_client.setKeepAlive(60);mqtt_client.setCallback(mqttCallback);connectToMQTT();}voidloop(){if(!mqtt_client.connected())connectToMQTT();mqtt_client.loop();// 必须定期调用// 每10秒发布一次staticunsignedlonglast0;if(millis()-last10000){lastmillis();publishMessage();}}代码要点功能说明mqtt_client.loop()loop 中必须调用维持连接 处理消息setKeepAlive(60)心跳 60 秒防止 Broker 判定超时getChipId()用芯片 MAC 作为唯一 client_id断线重连每次循环检查连接状态断开自动重连测试MQTT Explorer连接broker.emqx.io:1883向主题emqx/esp32发送ledon/ledoff控制 LED。命令行# 接收数据mosquitto_sub-hbroker.emqx.io-temqx/esp32# 发送指令mosquitto_pub-hbroker.emqx.io-temqx/esp32-mledon常见问题WiFi 连不上ESP32 只支持 2.4GHz收不到消息确认主题一致loop()已调用PubSubClient.h 找不到安装 PubSubClient 库LED 不亮确认LED_BUILTIN引脚与板子一致