电子说
测试环境:stm32F401RCT6、RT-Thread版本: v4.1.0、RT-Thread Studio版本: 2.2.6、网络硬件使用ec800m移植at_socket使用sal框架。
1、添加网络硬件
RyanMqtt依赖SAL框架 / LWIP。
此步骤不做过多解释,是lwip就用lwip,是at设备就用at_socket。推荐所有平台都使用SAL框架(RyanMqtt软件包会自动使能)。
2、添加RyanMqtt
这里使用的Studio开发环境,点击 RT-Thread Settings,选择添加软件包,搜索RyanMqtt添加。
开启RyanMqtt msh示例,版本建议选择latest (latest包含了最新的错误修复和特性,推送前都经过测试的。但是rt-thread使用gitee镜像,同步需要1-3天,如果要使用最新latest版本请修改为github源)
添加后如下图所示,直接编译然后烧录
3、使用msh测试例子
网络硬件必须要能连接到网络,否则mqtt没有任何意义
编译烧录后在串口终端输入 “help” / table键,打印shell命令信息,查看是否有mqtt命令,如下图所示。
注:没有mqtt命令的请查看RyanMqtt软件包是否开启了msh示例
接着我们输入 “mqtt” / “mqtt help” 命令,打印信息如下图所示
可以看到msh示例程序给出的部分mqtt功能命令,左侧为mqtt示例命令,中间为命令介绍,右侧为需要传递的参数。
接下来我们依次试试每个命令的功能。
mqtt state (打印mqtt客户端状态)
打印当前mqtt的状态。状态定义为
typedef enum
{
RyanMqttInvalidState = -1, // 无效状态
RyanMqttInitState = 0, // 初始化状态
RyanMqttStartState, // 开始状态
RyanMqttConnectState, // 连接状态
RyanMqttDisconnectState, // 断开连接状态
RyanMqttReconnectState, // 重新连接状态
} RyanMqttState_e;
让我们尝试一下
无效状态,因为我们还没有调用连接函数,mqtt客户端还没有被初始化,所以为无效状态
mqtt connect (mqtt连接服务器)
连接mqtt服务器,可以看到参数为null。连接服务器的配置信息在RyanMqttTest.c文件的头部,如下所示
修改下面配置信息来连接你的mqtt服务器,”broker.emqx.io” 为emqx的开放mqtt服务器。
注意:mqtt客户端id必须唯一,请务必进行修改!
让我们尝试一下connect
可以看到打印了一条 “mqtt连接成功回调” 。为什么会打印呢? 这我们就要看看mqtt connect命令做了什么?
首先我们要找到cmdTab,这里存放了示例的所有命令。
我们点击connect示例对应的函数 “MqttConnect”秘密就发生在mqttConfig的回调函数和注册事件中。我们在注册事件回调中选择了所有事件,其中就包括了mqtt连接成功事件。如下图所示
当mqtt连接成功时就会调用mqttConfig中的mqttEventHandle函数指针。在mqttEventHandle内部我们打印了一条 “mqtt连接成功回调”
回调函数内部
可注册的回调事件定义为
mqtt disc (mqtt断开连接服务器)
主动断开mqtt服务器的连接,使用效果如下,回调函数中打印了 “mqtt断开连接回调”
图中 “204” 为断开连接事件的eventData,可查看可注册的回调事件定义对于eventData的定义。
注:为什么断开连接后会自动重连呢? 我们在调用connect示例的时候使能了 “自动重连” 并定义了重连时间。
mqtt reconnect (mqtt断开连接时重新连接服务器)
当我们没有使能 “自动重连” 时,我们可以手动调用 RyanMqttReconnect 函数来进行重连
注:如果mqtt客户端不为 RyanMqttDisconnectState 状态,此接口不会进行任何操作
mqtt destory (mqtt销毁客户端)
销毁mqtt客户端,释放mqtt客户端申请的所有资源。
销毁mqtt客户端因为安全问题,设置为异步操作,当接收到 RyanMqttEventDestoryBefore 事件后才真正开始销毁。真正开始销毁速度非常快!就只是释放资源。
至于最多要多长时间才可以销毁?如果网络层移植的没有问题,最长时间为初始化config里的recvTimeout
注:客户端需要初始化后的才可以被销毁,否则会忽视
mqtt pub (mqtt发布消息)
根据命令提示,需要传入 主题、消息等级、发送内容、发送条数、间隔时间(可以为0)
这里我们使用 mqttx工具来做上位机
使用命令:mqtt pub testup 2 hello 10 0
全部0条评论
快来发表一下你的评论吧 !