Toggle navigation
首页
问答
文章
积分商城
专家
专区
更多专区...
文档中心
返回主站
搜索
提问
会员
中心
登录
注册
2024-RSOC
【2024-RSOC】Day-5 RT-Thread软件包和组件
发布于 2024-08-04 14:47:23 浏览:161
订阅该版
[tocm] ## 1.软件包的优势 星火一号的板载了AHT10,如果我们没用软件包的形式想去读取温湿度的话,那么我们是不是得自己去查找AHT10的手册,自己用IIC去读取相对于的寄存器,但是如果有了软件包之后我们就可以用别人提取写好的API去读取温湿度,这样下来大大提高了开发的效率。 那么我们该如何去查找对应的软件包呢? 可以现在官网上查看是否又对应的软件包:软件包官网 ## 定义与特性 RT-Thread软件包是运行于RT-Thread物联网操作系统平台上的通用软件组件,由描述信息、源代码或库文件组成。这些软件包面向不同应用领域,为开发者提供了众多可重用的选择,极大地促进了RT-Thread生态的繁荣。RT-Thread提供了开放的软件包平台,存放了官方及开发者提供的软件包。这些软件包具有很强的可重用性和模块化程度,方便应用开发者在最短时间内打造出所需的软件。 ## 分类与功能 RT-Thread软件包涵盖了多个领域,包括但不限于: 物联网相关:包括Paho MQTT、WebClient、mongoose等,用于实现物联网设备的通信和数据交换。 安全相关:如mbedtls、libsodium等,提供加密通信和数据安全保护。 脚本语言相关:如JerryScript、MicroPython等,允许在嵌入式设备上运行高级脚本语言。 多媒体相关:如Openmv、mupdf等,提供机器视觉和文档解析等功能。 工具类:如CmBacktrace、EasyFlash等,辅助开发和调试过程。 组件 ## 定义与特性 RT-Thread组件是构成RT-Thread操作系统的基础单元,它们提供了各种系统服务和功能。这些组件包括但不限于文件系统、网络协议栈、图形库等中间件组件,以及实时内核本身。RT-Thread组件的设计考虑了模块化、可裁剪和可扩展性,以适应不同应用场景和资源受限的嵌入式设备。 ## 主要组件示例 实时内核:RT-Thread的核心组件,提供了多任务调度、线程管理、同步机制等实时操作系统的基础功能。 FinSH:RT-Thread的命令行组件,提供了一套供用户在命令行调用的操作接口,主要用于调试或查看系统信息。 虚拟文件系统(DFS):为应用程序提供统一的POSIX文件和目录操作接口,支持多种类型的文件系统和存储设备。 网络接口设备(netdev):用于网卡管理和控制,使得RT-Thread系统能够适配更多种类的网卡并实现网络通信。 ## 2.文件系统 在今天的培训中,我们还学习了 RT-Thread 的文件系统。文件系统是操作系统中用于管理存储设备的关键部分。在 RT-Thread 中,支持多种文件系统格式,如 FATFS、ELM FAT、YAFFS 等。我们通过实际操作,了解了如何在 RT-Thread 中挂载和管理文件系统。 特别是在嵌入式系统中,文件系统的选择和管理非常重要,因为不同的文件系统有不同的性能和可靠性特点。通过今天的学习,我对如何选择合适的文件系统以及如何在 RT-Thread 中进行文件操作有了更深入的理解。 ## 3.MQTT 协议 MQTT 是一种轻量级的消息传输协议,特别适用于物联网(IoT)设备。今天的课程重点讲解了如何在 RT-Thread 上实现 MQTT 协议,并通过实际案例展示了如何使用 MQTT 协议将温湿度传感器的数据上传到阿里云。 ## 4.温度信号上阿里云 1.温湿度传感器采集数据,通过消息队列发送数据 ```c // 读取温度值 Temp = aht10_read_temperature(Dev); // 输出温度值 //rt_kprintf("Temp: %d.%d\n", (int)Temp, (int)(Temp * 10) % 10); // 发送温度数据到消息队列 rt_mq_send(&temp_mq, &Temp, sizeof(Temp)); ``` 2.MQTT接收到发送的数据,发布到阿里云 ```c // 从消息队列中接收温度数据 if (rt_mq_recv(&temp_mq, &temperature, sizeof(temperature), RT_WAITING_FOREVER) >0) { // 发布温度数据到阿里云 example_publish(pclient, temperature); } ``` 3.示例 ```c #include
#include "rtthread.h" #include "dev_sign_api.h" #include "mqtt_api.h" #include "aht10.h" #include
#include
char DEMO_PRODUCT_KEY[IOTX_PRODUCT_KEY_LEN + 1] = {0}; char DEMO_DEVICE_NAME[IOTX_DEVICE_NAME_LEN + 1] = {0}; char DEMO_DEVICE_SECRET[IOTX_DEVICE_SECRET_LEN + 1] = {0}; int count =1; char String[100]; void *HAL_Malloc(uint32_t size); void HAL_Free(void *ptr); void HAL_Printf(const char *fmt, ...); int HAL_GetProductKey(char product_key[IOTX_PRODUCT_KEY_LEN + 1]); int HAL_GetDeviceName(char device_name[IOTX_DEVICE_NAME_LEN + 1]); int HAL_GetDeviceSecret(char device_secret[IOTX_DEVICE_SECRET_LEN]); uint64_t HAL_UptimeMs(void); int HAL_Snprintf(char *str, const int len, const char *fmt, ...); #define EXAMPLE_TRACE(fmt, ...) \ do { \ HAL_Printf("%s|%03d :: ", __func__, __LINE__); \ HAL_Printf(fmt, ##__VA_ARGS__); \ HAL_Printf("%s", "\r\n"); \ } while(0) struct AHT20 { float humidity; float temperature; }aht20; aht10_device_t aht20_init(const char *i2c_bus_name) { aht10_device_t dev ; int count=0; rt_thread_mdelay(1000); dev = aht10_init(i2c_bus_name); if (dev == RT_NULL) { rt_kprintf("aht10 init failed\n"); return; } return dev; } static void example_message_arrive(void *pcontext, void *pclient, iotx_mqtt_event_msg_pt msg) { iotx_mqtt_topic_info_t *topic_info = (iotx_mqtt_topic_info_pt) msg->msg; switch (msg->event_type) { case IOTX_MQTT_EVENT_PUBLISH_RECEIVED: /* print topic name and topic message */ EXAMPLE_TRACE("Message Arrived:"); EXAMPLE_TRACE("Topic : %.*s", topic_info->topic_len, topic_info->ptopic); EXAMPLE_TRACE("Payload: %.*s", topic_info->payload_len, topic_info->payload); EXAMPLE_TRACE("\n"); break; default: break; } } static int example_subscribe(void *handle) { int res = 0; const char *fmt = "/%s/%s/user/get"; char *topic = NULL; int topic_len = 0; topic_len = strlen(fmt) + strlen(DEMO_PRODUCT_KEY) + strlen(DEMO_DEVICE_NAME) + 1; topic = HAL_Malloc(topic_len); if (topic == NULL) { EXAMPLE_TRACE("memory not enough"); return -1; } memset(topic, 0, topic_len); HAL_Snprintf(topic, topic_len, fmt, DEMO_PRODUCT_KEY, DEMO_DEVICE_NAME); res = IOT_MQTT_Subscribe(handle, topic, IOTX_MQTT_QOS0, example_message_arrive, NULL); if (res < 0) { EXAMPLE_TRACE("subscribe failed"); HAL_Free(topic); return -1; } HAL_Free(topic); return 0; } ``` ## 组件 文件系统:类似于LInux的文件系统 定义:指的是一个可以独立开发、测试、部署和维护的软件单元 特点: FatFs FatFS 是专为小型嵌入式设备开发的一个兼容微软 FAT 格式的文件系统,采用ANSI C编写,具有良好的硬件无关性以及可移植性,是 RT-Thread 中最常用的文件系统类型。
0
条评论
默认排序
按发布时间排序
登录
注册新账号
关于作者
CGTV_7547
这家伙很懒,什么也没写!
文章
5
回答
0
被采纳
0
关注TA
发私信
相关文章
推荐文章
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组件
热门标签
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
at_device
ulog
C++_cpp
本月问答贡献
踩姑娘的小蘑菇
7
个答案
3
次被采纳
a1012112796
13
个答案
2
次被采纳
张世争
9
个答案
2
次被采纳
rv666
5
个答案
2
次被采纳
用户名由3_15位
11
个答案
1
次被采纳
本月文章贡献
程序员阿伟
7
篇文章
2
次点赞
hhart
3
篇文章
4
次点赞
大龄码农
1
篇文章
3
次点赞
ThinkCode
1
篇文章
1
次点赞
Betrayer
1
篇文章
1
次点赞
回到
顶部
发布
问题
投诉
建议
回到
底部