前言
本文主要介绍STM32CubeIDE配置硬件IIC驱动AHT20模块,实现温湿度读取并用串口打印显示在上位机;
软件平台:STM32CubeIDE+HAL库
硬件环境:STM32F103ZET6(正点原子战舰V3)+AHT20模块
目录
- 前言
- AHT20简介
- 软件程序
- CubeIDE设置
- AHT20驱动
- main函数
- 硬件接线
- DEBUG
- 工程源码
AHT20简介
AHT20是一个温湿度传感器,又叫DHT20,是DHT11的全新升级产品,配置了专用的 ASIC 传感器芯片、高性能的半导体硅基电容式湿度传感器和一个标准的片上温度传感器,并使用了标准 I2C 数据输出信号格式。相对于DHT11其在高温高湿环境下的性能更稳定;同时,产品的精度、响应时间、测量范围都得到了大幅的提升。
软件程序
CubeIDE设置
-
新建CubeIDE工程,可以参考往期文章,此处不做过多赘述
-
串口设置
-
硬件IIC设置
-
为每个外设生成.h和.c文件
做这步只是为了规范点,并非必需操作,只要能正常调用,代码放在任意文件都可以;
AHT20驱动
工程添加AHT20.h和AHT20.c文件
AHT20.h
#include "i2c.h"
#define AHT20_ADDRESS 0x70
void AHT20_Init();
void AHT20_Read(float *Temperature, float *Humidity);
AHT20.c
#include "AHT20.h"
void AHT20_Init(){
uint8_t readBuffer;
HAL_Delay(40);
HAL_I2C_Master_Receive(&hi2c1, AHT20_ADDRESS, &readBuffer, 1, HAL_MAX_DELAY);
if ((readBuffer & 0x08) == 0x00){
uint8_t sendBuffer[3] = {0xBE,0x08,0x00};
HAL_I2C_Master_Transmit(&hi2c1, AHT20_ADDRESS, sendBuffer, 3, HAL_MAX_DELAY);
}
}
void AHT20_Read(float *Temperature, float *Humidity){
uint8_t sendBuffer[3] = {0xAC,0x33,0x00};
uint8_t readBuffer[6];
HAL_I2C_Master_Transmit(&hi2c1, AHT20_ADDRESS, sendBuffer, 3, HAL_MAX_DELAY);
HAL_Delay(75);
HAL_I2C_Master_Receive(&hi2c1, AHT20_ADDRESS, readBuffer, 6, HAL_MAX_DELAY);
if((readBuffer[0] & 0x80) == 0x00){
uint32_t data = 0;
data = ((uint32_t)readBuffer[3] >> 4) + ((uint32_t)readBuffer[2] << 4) + ((uint32_t)readBuffer[1] << 12);
*Humidity = data *100.0f / (1 << 20);
data = (((uint32_t)readBuffer[3] & 0x0F) << 16) + ((uint32_t)readBuffer[4] << 8) + (uint32_t)readBuffer[5];
*Temperature = data * 200.0f /(1<<20) - 50;
}
}
main函数
main文件#include头文件AHT20.h
#include "AHT20.h"
main函数while循环之前添加AHT20初始化和必要的定义
AHT20_Init();
float temperature,humidity;
char message[50];
main函数while循环中添加读取AHT20函数和串口发送函数
AHT20_Read(&temperature, &humidity); //读取数据
sprintf(message,"温度:%.1f °C, 湿度:%.1f %%\r\n",temperature, humidity); //组合字符串
HAL_UART_Transmit(&huart4, message, strlen(message),1000); //串口发送
HAL_Delay(500); //延时
如果有sprintf有报错,Properties里勾选上这两个设置支持浮点型
硬件接线
接线跟上边CubeIDE初始化设置的情况一样,不清楚可以退回去看可视化视图
AHT20模块比较脆弱,上电前务必确认接线正确;
AHT20 | STM32 |
---|---|
VIN | 3.3V/5V |
GND | GND |
SCL | PB6 |
SDA | PB7 |
串口接线:
CH340 | STM32 |
---|---|
3.3V | / |
GND | GND |
TX | PC11 |
RX | PC10 |
烧录程序上电开机,上位机打开串口工具接收温湿度数据,触摸AHT20温湿度发生变化,实验成功;
DEBUG
若温湿度读取失败或返回异常,检查接线情况,检查驱动代码有没有敲错,如果都没问题,换个AHT20模块确认是否模块故障;
工程源码
链接:https://pan.baidu.com/s/1F-L00nXIS_HaT4W0Fi3ycw
提取码:1023