RyanMqtt使用介绍和示例代码(1)

电子说

1.2w人已加入

描述

测试环境: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源)

添加后如下图所示,直接编译然后烧录

RT-Thread

3、使用msh测试例子
网络硬件必须要能连接到网络,否则mqtt没有任何意义
编译烧录后在串口终端输入 “help” / table键,打印shell命令信息,查看是否有mqtt命令,如下图所示。

注:没有mqtt命令的请查看RyanMqtt软件包是否开启了msh示例

RT-Thread

接着我们输入 “mqtt” / “mqtt help” 命令,打印信息如下图所示

RT-Thread

可以看到msh示例程序给出的部分mqtt功能命令,左侧为mqtt示例命令,中间为命令介绍,右侧为需要传递的参数。

接下来我们依次试试每个命令的功能。

mqtt state (打印mqtt客户端状态)
打印当前mqtt的状态。状态定义为

typedef enum
{
    RyanMqttInvalidState = -1, // 无效状态
    RyanMqttInitState = 0,     // 初始化状态
    RyanMqttStartState,        // 开始状态
    RyanMqttConnectState,      // 连接状态
    RyanMqttDisconnectState,   // 断开连接状态
    RyanMqttReconnectState,    // 重新连接状态
} RyanMqttState_e;

让我们尝试一下
无效状态,因为我们还没有调用连接函数,mqtt客户端还没有被初始化,所以为无效状态

RT-Thread

mqtt connect (mqtt连接服务器)
连接mqtt服务器,可以看到参数为null。连接服务器的配置信息在RyanMqttTest.c文件的头部,如下所示
修改下面配置信息来连接你的mqtt服务器,”broker.emqx.io” 为emqx的开放mqtt服务器。
注意:mqtt客户端id必须唯一,请务必进行修改!

RT-Thread

让我们尝试一下connect

RT-Thread

可以看到打印了一条 “mqtt连接成功回调” 。为什么会打印呢? 这我们就要看看mqtt connect命令做了什么?
首先我们要找到cmdTab,这里存放了示例的所有命令。

RT-Thread

我们点击connect示例对应的函数 “MqttConnect”秘密就发生在mqttConfig的回调函数和注册事件中。我们在注册事件回调中选择了所有事件,其中就包括了mqtt连接成功事件。如下图所示
当mqtt连接成功时就会调用mqttConfig中的mqttEventHandle函数指针。在mqttEventHandle内部我们打印了一条 “mqtt连接成功回调”

RT-Thread

回调函数内部

RT-Thread

可注册的回调事件定义为

RT-Thread

mqtt disc (mqtt断开连接服务器)
主动断开mqtt服务器的连接,使用效果如下,回调函数中打印了 “mqtt断开连接回调”
图中 “204” 为断开连接事件的eventData,可查看可注册的回调事件定义对于eventData的定义。
注:为什么断开连接后会自动重连呢? 我们在调用connect示例的时候使能了 “自动重连” 并定义了重连时间。

RT-Thread

mqtt reconnect (mqtt断开连接时重新连接服务器)
当我们没有使能 “自动重连” 时,我们可以手动调用 RyanMqttReconnect 函数来进行重连
注:如果mqtt客户端不为 RyanMqttDisconnectState 状态,此接口不会进行任何操作

mqtt destory (mqtt销毁客户端)
销毁mqtt客户端,释放mqtt客户端申请的所有资源。

销毁mqtt客户端因为安全问题,设置为异步操作,当接收到 RyanMqttEventDestoryBefore 事件后才真正开始销毁。真正开始销毁速度非常快!就只是释放资源。
至于最多要多长时间才可以销毁?如果网络层移植的没有问题,最长时间为初始化config里的recvTimeout

注:客户端需要初始化后的才可以被销毁,否则会忽视

RT-Thread

mqtt pub (mqtt发布消息)
根据命令提示,需要传入 主题、消息等级、发送内容、发送条数、间隔时间(可以为0)
这里我们使用 mqttx工具来做上位机

使用命令:mqtt pub testup 2 hello 10 0

RT-Thread

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分