全球最实用的IT互联网信息网站!

AI人工智能P2P分享&下载搜索网页发布信息网站地图

当前位置:诺佳网 > 电子/半导体 > 控制/MCU >

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

时间:2023-09-28 10:09

人气:

作者:admin

标签: 使用    示例  RyanMqtt  介绍 

导读:此步骤不做过多解释,是lwip就用lwip,是at设备就用at_socket。推荐所有平台都使用SAL框架(RyanMqtt软件包会自动使能)。...

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

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

1.jpg

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

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

1.jpg

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

1.jpg

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

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

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

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

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

1.jpg

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

1.jpg

让我们尝试一下connect

1.jpg

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

1.jpg

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

3.jpg

回调函数内部

1.jpg

可注册的回调事件定义为

1.jpg

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

1.jpg

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

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

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

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

1.jpg

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

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

1.jpg

温馨提示:以上内容整理于网络,仅供参考,如果对您有帮助,留下您的阅读感言吧!
相关阅读
本类排行
相关标签
本类推荐

CPU | 内存 | 硬盘 | 显卡 | 显示器 | 主板 | 电源 | 键鼠 | 网站地图

Copyright © 2025-2035 诺佳网 版权所有 备案号:赣ICP备2025066733号
本站资料均来源互联网收集整理,作品版权归作者所有,如果侵犯了您的版权,请跟我们联系。

关注微信