在RT-Thread开拓社区中,有非常多的社区开拓职员和官方开拓职员为我们封装好了一些特定外设的驱动软件包,我们可以直接下载到项目中直接进行利用。以是这一章节将讲述如何利用软件包来进行特定功能的开拓。
4.1 AHT10温湿度采集硬件先容在我们利用的潘多拉开拓板上,已经为我们集成了一款名叫AHT10的温湿度传感器。AHT10是一款高精度、贴片封装的温湿度传感器,温度丈量范围为-40~+85℃,湿度丈量范围为0~100%RH。整颗芯片采取I2C总线进行通信。
![[基于RT-Thread嵌入式物联网应用开拓]第四章:学会运用软件包_软件包_函数 智能 [基于RT-Thread嵌入式物联网应用开拓]第四章:学会运用软件包_软件包_函数 智能](http://www.iirqv.cn/zb_users/cache/ly_autoimg/m/MzY1NTc.png)
AHT10传感器在开拓板上位置如下图所示:
AHT10传感器位置图
AHT10的硬件事理图在官方给的手册中我们也可以找到,如下所示:
AHT10传感器连接事理图
如上图所示,芯片的数据口与单片机的I2C数据口相连接,紧张用于数据传输功能,单片机通过对芯片发送指令来达到掌握芯片的目的。例如读取数据等操作。这一章节我们不自行写传感器驱动,我们将利用官方为我们供应的软件驱动包来进行功能的实现。
4.2 温湿度采集软件设计4.2.1添加下载软件包此章节利用是官方为我们供应的软件包进行开拓,下面我们将讲述利用软件包的步骤。在我们创建的工程中,首先要找到RT-Thread Settings选项,此选项是RT-Thread干系的设置界面,在RT-Thread Studio中为我们供应了一整套可视化设置的界面。
1.双击打开Settings选项,来到项目设置以及软件包中央界面,打开我们常用的组件。常用的一些组件有ulog日志组件、libc组件等。如下图所示:
项目设置界面
2.在软件包中央点击立即添加按钮,搜索找到我们须要的软件包,添加到项目中并保存下载。这次的项目是利用AHT10温湿度传感器,以是我们只须要搜所到AHT10的温湿度传感器软件包保存并退出即可。如下图所示:
软件包搜索示意图
3.在搜索栏中搜索AHT10温湿度传感器,搜索出来后点击添加即可关闭界面,如下图所示:
添加AHT10传感器软件包
4.点击添加过后,我们可以关闭掉软件包搜索界面,然后在设置界面就可以看到系统为我们添加的AHT10的软件驱动包,并帮我们自动打开传感器模块。这时候我们一定要记得点击保存按钮或者按快捷键Ctrl+S进行保存,此时studio会利用网络去帮我们下载所须要的组件。如下两幅图所示:
点击保存后示意图
软件包添加示意图
5.当我们下载完软件驱动包后,我们可以在左侧的项目资源管理器中找到>Packages这个目录,此目录是存放我们下载的软件包的目录。打开此目录后我们就可以清晰的创造刚刚下载的AHT10的软件驱动包文件夹。如下图所示:
软件包存放目录
6.在存放目录中我们可以看到,软件包文件夹里为我们供应了一些干系的驱动函数和利用手册,用户在第一次利用的时候可以比拟例程和手册进行利用。关于驱动软件包的一些详细设置,我们可以在设置见面用鼠标右键点击软件包名称,此时会为用户弹出一个小型的菜单按钮,用户只须要点击自己须要查看的部分即可进行修正与查看。点击详细配置后会跳转到详细配置界面。如下两幅图所示
软件包详细设置方法图
软件包的详细设置
4.2.2利用软件包对付AHT10的软件包利用方法,我们可以查看软件包文件夹下供应的用户手册,在用户手册中作者详细的先容了软件包的利用方法,也供应了大略的示例代码。这对付新手用户来说无疑不是一个非常好的福利,进一步的简化了用户的开拓流程,提升效率。
在AHT10软件包用户手册中,分为了老版本的手册和新版本的手册,在老版本手册中是利用软件包的API函数进行温湿度的读取,在新版本的手册中是将传感器注册到了RT-Thread中Sensor设备框架中,在调用Sensor框架中的API函数对传感器进行掌握,例如写入掌握参数、读取传感器的设备数据等。此章节将讲述利用老版用户手册中的API函数进行数据的读取。调用API函数的办法刀切斧砍,但是短缺了对传感器的掌握部分,对付大略的数据读取操作这种办法已经完备足够了。在进行代码编写之前我们须要对代码构造进行简要的设计,我们须要创建一个aht10温湿度读取的线程,用户管理,在线程入口函数中调用aht10软件包的API函数进行温湿度的读取,并在掌握台中进行打印查看数据的完全与精确性。对付上述总体的实现步骤流程图如下图所示:
总体实现步骤流程示意图
4.2.3详细代码实现根据上一小节剖析的情形,我们将根据上述的总体流程图来进行功能的实现,详细步骤如下所示:
1. 对I2C总线端口进行配置:
打开左侧项目资源管理器,找到>drivers文件目录,打开里面的board.h文件,在文件大概75行开始有讲述关于I2C总线的配置先容,里面有官方供应的配置方法,从第一步开始要干嘛,到末了的宏定义都有详细先容,其他的配置也可以参考官方供应的注释文档来进行配置。在此项目中,我们在开拓板IO分配引脚表中可以找到关于AHT10的引脚接口信息,接入AHT10的SDA引脚为单片机的PC1口,接入AHT10的SCL引脚为单片机的PD6口。根据官方给出的注释文档,第一步该当在设置目录打开RT-Thread对I2C总线的支持;第二步定义一个宏定义表示I2C总线的利用句柄;第三步是定义I2C总线的SDA和SCL引脚。总体配置注释流程如下图所示:
I2C引脚配置流程注释
这里利用的是I2C2的宏定义,总体的配置代码如下所示:
#define BSP_USING_I2C2#ifdef BSP_USING_I2C2#define BSP_I2C2_SCL_PIN GET_PIN(D, 6)#define BSP_I2C2_SDA_PIN GET_PIN(C, 1)#endif
在此我们完成了I2C总线的宏定义以及端口的配置,还有第一步打开RT-Thread对I2C总线的支持没有做。打开Settings界面,在配置界面的右下角有一个软件仿照I2C的图标我们鼠标左键单击即可打开对I2C总线的支持。打开后图标会高亮,末了按保存按钮保存即可。如图所示。
I2C支持打开
2. 编写驱动初始化函数:
在AHT10软件包中我们可以看到,已经为我们供应了初始化的API函数:aht10_device_t aht10_init(const char i2c_bus_name),须要传入的参数为I2C的总线名称,API函数会根据总线的名称自动初始化对应的AHT10设备。详细的返回解释如下表所示:
初始化函数参数详情表
参数
描述
name
I2C设备名称
返回
描述
!=NULL
将返回AHT10设备工具
=NULL
查找失落败
在我们的工程中定义一个初始化函数,调用aht10_device_t aht10_init(const char i2c_bus_name)函数进行设备初始化,在初始化函数中进行设备查找结果的判断,将判断结果作为日志输出,这样方便调试,详细代码如下所示:
int my_rt_hw_aht10_init(void){//aht10Device aht10设备句柄须要提前定义 aht10Device = aht10_init(AHT10_I2C_BUS); if (aht10Device == NULL) { rt_kprintf("not find :%S", AHT10_I2C_BUS); return RT_ERROR; } rt_kprintf("my_rt_hw_aht10_init ok\n"); return RT_EOK;}INIT_ENV_EXPORT(my_rt_hw_aht10_init); //调用系统初始化函数帮我们自动调用此初始化函数
3. 编写温湿度读取功能函数
在对AHT10设备完成了初始化后,我们即可调用温湿度读取API函数,这里我们也定义两个功能函数,在功能函数中调用API读取,这样的好处在于我们可以在其他的模块中进行调用,不用重复的调用AHT10的温湿度API读取函数。详细的代码如下所示:
float my_aht10_read_temperature(void){ float temperature = aht10_read_temperature(aht10Device); return temperature;}float my_aht10_read_humidity(void){ float humidity = aht10_read_humidity(aht10Device); return humidity;}
在此清单中,我们利用了AHT10软件包供应的两个API接口,分别为aht10_read_temperature(aht10_device_t dev)和aht10_read_humidity(aht10_device_t dev),须要传入的参数都是我们初始化成功创建的AHT10设备句柄,返回值分别为float类型的温度数据和湿度数据,我们只须要用两个参数进行吸收即可。
4. 创建AHT10功能线程和入口函数
在线程入口函数中,我们只须要调用上面编写好的温湿度读取功能函数,然后在掌握台进行数据的打印,调用休眠函数让出CPU的利用权限即可。详细代码如下所示:
void aht10_thread_entry(void parmas){ float temp; float humi; while (1) { temp = my_aht10_read_temperature(); humi = my_aht10_read_humidity(); printf("temp is %f \r\n", temp); printf("humi is %f \r\n", humi); rt_thread_mdelay(1000); }}int aht10_thread(void){ aht10Thread = rt_thread_create("aht10Thread", aht10_thread_entry, RT_NULL, 1024, 10, 10); rt_thread_startup(aht10Thread);}
把稳:我们在利用printf()函数进行数据打印时须要开启RT-Thread中的libc功能,不开启的话不支持此方法的调用。
5. 导出命令到掌握台:
上面我们已经完成了所有的主体功能,末了调用MSH_CMD_EXPORT API将线程主函数导出到命令掌握台,这样方便我们在终端进行功能调用实行。总体的所有代码如下清单所示:
#include "sensor_asair_aht10.h"#define AHT10_I2C_BUS "i2c2"static rt_thread_t aht10Thread;static aht10_device_t aht10Device;int my_rt_hw_aht10_init(void){ aht10Device = aht10_init(AHT10_I2C_BUS); if (aht10Device == NULL) { rt_kprintf("not find :%S", AHT10_I2C_BUS); return RT_ERROR; } rt_kprintf("my_rt_hw_aht10_init ok\n"); return RT_EOK;}INIT_ENV_EXPORT(my_rt_hw_aht10_init);float my_aht10_read_temperature(void){ float temperature = aht10_read_temperature(aht10Device); return temperature;}float my_aht10_read_humidity(void){ float humidity = aht10_read_humidity(aht10Device); return humidity;}void aht10_thread_entry(void parmas){ float temp; float humi; while (1) { temp = my_aht10_read_temperature(); humi = my_aht10_read_humidity(); printf("temp is %f \r\n", temp); printf("humi is %f \r\n", humi); rt_thread_mdelay(1000); }}int aht10_thread(void){ aht10Thread = rt_thread_create("aht10Thread", aht10_thread_entry, RT_NULL, 1024, 10, 10); rt_thread_startup(aht10Thread);}MSH_CMD_EXPORT(aht10_thread, aht10_thread);4.2.4编译下载
在所有事情完成之后我们就可以进行编译下载了,编译结果没有缺点的情形下,下载至开拓板中查看实验结果。在我们下载至开拓板后,我们可以看到一些日志信息,比如AHT10设备的初始化结果信息,掌握台中会打印出my_rt_hw_aht10_init ok 这样的话语。在掌握台中我们实行aht10_thread的命令,此时在掌握台中我们将看到以1秒钟读取一次的频率读取到的温湿度数据。
温湿度读取数据图
在开拓板的AHT10传感器位置,我们可以向传感器进行吹气,这是会创造温湿度数据开始发生了变革,且能够实时的读取到数据并打印,如下图所示:
数据变革结果图
由上两种情形的测试我们可以创造,利用软件包温湿度读取的功能已经完成,并且能够达到我们自己的预期效果。
4.3 其他相似软件包利用本章节只是对AHT10温湿度传感器软件包的利用做了一个讲解,在我们的开拓板上,还集成了非常多其他的传感器,例如AP3216C靠近与光强传感器、ICM20608六轴传感器等。这些传感器在Studio中都有已经封装好了的软件包,我们直接可以下载下来利用。利用方法也跟AHT10的软件包类似。
4.4 本章小结本章紧张讲述了如何利用RT-Thread官方供应的软件驱动包进行特定功能的开拓。在4.1小节中对AHT10传感器做了简要的先容。在4.2小节中讲述了如何在Studio中进行软件包的下载以及干系的一些配置。在4.2.3中讲述了如何利用代码进行功能的实现。在4.2.4中对功能进行测试并能够达到预期效果。
通过本章的学习,用户将会学会如何简要的利用软件包进行功能的开拓。极大的提升开拓效率。








