MQTT移植到stm32开发板——使用RT-Thread操作系统
发布于 2020-06-22 08:41:05
[md]# ENV介绍
env 是 RT-Thread 推出的开发辅助工具,针对基于 RT-Thread 操作系统的项目工程,提供编译构建环境、图形化系统配置及软件包管理功能。其内置的 menuconfig 提供了简单易用的配置剪裁工具,可对内核、组件和软件包进行自由裁剪,使系统以搭积木的方式进行构建。
env 工具包含了 RT-Thread 源代码开发编译环境和软件包管理系统。
# env工具下载安装
从 RT-Thread 官网下载 env 工具。地址:[]()。
在电脑上装好 git,git 的下载地址为 [https://git-scm.com/downloads](https://git-scm.com/downloads) ,根据向导正确安装 git,并将 git添加到系统环境变量。软件包管理功能需要 git 的支持。
注意在工作环境中,所有的路径都不可以有中文字符或者空格。
# 通过env移植MQTT客户端
## 打开 env 控制台
RT-Thread 软件包环境主要以命令行控制台为主,同时以字符型界面来进行辅助,使得尽量减少修改配置文件的方式即可搭建好 RT-Thread 开发环境的方式。
打开env控制台有两种方式:
- 方法一:点击 env 目录下可执行文件进入 env 目录,可以运行本目录下的 env.exe ,如果打开失败可以尝试使用 env.bat 。
- 方法二:在文件夹中通过右键菜单打开 env 控制台env ,可以根据下图的步骤操作,就可以在任意文件夹下通过右键菜单来启动 env 控制台:
![Add_Env_To_Right-click_Menu](http://qiniu.jiejie01.top/Add_Env_To_Right-click_Menu.png)
## 打开env并更新软件包列表
scons 是 RT-Thread 使用的编译构建工具,可以使用 scons 相关命令来编译 RT-Thread 。
- 第一步:下载rt-thread的源码,可以在github或者gitee下载:
- github
```bash
git clone https://github.com/RT-Thread/rt-thread.git
```
- gitee
```bash
git clone https://gitee.com/RT-Thread/rt-thread.git
```
- 第二步:切换到 bsp 根目录:打开控制台后,可以在命令行模式下使用 cd 命令切换到你想要配置的 bsp 根目录中。例如工程目录为 **H:\jiejieTop\rt-thread\bsp\stm32\stm32f429-fire-challenger**,或者直接到这个目录下右键打开env:
![mqtt-rtt-001](http://qiniu.jiejie01.top/mqtt-rtt-001.png)
- 第二步:更新软件包列表,随着 package 系统的不断壮大,会有越来越多的软件包加入进来,所以本地看到 menuconfig 中的软件包列表可能会与服务器 不同步 。在env环境中使用 pkgs --upgrade 命令即可解决该问题,这个命令不仅会对本地的包信息进行更新同步,还会对 env 的功能脚本进行升级,建议定期使用,或者在 **env\packages\packages** 目录下手动更新,然后切换最新分支即可。
![mqtt-rtt-002](http://qiniu.jiejie01.top/mqtt-rtt-002.png)
![mqtt-rtt-003](http://qiniu.jiejie01.top/mqtt-rtt-003.png)
## 移植MQTT客户端
- 第一步:在env环境中运行 menuconfig 命令进入可视化配置界面,在**Hardware Drivers Config → Onboard Peripheral Drivers**路径下使能以太网驱动:
![mqtt-rtt-004](http://qiniu.jiejie01.top/mqtt-rtt-004.png)
- 第二步:在**RT-Thread Components → Network → Network interface device**路径下使能使能网络接口:
![mqtt-rtt-005](http://qiniu.jiejie01.top/mqtt-rtt-005.png)
- 第三步:在**RT-Thread online packages → IoT - internet of things**路径下选择**kawaii-mqtt**软件包:
![mqtt-rtt-006](http://qiniu.jiejie01.top/mqtt-rtt-006.png)
- 第四步:按下回车,进入**kawaii-mqtt**软件包的配置页面,可以随意配置信息,我们勾选 **enable test** 即可,这一步操作会将测试代码添加到工程中:
![mqtt-rtt-007](http://qiniu.jiejie01.top/mqtt-rtt-007.png)
- 第五步:在退出的时候会进行下载软件包,将kawaii-mqtt软件包下载到本地,并且将其添加到工程中,然后你可以通过**scons --target=mdk5**命令生成keil工程,当然也可以不用。
![mqtt-rtt-008](http://qiniu.jiejie01.top/mqtt-rtt-008.png)
- 第六步:打开keil工程,因为我们勾选了 **enable test** ,此时工程中存在测试代码,我们需要间本身的main.c文件的例程注释掉,然后再进行编译,没有问题。
![mqtt-rtt-009](http://qiniu.jiejie01.top/mqtt-rtt-009.png)
- 第七步:下载到开发板上,观察现象,完全根据代码运行。
# 编写自己的代码:
MQTT提供在线配置工具,可以使用工具生成相应的代码:[https://jiejietop.gitee.io/mqtt/index.html](https://jiejietop.gitee.io/mqtt/index.html)
![在线代码生成工具](http://qiniu.jiejie01.top/mqtt-tool.png)
与此同时该工具页面还包含了mqttclient的API接口介绍及示例,通过它们就能知道这个工具应该配置了什么内容。
![mqtt-tool-api](http://qiniu.jiejie01.top/mqtt-tool-api.png)
## 连接参数配置
首先连接参数代表着MQTT客户端应该如何连接到服务器,建立MQTT会话应该是如何配置,这些就是连接参数
- 与服务器相关的参数有:
- 服务器地址。
- 服务器端口号。
- 服务器CA证书(如果有TLS加密的话)。
- 建立MQTT连接需要的参数有:
- MQTT协议版本。
- 用户名。
- 密码。
- 客户端ID。
- 配置是否清除会话,默认清除会话。
- 心跳时间间隔,默认是50秒。
- 是否使用遗嘱。
- 是否保留遗嘱消息。
- 设置遗嘱主题。
- 设置遗嘱消息的服务质量等级。
- 设置遗嘱消息的内容。
- 与与客户端资源相关的配置:
- 设置命令的超时,它主要是用于socket读写超时,默认是5000毫秒。
- 读缓冲区大小,默认是1024。
- 写缓冲区大小,默认是1024。
![mqtt-tool-connect](http://qiniu.jiejie01.top/mqtt-tool-connect.png)
## 订阅主题相关的代码配置
此配置用于配置MQTT客户端订阅的主题信息,指定订阅主题名字,服务质量等级以及当收到来自这个主题消息时候的回调处理函数(可以为NULL),mqttclient代码生成工具支持动态添加多个主题,满足绝大部分的日常需求。
![mqtt-tool-sub](http://qiniu.jiejie01.top/mqtt-tool-sub.png)
## 发布消息相关的代码配置
mqttclient代码生成工具支持动态添向多个主题发布消息,满足绝大部分的日常需求。只需指定要发布消息的主题名字、服务质量等级、以及发布的消息内容即可。
![mqtt-tool-pub](http://qiniu.jiejie01.top/mqtt-tool-pub.png)
## 生成代码
在配置完成后,点击下方的生成代码按钮,即可生成对应的配置代码。当然,你也可以点击导入模板,使用模板默认的配置来生成代码。
![mqtt-tool-code](http://qiniu.jiejie01.top/mqtt-tool-code.png)
直接将生成的代码复制到你的main.c文件即可编译运行。
## 导出独立的MQTT客户端工程
在env中,可以通过**scons --dist**命令来导出工程代码,形成一个独立的demo,因为处于rt-thread工程中,整个代码实在是太庞大了,我们只需要导出我们用到的代码即可:
![mqtt-rtt-010](http://qiniu.jiejie01.top/mqtt-rtt-010.png)
![mqtt-rtt-011](http://qiniu.jiejie01.top/mqtt-rtt-011.png)
整个工程就移植完毕。[/md]