news 2026/4/23 16:28:35

使用 Docker 搭建 EMQX,并通过 MicroPython 实现 MQTT 控制 ESP32 LED

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
使用 Docker 搭建 EMQX,并通过 MicroPython 实现 MQTT 控制 ESP32 LED

使用 Docker 搭建 EMQX,并通过 MicroPython 实现 MQTT 控制 ESP32 LED

在物联网项目中,MQTT是最常用的消息通信协议之一。本文将通过一个完整示例,演示如何:

  1. 使用Docker 快速部署 EMQX
  2. 解决端口冲突问题
  3. 使用MicroPython作为 MQTT 客户端
  4. 通过 MQTT 消息远程控制 ESP32 LED

一、使用 Docker 快速启动 EMQX

1. 基础启动命令

最基础的 EMQX 容器启动方式如下:

dockerrun-itd\--nameemqx\-p1883:1883\-p8083:8083\-p8084:8084\-p8883:8883\-p18083:18083\emqx/emqx

容器启动成功后会返回类似 ID:

185326ea778710a12c77ad3b3e24800ce7591c30f4feb0196742bfd70f655d14

这样:

  • 宿主机:1884
  • 容器内部:1883(MQTT 默认端口)

二、访问 EMQX 控制台

浏览器访问(HTTPS):

https://服务器IP:18083

默认账号密码:

用户名:admin 密码:public

控制台界面如下:


三、MicroPython MQTT 客户端实现

ESP32 使用MicroPython,MQTT 客户端代码基于simple.py实现。


1. MQTT 客户端库(simple.py)

文件名:simple.py

importusocketassocketimportustructasstructfromubinasciiimporthexlifyclassMQTTException(Exception):passclassMQTTClient:def__init__(self,client_id,server,port=0,user=None,password=None,keepalive=0,ssl=None,):ifport==0:port=8883ifsslelse1883self.client_id=client_id self.sock=Noneself.server=server self.port=port self.ssl=ssl self.pid=0self.cb=Noneself.user=user self.pswd=password self.keepalive=keepalive self.lw_topic=Noneself.lw_msg=Noneself.lw_qos=0self.lw_retain=Falsedef_send_str(self,s):self.sock.write(struct.pack("!H",len(s)))self.sock.write(s)def_recv_len(self):n=0sh=0while1:b=self.sock.read(1)[0]n|=(b&0x7F)<<shifnotb&0x80:returnn sh+=7defset_callback(self,f):self.cb=fdefset_last_will(self,topic,msg,retain=False,qos=0):self.lw_topic=topic self.lw_msg=msg self.lw_qos=qos self.lw_retain=retaindefconnect(self,clean_session=True):self.sock=socket.socket()addr=socket.getaddrinfo(self.server,self.port)[0][-1]self.sock.connect(addr)premsg=bytearray(b"\x10\0\0\0\0\0")msg=bytearray(b"\x04MQTT\x04\x02\0\0")sz=10+2+len(self.client_id)msg[6]=clean_session<<1ifself.user:sz+=2+len(self.user)+2+len(self.pswd)msg[6]|=0xC0i=1whilesz>0x7F:premsg[i]=(sz&0x7F)|0x80sz>>=7i+=1premsg[i]=sz self.sock.write(premsg,i+2)self.sock.write(msg)self._send_str(self.client_id)ifself.user:self._send_str(self.user)self._send_str(self.pswd)resp=self.sock.read(4)ifresp[3]!=0:raiseMQTTException(resp[3])defsubscribe(self,topic,qos=0):self.cbisnotNonepkt=bytearray(b"\x82\0\0\0")self.pid+=1struct.pack_into("!BH",pkt,1,2+2+len(topic)+1,self.pid)self.sock.write(pkt)self._send_str(topic)self.sock.write(qos.to_bytes(1,"little"))defcheck_msg(self):self.sock.setblocking(False)try:res=self.sock.read(1)except:returnifres==b"\x30":self.sock.read(1)tlen=self.sock.read(2)tlen=(tlen[0]<<8)|tlen[1]topic=self.sock.read(tlen)msg=self.sock.read()self.cb(topic,msg)

