菜单

5.9 MQTT 消息收发

下载

本节使用普通 MQTT 服务器演示连接、订阅、发布和消息接收。配套 Demo 将 MQTT 独立放在一个页面,业务接口在 stt_mqtt.lua,界面显示在 main.lua。

本节函数来自配套 Demo。先按 云端工程下载 中的文件说明加载模块,保留 on_init、on_timer 和串口收包转接。普通 MQTT 与 Tuya 共用一个网络会话,切换模式前重启 EPM;模拟器关闭后重新打开。

1. 连接参数

lua 复制代码
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 的连接参数与连接接口

图:stt_mqtt.lua 保存脚本默认参数并处理连接、重连状态。Demo 输入框初值在 main.lua / on_init;点击页面“连接 MQTT”时会读取输入框。只改模块参数、未改输入框,点击按钮后仍以输入框内容为准。

2. 发布与接收

等待界面显示“MQTT 已连接”,再发送:

lua 复制代码
mqtt_publish("stt/demo/echo", "Hello STT")

返回 true 表示提交成功,发送确认后界面才显示“消息发送成功”。当前示例使用 QoS 1。

收到消息后,会调用 main.lua 中的函数,在这里处理自己的业务:

lua 复制代码
function mqtt_on_message(topic, text)
    print("收到主题", topic)
    print("收到内容", text)
end

已有同名函数时,在原函数中增加业务处理,不重复定义。Demo 原函数将主题写到 LW7680、内容写到 LW75C0;界面字符串最多显示 127 字节,过长时显示提示。

3. 应用

打开 配套 Demo,切换到 MQTT 页,填写参数后点击“连接 MQTT”。连接成功后输入消息并点击“发布消息”,检查“最近收到”。

MQTT 连接、发布与回显的实际操作

图:左侧填写服务器参数,右侧填写订阅主题、发布主题和内容;下方显示实际收到的消息。

模块 负责内容
main.lua 输入框、按钮命令、mqtt_on_status()、mqtt_on_message()
stt_mqtt.lua mqtt_connect()、mqtt_publish()、接收与状态超时
stt_link.lua 把命令发送给网络模块,并转交返回报文

4. 常见问题

连接成功但收不到回显? 检查订阅主题与发布主题是否一致,以及服务器是否允许订阅、发布。发布主题不能包含 +、# 通配符。

断网后会一直显示在线吗? 模块会更新断线状态并尝试重连;超过 45 秒未收到状态,Demo 显示超时。连接成功前不要连续提交发布请求。

按按钮和定时发送有区别吗? 都调用 mqtt_publish()。定时发送请放入自己的定时或业务逻辑,先确认已经连接。

上一个
5.8 云端工程下载
下一个
5.10 Tuya 云端属性
最近修改: 2026-11-13Powered by