news 2026/8/15 21:23:07

ESP32 + MQTT 实现 LED 远程控制与数据上报

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
ESP32 + MQTT 实现 LED 远程控制与数据上报

本人玩各种AI硬件、具身智能、AI算法、模型训练、机器视觉等。欢迎合作!!!

通过 ESP32 连接公共 MQTT Broker(broker.emqx.io),实现 LED 远程控制和定时数据上报,无需自建服务器。

硬件

  • ESP32 开发板(任意型号)
  • USB 数据线

环境

  1. Arduino IDE 安装 ESP32 板级支持
  2. 库管理器搜索安装PubSubClient by Nick O’Leary

代码

#include<WiFi.h>#include<PubSubClient.h>#defineLED_BUILTIN14// ========== 配置区(修改这里) ==========constchar*ssid="你的WiFi名称";constchar*password="你的WiFi密码";constchar*mqtt_broker="broker.emqx.io";constchar*mqtt_topic="emqx/esp32";constintmqtt_port=1883;// ========================================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_id="esp32-"+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(unsignedinti=0;i<length;i++)msg+=(char)payload[i];Serial.printf("Received [%s]: %s\n",topic,msg.c_str());if(msg=="ledon")digitalWrite(LED_BUILTIN,HIGH);if(msg=="ledoff")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秒发布一次staticunsignedlonglast=0;if(millis()-last>10000){last=millis();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-t"emqx/esp32"# 发送指令mosquitto_pub-hbroker.emqx.io-t"emqx/esp32"-m"ledon"

常见问题

  • WiFi 连不上:ESP32 只支持 2.4GHz
  • 收不到消息:确认主题一致;loop()已调用
  • PubSubClient.h 找不到:安装 PubSubClient 库
  • LED 不亮:确认LED_BUILTIN引脚与板子一致
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/8/15 21:20:01

CPU-Z核心参数深度解析:从频率、缓存到功耗电压的实战指南

1. 项目概述&#xff1a;从“看热闹”到“看门道”上次我们聊了CPU-Z的安装、界面概览和CPU选项卡里那些最基础的信息&#xff0c;比如型号、代号、工艺这些“面子”上的东西。很多朋友看完后反馈说&#xff0c;终于知道自己的CPU“姓甚名谁”了&#xff0c;但感觉还是停留在“…

作者头像 李华
网站建设 2026/8/15 21:17:02

Bun实战指南:一体化JavaScript工具链的性能优势与迁移策略

最近在社区里看到不少关于 Bun 的讨论&#xff0c;标题党们喊着“Node.js 要凉了”&#xff0c;而实际项目中&#xff0c;从阿里、腾讯到字节&#xff0c;确实有不少团队开始尝试或小范围使用 Bun 来提升开发体验和构建效率。作为一个长期与 Node.js 生态打交道的开发者&#x…

作者头像 李华
网站建设 2026/8/15 21:16:48

有哪些方法可以快速提升淘宝新店流量?新手零成本起流全攻略

有哪些方法可以快速提升淘宝新店流量&#xff1f;新手零成本起流全攻略很多淘宝新店商家都会陷入一个运营误区&#xff1a;新店刚开店&#xff0c;店铺权重低、单品零销量、零评价&#xff0c;免费流量拿不到&#xff0c;直通车、超级推荐付费投放又烧钱没效果&#xff0c;最后…

作者头像 李华
网站建设 2026/8/15 21:15:21

Embedding与向量数据库:从语义理解到智能检索的核心技术解析

1. 从“关键词”到“向量”&#xff1a;Embedding技术如何重塑数据理解 如果你最近在关注AI应用开发&#xff0c;尤其是大模型相关的项目&#xff0c;那么“Embedding”和“向量数据库”这两个词一定高频出现在你的视野里。它们不再是学术论文里的专有名词&#xff0c;而是成为…

作者头像 李华