省资源、高稳定的MQTT客户端如何使用?

目前作者杰杰(公众号:物联网IoT开发)已经将MQTTClient制作成RT-Thread的软件包了,大家可以通过Env工具或者 RT-Thread Studio 直接使用软件包。

上期回顾:省资源、高稳定:基于Socket的跨平台MQTT客户端(1)

Env工具的使用


随着 package 系统的不断壮大,会有越来越多的软件包加入进来,所以本地看到 menuconfig 中的软件包列表可能会与服务器 不同步 。使用 pkgs --upgrade 命令即可解决该问题,这个命令不仅会对本地的包信息进行更新同步,还会对 env 的功能脚本进行升级,建议定期使用。

本次测试使用野火STM32F429挑战者开发板

1、所以用 pkgs --upgrade 命令先同步一下软件包。

2、menuconfig命令打开配置。

3、在以下路径下选中kawaii-mqtt软件包,除此之外还要打开lwip、以太网接口 或者 SAL->套接字接口。

1Location:   
2    -> RT-Thread online packages
3        -> IoT - internet of things
4            -> kawaii-mqtt

4、然后就是随意配置了。

mbedtls

默认不打开mbedtls。

salof

salof 全称是:Synchronous Asynchronous Log Output Framework(同步异步日志输出框架),它是一个异步日志输出库,在空闲时候输出对应的日志信息,并且该库与kawaii-mqtt无缝衔接。

配置对应的日志输出级别:

1#define BASE_LEVEL      (0)
2#define ASSERT_LEVEL    (BASE_LEVEL + 1)            /* 日志输出级别:断言级别(非常高优先级) */
3#define ERR_LEVEL       (ASSERT_LEVEL + 1)          /* 日志输出级别:错误级别(高优先级) */
4#define WARN_LEVEL      (ERR_LEVEL + 1)             /* 日志输出级别:警告级别(中优先级) */
5#define INFO_LEVEL      (WARN_LEVEL + 1)            /* 日志输出级别:信息级别(低优先级) */
6#define DEBUG_LEVEL     (INFO_LEVEL + 1)            /* 日志输出级别:调试级别(更低优先级) */
7
8#define         LOG_LEVEL                   WARN_LEVEL      /* 日志输出级别 */

日志其他选项:终端带颜色、时间戳、标签

mqtt

配置mqtt等待应答列表的最大值,对于qos1 qos2服务质量有要求的可以将其设置大一点,当然也必须资源跟得上,它主要是保证qos1 qos2的mqtt报文能准确到达服务器。

1#define     KAWAII_MQTT_ACK_HANDLER_NUM_MAX            64

选择MQTT协议的版本,默认为4,表示使用MQTT 3.1.1版本,而3则表示为MQTT 3.1版本。

1#define     KAWAII_MQTT_VERSION                        4           // 4 is mqtt 3.1.1

设置默认的保活时间,它主要是保证MQTT客户端与服务器的保持活性连接,单位为 秒 ,比如MQTT客户端与服务器100S没有发送数据了,有没有接收到数据,此时MQTT客户端会发送一个ping包,确认一下这个会话是否存在,如果收到服务器的应答,那么说明这个会话还是存在的,可以随时收发数据,而如果不存在了,就清除会话。

1#define     KAWAII_MQTT_KEEP_ALIVE_INTERVAL            100         // unit: second

默认的命令超时,它主要是用于socket读写超时,在MQTT初始化时可以指定:

1#define     KAWAII_MQTT_DEFAULT_CMD_TIMEOUT            4000

默认主题的长度,主题是支持通配符的,如果主题太长则会被截断:

1#define     KAWAII_MQTT_TOPIC_LEN_MAX                  64

默认的算法数据缓冲区的大小,如果要发送大量数据则修改大一些,在MQTT初始化时可以指定:

1#define     KAWAII_MQTT_DEFAULT_BUF_SIZE               1024

线程相关的配置,如线程栈,线程优先级,线程时间片等:在linux环境下可以是不需要理会这些参数的,而在RTOS平台则需要配置,如果不使用mbedtls,线程栈2048字节已足够,而使用mbedtls加密后,需要配置4096字节以上。

1#define     KAWAII_MQTT_THREAD_STACK_SIZE              2048    // 线程栈
2#define     KAWAII_MQTT_THREAD_PRIO                    5       // 线程优先级
3#define     KAWAII_MQTT_THREAD_TICK                    50      // 线程时间片

默认的重连时间间隔,当发生掉线时,会以这个时间间隔尝试重连:

1#define     KAWAII_MQTT_RECONNECT_DEFAULT_DURATION     1000

其他不需要怎么配置的东西:

1#define     KAWAII_MQTT_MAX_PACKET_ID                  (0xFFFF - 1)    // mqtt报文id
2#define     KAWAII_MQTT_MAX_CMD_TIMEOUT                20000           //最大的命令超时参数
3#define     KAWAII_MQTT_MIN_CMD_TIMEOUT                1000            //最小的命令超时参数

PS:以上参数基本不需要怎么配置的,直接用即可~

5、最后通过scons --target=mdk5命令生成mdk工程,然后编译下载到开发板后运行就行了(需要使用kawaii-mqtt测试代码),目前作者提供服务器仅供测试。

RT-Thread Studio使用

1、通过RT-Thread Setting打开lwip、以太网接口然后选择在线软件包添加到工程中,然后保存配置就可以看到工程已经添加了kawaii-mqtt软件包了。

注意:如果遇到添加软件包失败的话,很可能是因为RT-Thread Studio中的软件包还没更新或者更新失败,那么可以到软件安装目录RT-ThreadStudio\platform\env_released\env\packages\packages下手动更新软件包,然后将master重置到最新的分支就行了:

kawaii-mqtt软件包的实现

作者在公众号发表了源码解读,讲解了整个框架的实现方式,方便大家更容易理解kawaii-mqtt的代码与设计思想,让大家能够修改源码与使用,还可以提交pr或者issues,开源的世界期待各位大神的参与,感谢!除此之外以下代码的记录机制与其超时处理机制是非常好的编程思想,大家有兴趣一定要看源代码!

点击跳转>>

RT-Thread能力认证报名

现在报名即享三重福利  

1、报名即可以领取往期能力认证培训资料大礼包2、参与新能力认证考前培训 3、原价298,学生优惠价168元(点击跳转查看详情)

扫码报名

你可以添加微信17775982065为好友,注明:公司+姓名,拉进 RT-Thread 官方微信交流群!

RT-Thread


让物联网终端的开发变得简单、快速,芯片的价值得到最大化发挥。Apache2.0协议,可免费在商业产品中使用,不需要公布源码,无潜在商业风险。

长按二维码,关注我们

点击阅读原文,进入RT-Thread GitHub首页

你点的每个“在看”,我都认真当成了喜欢

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值