跳到主要内容

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

下载例程代码下载代码(CubeIDE) 下载代码(keil)

注意

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

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数据线,将学习板连接到计算机

连接usb线
  • 在oled屏幕上,就可以看到温湿度信息
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中添加includeaht20.h oled.h

提示

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

  • 引用头文件:需要使用 sprintf 打印输出,在 main.c 引用头文件:

    #include "stdio.h"
    #include "string.h"
  • 初始化AHT20

    // 初始化AHT20
    AHT20_Init();
    // 初始化OLED
    HAL_Delay(20); // 单片机启动比OLED上电快,需要延迟等待一下
    OLED_Init(); // 初始化OLED
  • 定义所需变量

    float temperature, humidity; // 接收温度和湿度变量
    char message_uart[50]; // 串口发送的字符串
    char message_temp[30]; // oled显示温度字符串
    char message_hum[30]; // oled显示湿度字符串

(2) 读取数据

// 读取温湿度
AHT20_Read(&temperature, &humidity);
// 打印温湿度
sprintf(message_uart, "温度: %.1f ℃, 湿度: %.1f %%\r\n", temperature, humidity);
sprintf(message_temp, "温度: %.1f ℃", temperature);
sprintf(message_hum, "湿度: %.1f %%", humidity);
// 串口发送
HAL_UART_Transmit(&huart2, (uint8_t *)message_uart, strlen(message_uart), HAL_MAX_DELAY);
// oled显示
OLED_NewFrame();
OLED_PrintString(0, 16, message_temp, &font16x16, OLED_COLOR_NORMAL);
OLED_PrintString(0, 32, message_hum, &font16x16, OLED_COLOR_NORMAL);
OLED_ShowFrame();
// 延时 1 秒
HAL_Delay(1000);
提示

建议读取间隔大于500毫秒

AHT20与DHT20、DHT11的区别

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

对比项目AHT20DHT20DHT11
通用与 DHT20 通用与 AHT20 通用不通用
体积微型贴片插针插针
精度最高低于 AHT20最低
定位是 DHT11 的升级老产品
通信标准 I²C标准 I²C单总线

DHT20 内部结构:

DHT20

故障排除

工程建立和配置