波特律动
课程中心/STM32基础教程/【I²C总线】AHT20温湿度传感器

【I²C总线】AHT20温湿度传感器

下载例程代码: 

注意

CubeIDE:请按照 例程使用方法🔗 导入例程,否则下载的可能不是例程而是其他工程。

Keil:请使用 ArmCC V6 编译,否则可能会出现编译错误。点击此处查看切换编译器方法🔗

AHT20温湿度传感器(I2C_AHT20)

通过I²C读取AHT20温湿度计

板载AHT20传感器规格:(详细可参考资料包中的手册)

参数

芯片型号

广州奥松 AHT20

I²C地址

0x70

温度范围

-40 ~ 85 ℃

温度误差

± 0.3 ℃

温度分辨率

0.01 ℃

湿度范围

0 ~ 100 %RH

湿度误差

± 2 %RH

湿度分辨率

0.024 %RH

学习板上的AHT20传感器:

如何使用例程

  • 编译并下载程序到学习板
  • 使用配套TYPE-C数据线,将学习板连接到计算机
  • 在oled屏幕上,就可以看到温湿度信息

例程讲解

下面介绍了如何自己实现该例程的功能

1、工程配置

  • 打开I²C外设:Pinout&Configuration -> Connectivity -> I2C1,将I2C模式选择为I2C
  • 打开串口2外设:Pinout&Configuration -> Connectivity -> USART2,将Mode选择为Asynchronous
  • 配置工程:在Project Manager -> Code Generator页面中,勾选Generate peripheral initialization as ... per peripheral
  • 启用小数打印:在cubeIDE菜单栏中,Project Properties -> C/C++ Build -> Settings -> Tool Settings -> MCU Settings,勾选Use float with printf ... -nano
信息

默认情况下,sprintf 函数不能打印小数。因此我们需要配置一下编译器,使其能够打印小数

2、代码

(1) 初始化过程

  • 拷贝库文件:将 aht20.c oled.c font.c 文件拷贝到 Core -> Src 目录下,将 aht20.h oled.h font.h 文件拷贝到 Core -> Inc 目录下。
  • 在main.c中添加include:aht20.h oled.h
信息

需要将 温湿度℃ 取字模存入 font.c,小伙伴们也可以复制本例程的 font.c 直接用

需要将 温湿度℃ 取字模存入 font.c,小伙伴们也可以复制本例程的 font.c 直接用

  • 引用头文件:需要使用 sprintf 打印输出,在 main.c 引用头文件:
C语言
1#include "stdio.h"
2#include "string.h"
  • 初始化AHT20
C语言
1// 初始化AHT20
2AHT20_Init();
3// 初始化OLED
4HAL_Delay(20); // 单片机启动比OLED上电快,需要延迟等待一下
5OLED_Init(); // 初始化OLED
  • 定义所需变量
C语言
1float temperature, humidity; // 接收温度和湿度变量
2char message_uart[50]; // 串口发送的字符串
3char message_temp[30]; // oled显示温度字符串
4char message_hum[30]; // oled显示湿度字符串

(2) 读取数据

C语言
1// 读取温湿度
2AHT20_Read(&temperature, &humidity);
3// 打印温湿度
4sprintf(message_uart, "温度: %.1f ℃, 湿度: %.1f %%\r\n", temperature, humidity);
5sprintf(message_temp, "温度: %.1f ℃", temperature);
6sprintf(message_hum, "湿度: %.1f %%", humidity);
7// 串口发送
8HAL_UART_Transmit(&huart2, (uint8_t *)message_uart, strlen(message_uart), HAL_MAX_DELAY);
9// oled显示
10OLED_NewFrame();
11OLED_PrintString(0, 16, message_temp, &font16x16, OLED_COLOR_NORMAL);
12OLED_PrintString(0, 32, message_hum, &font16x16, OLED_COLOR_NORMAL);
13OLED_ShowFrame();
14// 延时 1 秒
15HAL_Delay(1000);
信息

建议读取间隔大于500毫秒

AHT20与DHT20、DHT11的区别

三种型号都是广州奥松的温湿度传感器,它们的主要区别如下

对比项目

AHT20

DHT20

DHT11

通用

与 DHT20 通用

与 AHT20 通用

不通用

体积

微型贴片

插针

插针

精度

最高

低于 AHT20

最低

定位

是 DHT11 的升级

老产品

通信

标准 I²C

标准 I²C

单总线

DHT20 内部结构: