外观
MQTT 示例
2025-09-22
本文将详细介绍如何在开发环境里创建 03_network_mqtt 示例工程,并将其编译后在开发板上运行,最终通过 paho mqtt库实现MQTT通信。帮助读者熟悉开发环境,掌握 MQTT通信的使用方法。
MQTT 的作用
MQTT(Message Queuing Telemetry Transport)是一种基于发布/订阅模式的轻量级消息传输协议,专为资源受限的设备和低带宽、不稳定的网络环境设计。其主要作用包括:
- 高效通信:采用二进制消息头和紧凑的消息格式,减少数据传输量,提高通信效率。
- 灵活连接:支持多种网络环境,包括 Wi-Fi、蜂窝网络等,设备可随时连接或断开。
- 异步通信:发布者和订阅者之间通过中间代理进行通信,实现异步消息传递,解耦双方的依赖关系。
- 可靠传输:提供三种不同的服务质量(QoS)级别,确保消息按要求可靠传输。
运行 MQTT 发布订阅示例
本示例旨在演示如何运用示例旨在演示如何运用 paho mqtt 库在开发板上实现 MQTT 消息的发布和订阅功能。
创建工程点击展开
依次点击 “文件” -> “新建” -> "RT-Thread RuiChing App 项目"。

在弹出新建向导中选择 开发版 、BSP: 、示例 、 调试器/下载器。选择好之后点击 “完成”。

点击 “完成” 后,等待工程创建完成。

创建完成。

构建工程点击展开
单击工程使工程进入 Active-Debug 模式。

点击工具栏上的构建按钮进行工程编译。

构建成功后,会显示构建成功的信息。

固件下载点击展开
固化设备树

固化 APP

核心示例代码
MQTT 示例相关 API
mqtt_sub_default_callback: MQTT 订阅消息的默认回调函数。当开发板接收到订阅主题的消息时,此函数会被调用。在函数内部,会对收到的消息进行处理;paho_mqtt_start:用于启动 MQTT 客户端。它会完成 MQTT 客户端的初始化、连接到 MQTT 代理服务器、订阅指定主题等操作,为后续的消息接收和发布做准备;MQTTPublish:用于向 MQTT 代理服务器发布消息。它接受主题、消息内容等参数,将消息封装后发送到指定主题,供订阅该主题的客户端接收;
使用这个设置用户名和密码
client.condata.username.cstring = "";
client.condata.password.cstring = "";
当使用其他 mqtt 服务器和订阅、发布主题时,修改下面的宏定义
applications/paho_mqtt_example.c
#define MQTT_URI "tcp://broker.emqx.io:1883"
#define MQTT_SUBTOPIC "/mqtt/test/"
#define MQTT_PUBTOPIC "/mqtt/test/"applications/paho_mqtt_example.c
static void mq_start(void)
{
...
// mqtt 客户端回调函数和订阅消息主题设置
client.connect_callback = mqtt_connect_callback;
client.online_callback = mqtt_online_callback;
client.offline_callback = mqtt_offline_callback;
client.messageHandlers[0].topicFilter = sup_pub_topic;
client.messageHandlers[0].callback = mqtt_sub_callback;
client.messageHandlers[0].qos = QOS1;
client.defaultMessageHandler = mqtt_sub_default_callback;
}
LOG_D("Start mqtt client and subscribe topic:%s", sup_pub_topic);
paho_mqtt_start(&client); // 开启mqtt客户端
...
}
static void mq_publish(const char *send_str)
{
MQTTMessage message;
const char *msg_str = send_str;
const char *topic = sup_pub_topic;
message.qos = QOS1;
message.retained = 0;
message.payload = (void *)msg_str;
message.payloadlen = strlen(message.payload);
MQTTPublish(&client, topic, &message); // 发布消息
return;
}
...运行示例
操作步骤
1.配置 MQTT 客户端连接参数与开发板一致

设置订阅主题

2. 设置网络参数
在开发板运行程序后,在控制台依次输入以下命令:
- 设置 IP 地址:将 IP 地址替换为自己网络的实际 IP 地址。
ifconfig e0 10.25.8.111 10.25.8.254 255.255.255.0- 设置 DNS 服务器:将 DNS 服务器替换为自己网络的实际 DNS 服务器地址。
dns e0 0 223.5.5.53. 启动 mqtt
在完成网络参数设置后,输入以下命令启动 mqtt:
msh />mqtt_example
[I/example.mqtt] Start mqtt client and subscribe topic:/mqtt/test/rtthread24595
[I/example.mqtt] Start to connect mqtt server
[D/mqtt] ipv4 address port: 1883
[D/mqtt] HOST = 'broker.emqx.io'
[I/mqtt] MQTT server connect success.
[I/example.mqtt] Subscribe #0 /mqtt/test/rtthread24595 OK!
[D/example.mqtt] Connect mqtt server success
[D/example.mqtt] Publish message: Hello,RT-Thread! to topic: /mqtt/test/rtthread24595
[D/example.mqtt] Topic: /mqtt/test/rtthread24595 receive a message: Hello,RT-Thread!
msh />msh_mq_publish AAAAAAA
[D/example.mqtt] Topic: /mqtt/test/rtthread24595 receive a message: AAAAAAA
[D/example.mqtt] Topic: /mqtt/test/rtthread24595 receive a message: hello123
