本节使用普通 MQTT 服务器演示连接、订阅、发布和消息接收。配套 Demo 将 MQTT 独立放在一个页面,业务接口在 stt_mqtt.lua,界面显示在 main.lua。
本节函数来自配套 Demo。先按 云端工程下载 中的文件说明加载模块,保留
on_init、on_timer和串口收包转接。普通 MQTT 与 Tuya 共用一个网络会话,切换模式前重启 EPM;模拟器关闭后重新打开。
mqtt_server = "81.70.242.63" -- 服务器
mqtt_port = 1883 -- 端口
mqtt_client_id = "" -- 留空自动生成
mqtt_username = "" -- 用户名
mqtt_password = "" -- 密码
mqtt_sub_topic = "stt/demo/echo" -- 订阅主题
mqtt_pub_topic = "stt/demo/echo" -- 发布主题
mqtt_ssl = false
mqtt_connect()
示例使用同一订阅、发布主题,便于看到回显。实际项目改为自己的主题和账户;多台设备使用不同客户端 ID。

图:stt_mqtt.lua 保存脚本默认参数并处理连接、重连状态。Demo 输入框初值在 main.lua / on_init;点击页面“连接 MQTT”时会读取输入框。只改模块参数、未改输入框,点击按钮后仍以输入框内容为准。
等待界面显示“MQTT 已连接”,再发送:
mqtt_publish("stt/demo/echo", "Hello STT")
返回 true 表示提交成功,发送确认后界面才显示“消息发送成功”。当前示例使用 QoS 1。
收到消息后,会调用 main.lua 中的函数,在这里处理自己的业务:
function mqtt_on_message(topic, text)
print("收到主题", topic)
print("收到内容", text)
end
已有同名函数时,在原函数中增加业务处理,不重复定义。Demo 原函数将主题写到 LW7680、内容写到 LW75C0;界面字符串最多显示 127 字节,过长时显示提示。
打开 配套 Demo,切换到 MQTT 页,填写参数后点击“连接 MQTT”。连接成功后输入消息并点击“发布消息”,检查“最近收到”。

图:左侧填写服务器参数,右侧填写订阅主题、发布主题和内容;下方显示实际收到的消息。
| 模块 | 负责内容 |
|---|---|
main.lua |
输入框、按钮命令、mqtt_on_status()、mqtt_on_message() |
stt_mqtt.lua |
mqtt_connect()、mqtt_publish()、接收与状态超时 |
stt_link.lua |
把命令发送给网络模块,并转交返回报文 |
连接成功但收不到回显? 检查订阅主题与发布主题是否一致,以及服务器是否允许订阅、发布。发布主题不能包含 +、# 通配符。
断网后会一直显示在线吗? 模块会更新断线状态并尝试重连;超过 45 秒未收到状态,Demo 显示超时。连接成功前不要连续提交发布请求。
按按钮和定时发送有区别吗? 都调用 mqtt_publish()。定时发送请放入自己的定时或业务逻辑,先确认已经连接。