ATK-MB016 模块使用说明
这里以正点原子M48Z-M3最小系统板STM32F103版为例,给大家介绍一下模块和板卡的连接方法。其它板卡与模块的硬件连接方法,请大家在“ATK-MB016 温湿度传感器模块\3,程序源码\相应板卡例程文件夹\readme.txt”路径下查看。
ATK-MB016温湿度传感器模块可通过杜邦线与正点原子M48Z-M3最小系统板STM32F103版进行连接,具体的连接关系,如下表所示:

表1.1温湿度传感器模块与M48Z-M3最小系统板STM32F103版连接关系
在本实验中,串口会打印ATK-MB016温湿度传感器模块检测到的环境温度值和湿度值。需要查看这部分实验信息的用户,可用杜邦线将最小系统板STM32F103的PA9引脚和GND连接至外部的USB转串口设备,这样就可以通过XCOM上位机查看串口打印的信息了。
开发板的LED0闪烁,提示程序运行。
打开本实验的工程文件夹,能够在./Drivers/BSP目录下看到ATK_AHT20文件夹和IIC文件夹,其中ATK_AHT20文件夹中包含了ATK-MB016温湿度传感器模块的驱动文件,IIC文件夹中包含了IIC的驱动文件,如下图所示:

图2.1.2.1 ATK-MB016温湿度传感器模块驱动代码

图2.1.2.2 IIC驱动代码
下面简要介绍atk_aht20.c中两个重要的API函数。
1. 函数atk_aht20_init()
该函数用于初始化ATK-MB016温湿度传感器模块,具体代码如下所示:
/**
* @brief 初始化AHT20传感器
* @param 无
* @retval 初始化结果,0:成功,1:失败
*/
uint8_t atk_aht20_init(void)
{
uint8_t command[2] = {0x08, 0x00};
iic_init(); /* 初始化IIC接口 */
delay_ms(40); /* 延时40ms,等硬件稳定 */
atk_aht20_write_nbytes(INIT, command, 2); /* 发送初始化指令 */
delay_ms(500); /* 延时500ms,等硬件稳定 */
return atk_aht20_check(); /* 检测AHT20的状态 */
}
atk_aht20_init()函数并不复杂,在该函数中,先初始化IIC接口,然后延时40ms,等待硬件稳定,接着发送初始化AHT20的指令并延时500ms,最后检测AHT20的状态,如果状态正常则返回0,异常则返回1。
2. 函数atk_aht20_read_data()
该函数用于获取温度值和湿度值,具体代码如下所示:
/**
* @brief 读取AHT20的温度和湿度数据
* @param *temp: 温度值指针
* @param *humi: 湿度值指针
* @retval 无
*/
void atk_aht20_read_data(float *temp, float *humi)
{
uint32_t humi_data = 0, temp_data = 0;
uint8_t raw_data[10];
uint8_t command[2] = {0x33, 0x00};
atk_aht20_write_nbytes(START_TEST, command, 2); /* 发送测量指令 */
delay_ms(80); /* 等待80ms */
atk_aht20_read_nbytes(raw_data, 7); /* 获取原始数据 */
if((raw_data[0] & 0x80) == 0x00)
{
humi_data = 0; /* 变量清零 */
/* 取出第一个字节湿度数据,即[19:12]位 */
humi_data = (humi_data | raw_data[1]) << 8;
/* 取出第二个字节湿度数据,即[11:4]位 */
humi_data = (humi_data | raw_data[2]) << 8;
/* 取出第三个字节湿度数据,即[3:0]位 */
humi_data = (humi_data | raw_data[3]);
/* 湿度有效数据共有20位,第三个字节数据只有高4位有效,
因此需要右移4位,才能得到有效数据 */
humi_data = humi_data >> 4;
*humi = (float)humi_data * 100 /1024 /1024; /* 计算湿度值 */
temp_data = 0; /* 变量清零 */
/* 取出第一个字节温度数据,即[19:16]位 */
temp_data = (temp_data | raw_data[3]) << 8;
/* 取出第二个字节温度数据,即[15:8]位 */
temp_data = (temp_data | raw_data[4]) << 8;
/* 取出第三个字节温度数据,即[7:0]位 */
temp_data = (temp_data | raw_data[5]);
/* 温度有效数据共有20位,第一个字节数据只有低4位有效,
因此需要右移4位,才能得到有效数据 */
temp_data = temp_data & 0xfffff;
*temp = (float)temp_data * 200 / 1024 /1024 - 50; /* 计算温度值 */
}
}
上述函数用于获取AHT20检测到的环境温度值和湿度值,在该函数中,先向AHT20发送测试指令,然后延时80ms,开始读取原始数据,存放到raw_data数组中,最后根据AHT20的通信协议时序与命令格式解析出温度值和湿度值,并存入对应的变量地址中。
注意:AHT20的通信协议时序与命令格式详见“ATK-MB016 温湿度传感器模块\ 4,参考资料\ AHT20说明书.pdf”第5.1章节。
在图2.1.2.2中,myiic.c和myiic.h为IIC驱动文件,里面实现了IIC引脚的初始化、IIC协议相关的系列函数。关于IIC的驱动介绍,请查看正点原子各个开发板对应的开发指南中IIC章节。
实验的测试代码在demo.c文件中,该文件在工程根目录下的 User文件夹。测试代码的入口函数为demo_run(),具体的代码,如下所示:
/**
* @brief 例程演示入口函数
* @param 无
* @retval 无
*/
void demo_run(void)
{
float temperature;
float humidity;
while(atk_aht20_init())
{
printf("ATH20传感器初始化失败\r\n");
delay_ms(1000);
}
while (1)
{
atk_aht20_read_data(&temperature, &humidity); /* 读取ATH20传感器数据 */
printf("温度: %.2f℃\r\n", temperature); /* 计算得到湿度值 */
printf("湿度: %.2f%%\r\n", humidity); /* 计算得到温度值 */
printf("\r\n");
delay_ms(1000);
}
}
从上面代码可以看出,整个测试代码的逻辑相对简单。初始化温湿度传感器模块后,在while循环中调用相关函数获取温湿度值,并通过串口打印,LED0闪烁表示程序正常运行。
将ATK-MB016温湿度传感器模块按照第一节“硬件连接”中介绍的连接方式与开发板连接,并将实验代码编译烧录至开发板中。本实验使用串口输出调试信息,因此需将开发板的PA9连接至DAP虚拟串口(或USB转TTL模块)的RX引脚。完成连接后,可通过串口调试助手XCOM查看实验信息输出,如下图所示:

图2.1.3.1串口调试助手显示内容
注:其它现象请看2.1.1功能说明。
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/70040860/viewspace-3079379/ ,如需转载,请注明出处,否则将追究法律责任。