四、ESP32 主程序(控制 LED)

文件名:main.py

fromsimpleimportMQTTClientfrommachineimportPinimportnetwork led=Pin(2,Pin.OUT)SSID="wifi名称"PASSWORD="wifi密码"wlan=network.WLAN(network.STA_IF)wlan.active(True)ifnotwlan.isconnected():wlan.connect(SSID,PASSWORD)whilenotwlan.isconnected():passprint("Network config:",wlan.ifconfig())SERVER="192.168.31.219"PORT=1884CLIENT_ID="my_micropython_client"defsub(topic,msg):print(topic,msg)iftopic==b"led002":ifmsg==b"on":led.value(0)elifmsg==b"off":led.value(1)client=MQTTClient(CLIENT_ID,SERVER,PORT,"test","123456")client.set_callback(sub)client.connect()client.subscribe(b"led002")whileTrue:client.check_msg()

五、测试效果

通过 EMQX 控制台或其他 MQTT 客户端:

  • Topic:led002

  • Payload:

    • on→ LED 亮
    • off→ LED 灭

设备成功订阅并响应:

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/23 16:18:14

论文查重结果高于30%?运用这五个高效策略,轻松让重复率符合学术标准

最新研究数据揭示&#xff0c;全球气温上升与极端气候事件发生频率上升之间存在明确的因果关系&#xff0c;这一发现通过科学验证表明环境温度变化会直接引发更为频繁的异常天气模式。 首先&#xff0c;咱们聊聊人工降重的基本功 根据最新调研数据&#xff0c;近年来人工智能…

作者头像 李华
网站建设 2026/4/18 5:30:58

查重过了却卡在论文降AI率?论文降AI率常见翻车原因总结

论文AI 率到底该怎么降&#xff1f;了解这些原理后&#xff0c;降ai 率真的超简单&#xff0c;本人亲测&#xff0c;三分钟就可以降到个位数&#xff0c;知网秒过&#xff01; 一、为什么手动降重总翻车&#xff1f;学术党必知的3大痛点 “明明查重率达标了&#xff0c;导师却…

作者头像 李华
网站建设 2026/4/19 19:59:51

【计算机毕业设计案例】基于机器学习的二手车价格预测及应用实现

博主介绍&#xff1a;✌️码农一枚 &#xff0c;专注于大学生项目实战开发、讲解和毕业&#x1f6a2;文撰写修改等。全栈领域优质创作者&#xff0c;博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围&#xff1a;&am…

作者头像 李华
网站建设 2026/4/23 11:20:49

深度测评10个AI论文平台,本科生轻松搞定毕业论文!

深度测评10个AI论文平台&#xff0c;本科生轻松搞定毕业论文&#xff01; AI工具如何让论文写作变得轻松 在当今这个信息爆炸的时代&#xff0c;越来越多的本科生开始借助AI工具来辅助自己的毕业论文写作。无论是查找资料、撰写大纲&#xff0c;还是进行内容润色和降重&#xf…

作者头像 李华
网站建设 2026/4/23 7:11:47

【ESP32】 软件开发路线三层深度分析

从初学者入门到专业产品开发&#xff0c;再到未来技术趋势&#xff0c;ESP32 提供了多种技术路径选择。以下从三个层面详细分析各路线优劣。一、初学入门层面&#xff08;学习曲线与上手速度&#xff09; 核心需求 快速上手&#xff1a;简单安装配置&#xff0c;立即看到效果学…

作者头像 李华
网站建设 2026/4/23 8:21:11

未来编程行业的AI应用与发展

未来编程行业的AI应用与发展 关键词:编程行业、AI应用、发展趋势、自动化编程、代码智能辅助 摘要:本文深入探讨了未来编程行业中AI的应用与发展。首先介绍了研究的背景、目的、预期读者和文档结构,解释了相关术语。接着阐述了AI与编程行业相关的核心概念及其联系,包括原理…

作者头像 李华