Toggle navigation
首页
问答
文章
积分商城
专家
专区
更多专区...
文档中心
返回主站
搜索
提问
会员
中心
登录
注册
RT-Thread一般讨论
MQTT移植到stm32开发板——使用RT-Thread操作系统
发布于 2020-06-22 08:41:05 浏览:2830
订阅该版
[tocm] # ENV介绍 env 是 RT-Thread 推出的开发辅助工具,针对基于 RT-Thread 操作系统的项目工程,提供编译构建环境、图形化系统配置及软件包管理功能。其内置的 menuconfig 提供了简单易用的配置剪裁工具,可对内核、组件和软件包进行自由裁剪,使系统以搭积木的方式进行构建。 env 工具包含了 RT-Thread 源代码开发编译环境和软件包管理系统。 # env工具下载安装 从 RT-Thread 官网下载 env 工具。地址:[https://www.rt-thread.org/page/download.html](https://www.rt-thread.org/page/download.html)。 在电脑上装好 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 t-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) 整个工程就移植完毕。
查看更多
9
个回答
默认排序
按发布时间排序
jerry2cool
2020-06-22
这家伙很懒,什么也没写!
感谢大佬分享。。。。
zuoxuqi
2020-06-22
这家伙很懒,什么也没写!
[i=s] 本帖最后由 zuoxuqi 于 2020-6-22 10:11 编辑 [/i] 正好卡在这里了,马上试试,有疑问来反馈
zuoxuqi
2020-06-22
这家伙很懒,什么也没写!
[i=s] 本帖最后由 zuoxuqi 于 2020-6-22 11:15 编辑 [/i] 运行以后main线程直接挂了,这个是哪里引起的问题?
杰杰
2020-06-22
这家伙很懒,什么也没写!
>运行以后main线程直接挂了,这个是哪里引起的问题? --- 估计是爆栈了
zuoxuqi
2020-06-22
这家伙很懒,什么也没写!
>估计是爆栈了 --- 实现找不到原因了,能改动的地方都改动尝试了,现在又提示线程启动失败,我把我的rtconfig.h传上来,有时间帮我瞧瞧,我继续再看看,我把rt_thread的包都试了一遍,就paho mqtt可以正常运行,其他的不是爆栈,就是线程启动失败,刚入门rt_thread太不熟悉了
杰杰
2020-06-22
这家伙很懒,什么也没写!
>实现找不到原因了,能改动的地方都改动尝试了,现在又提示线程启动失败,我把我的rtconfig.h传上来,有时 ... --- 貌似没什么问题,debug一下吧~
zuoxuqi
2020-06-22
这家伙很懒,什么也没写!
>貌似没什么问题,debug一下吧~ --- 我的工程确实有问题,把其他线程禁用只保留基本的,确实可以了,看样子确实因为没经验,线程空间随意设置引起的,非常感谢提供这么优秀的软件包!
杰杰
2020-06-22
这家伙很懒,什么也没写!
>我的工程确实有问题,把其他线程禁用只保留基本的,确实可以了,看样子确实因为没经验,线程空间随意设置 ... --- 客气了~:lol,开源交流分享,共同进步
pkokoc
2020-08-12
这家伙很懒,什么也没写!
rt-thread studio 1.1.3中添加不了mqtt client,手动下载后还是不行啊!?
撰写答案
登录
注册新账号
关注者
0
被浏览
2.8k
关于作者
杰杰
这家伙很懒,什么也没写!
提问
4
回答
44
被采纳
0
关注TA
发私信
相关问题
1
有关动态模块加载的一篇论文
2
最近的调程序总结
3
晕掉了,这么久都不见layer2的踪影啊
4
继续K9ii的历程
5
[GUI相关] FreeType 2
6
[GUI相关]嵌入式系统中文输入法的设计
7
20081101 RT-Thread开发者聚会总结
8
嵌入式系统基础
9
linux2.4.19在at91rm9200 上的寄存器设置
10
[转]基于嵌入式Linux的通用触摸屏校准程序
推荐文章
1
RT-Thread应用项目汇总
2
玩转RT-Thread系列教程
3
国产MCU移植系列教程汇总,欢迎查看!
4
机器人操作系统 (ROS2) 和 RT-Thread 通信
5
五分钟玩转RT-Thread新社区
6
【技术三千问】之《玩转ART-Pi》,看这篇就够了!干货汇总
7
关于STM32H7开发板上使用SDIO接口驱动SD卡挂载文件系统的问题总结
8
STM32的“GPU”——DMA2D实例详解
9
RT-Thread隐藏的宝藏之completion
10
【ART-PI】RT-Thread 开启RTC 与 Alarm组件
最新文章
1
【24嵌入式设计大赛】基于RT-Thread星火一号的智慧家居系统
2
RT-Thread EtherKit开源以太网硬件正式发布
3
如何在master上的BSP中添加配置yml文件
4
使用百度AI助手辅助编写一个rt-thread下的ONVIF设备发现功能的功能代码
5
RT-Thread 发布 EtherKit开源以太网硬件!
热门标签
RT-Thread Studio
串口
Env
LWIP
SPI
AT
Bootloader
Hardfault
CAN总线
FinSH
ART-Pi
USB
DMA
文件系统
RT-Thread
SCons
RT-Thread Nano
线程
MQTT
STM32
RTC
FAL
rt-smart
ESP8266
I2C_IIC
WIZnet_W5500
UART
ota在线升级
PWM
cubemx
freemodbus
flash
packages_软件包
BSP
潘多拉开发板_Pandora
定时器
ADC
GD32
flashDB
socket
中断
Debug
编译报错
msh
SFUD
keil_MDK
rt_mq_消息队列_msg_queue
MicroPython
ulog
C++_cpp
本月问答贡献
踩姑娘的小蘑菇
7
个答案
3
次被采纳
a1012112796
15
个答案
2
次被采纳
张世争
9
个答案
2
次被采纳
rv666
5
个答案
2
次被采纳
用户名由3_15位
13
个答案
1
次被采纳
本月文章贡献
程序员阿伟
9
篇文章
2
次点赞
hhart
3
篇文章
4
次点赞
大龄码农
1
篇文章
5
次点赞
RTT_逍遥
1
篇文章
2
次点赞
ThinkCode
1
篇文章
1
次点赞
回到
顶部
发布
问题
分享
好友
手机
浏览
扫码手机浏览
投诉
建议
回到
底部