0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

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

冬至子 来源:Ryan_CW 作者:Ryan_CW 2023-09-28 10:09 次阅读

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

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

    关注

    6030

    文章

    44482

    浏览量

    631707
  • STM32
    +关注

    关注

    2264

    文章

    10852

    浏览量

    354151
  • 硬件设计
    +关注

    关注

    18

    文章

    389

    浏览量

    44512
  • 代码
    +关注

    关注

    30

    文章

    4710

    浏览量

    68190
  • 上位机
    +关注

    关注

    27

    文章

    929

    浏览量

    54686
  • 回调函数
    +关注

    关注

    0

    文章

    87

    浏览量

    11525
  • LwIP协议栈
    +关注

    关注

    0

    文章

    19

    浏览量

    7330
  • RT-Thread
    +关注

    关注

    31

    文章

    1257

    浏览量

    39810
  • STM32F401
    +关注

    关注

    1

    文章

    16

    浏览量

    10457
收藏 人收藏

    评论

    相关推荐

    RyanMqtt使用介绍示例代码(2)

    先测试 “$” 通配符,”$”比较特殊,应用不能使用”$”开头的系统主题!
    的头像 发表于 09-28 10:24 1055次阅读
    <b class='flag-5'>RyanMqtt</b>使用<b class='flag-5'>介绍</b>和<b class='flag-5'>示例</b><b class='flag-5'>代码</b>(2)

    RyanMqtt实现MQTT3.1.1协议的客户端

    还没有同步到packages库列表,暂时还无法在软件包列表搜索到。提pr应该3天了…….介绍RyanMqtt 实现了 MQTT3.1.1 协议的客户端。此库针对资源受限的嵌入式设备进行了优化。初衷:在
    发表于 12-01 15:19

    RyanMqtt在间隔1s发送消息时常就报错RyanSocketFailedError

    使用RyanMqtt库以及例子,在间隔1s发送消息时常就报错RyanSocketFailedError,然后就进入重连机制
    发表于 08-04 16:48

    excel vba代码 示例讲解

    excel vba代码 示例讲解
    发表于 09-07 09:36 25次下载
    excel vba<b class='flag-5'>代码</b> <b class='flag-5'>示例</b>讲解

    MSP430x11x1,MSP430F21x1 示例代码

    MSP430x11x1,MSP430F21x1 示例代码
    发表于 05-03 10:48 9次下载
    MSP430x11x<b class='flag-5'>1</b>,MSP430F21x<b class='flag-5'>1</b> <b class='flag-5'>示例</b><b class='flag-5'>代码</b>

    python代码示例之基于Python的日历api调用代码实例

    本文档的主要内容详细介绍的是python代码示例之基于Python的日历api调用代码实例。
    发表于 09-06 14:25 42次下载
    python<b class='flag-5'>代码</b><b class='flag-5'>示例</b>之基于Python的日历api调用<b class='flag-5'>代码</b>实例

    ESP-NOW技术的介绍和使用方式及示例代码资料免费下载

    本文介绍了乐鑫自主研发的ESP-NOW技术,说明了使用方式并提供了示例代码包括了:1.ESP-NOW技术简介,2.ESP-NOW使用方式,3.示例
    发表于 03-15 08:00 59次下载
    ESP-NOW技术的<b class='flag-5'>介绍</b>和使用方式及<b class='flag-5'>示例</b><b class='flag-5'>代码</b>资料免费下载

    Arduino雨滴传感器的使用示例代码免费下载

    本文档的主要内容详细介绍的是Arduino雨滴传感器的使用示例代码免费下载。
    发表于 03-27 11:39 43次下载
    Arduino雨滴传感器的使用<b class='flag-5'>示例</b><b class='flag-5'>代码</b>免费下载

    机器学习的一些代码示例合集

    本文档的主要内容详细介绍的是机器学习的一些代码示例合集。
    发表于 04-29 08:00 1次下载
    机器学习的一些<b class='flag-5'>代码</b><b class='flag-5'>示例</b>合集

    AD593X代码示例

    AD593X代码示例
    发表于 03-23 08:18 14次下载
    AD593X<b class='flag-5'>代码</b><b class='flag-5'>示例</b>

    BeMicro代码示例

    BeMicro代码示例
    发表于 05-10 12:21 0次下载
    BeMicro<b class='flag-5'>代码</b><b class='flag-5'>示例</b>

    华为游戏服务示例代码教程案例

    概述 游戏服务kit安卓示例代码集成了华为游戏服务的众多API,提供了示例代码程序供您参考和使用,下面是对示例
    发表于 04-11 11:09 4次下载

    基于keil的AD7366示例代码

    基于keil的AD7366示例代码分享
    发表于 10-08 14:58 3次下载

    安全驱动示例代码和实现

    示例代码获取和集成 本示例中的驱动只实现了对内存的读写操作,并提供了测试使用的TA和CA。 读者可使用如下指令从GitHub上获取到示例代码
    的头像 发表于 10-30 16:07 587次阅读
    安全驱动<b class='flag-5'>示例</b><b class='flag-5'>代码</b>和实现

    自己编写函数示例代码很难吗?分享几个示例

    Q A 问: Arduino Uno的函数示例 我决定自己编写函数示例代码,因为这应该是Arduino中的基本示例。网络上确实有关于使用函数的文档,但是,如果要尝试使用
    的头像 发表于 11-16 16:05 475次阅读
    自己编写函数<b class='flag-5'>示例</b><b class='flag-5'>代码</b>很难吗?分享几个<b class='flag-5'>示例</b>!