AHT10 是一款高精度,完全校准,贴片封装的温湿度传感器, MEMS 的制作工艺,确保产品具有极高的可靠性与卓越的长期稳定性。传感器包括一个电容式感湿元件和一个高性能CMOS 微处理器相连接。该产品具有品质卓越、超快响应、抗干扰能力强、性价比极高等优点。AHT10 通信方式采用标准 IIC 通信方式,超小的体积、极低的功耗,使其成为各类应用甚至最为苛刻的应用场合的最佳选择。 AHT10 支持较宽的工作电源电压范围,该器件可为各类常见应用场景提供低成本和低功耗优势,温湿度传感器均在高精度的恒温恒湿腔室中进行出厂校准,直接输出经温度补偿后的湿度、温度等信息,用户无需要对湿度进行温度补偿,便可得到准确的温湿度信息
AHT10主要特点:
PS:I2C协议会在协议专题中
开发板上使用的是PA0和 PA1来模拟IIC总线与AHT10进行通讯的,因为I2C接口被其他硬件占用了。
默认的 7-bit I2C 设备地址为 011100x。其中最低位 LSB 是可以通过 ADR 引脚(表 7 所示)的电平来随时改变的。将 ADR 接地电平将使 I2C 设备地址为 0111000 (0x38);将 ADR 接 VDD 电平,将使 I2C 设备地址为 1111001(0x79)。
因为W601将ADR接地,所以AHT10的设备地址为0x38
AHT10的读写模式:
在开始位之后,主机将 7 位从机地址发送到 HS300 X;接着是读/写位,这将决定任何后续数据的传送方向,该位设置时为 1 以指示从从属到主的读,设置为 0 时指示从主机到从机的写入。
即:
(0x38 << 1) || 0; //这是写命令
(0x38 << 1) || 1; //这是读命令
当传感器启动通信后,先发送命令 0xE1,使输出数据进入校准状态。在 0xE1 发送后需要等待不少于300ms 读取温湿度数据(注意:此命令刚上电只需发送一次),而用于获取数据的指令是 0xAC。采集温湿度命令如下表:
/**
* @brief ATH10初始化
*
* @param void
*
* @return u8 0,初始化成功
*/
u8 AHT10_Init(void)
{
u8 res;
u8 temp[2] = {0, 0};
IIC_Init(); //初始化IIC
if(AHT10_Read_Status()) return 1;
res = AHT10_Write_Data(AHT10_NORMAL_CMD, temp, 2);
if(res != 0) return 1;
delay_ms(300);
temp[0] = 0x08;
temp[1] = 0x00;
res = AHT10_Write_Data(AHT10_CALIBRATION_CMD, temp, 2);
if(res != 0) return 2;
delay_ms(300);
return 0;
}
int main(void)
{
u8 t = 0;
float temperature, humidity;
delay_init(80);
uart_init(115200);
SPI_Init();
LCD_Init();
AHT10_Init();
POINT_COLOR = BLUE;
LCD_ShowString(30, 190, 200, 16, 16, "Temp: . C");
LCD_ShowString(30, 210, 200, 16, 16, "Humi: . %RH");
while(1)
{
if(t % 10 == 0)
{
temperature = AHT10_Read_Temperature();
humidity = AHT10_Read_Humidity();
if(temperature < 0)
{
LCD_ShowChar(30 + 40, 190, '-', 16);
temperature = -temperature;
}
else
LCD_ShowChar(30 + 40, 190, ' ', 16);
LCD_ShowNum(30 + 48, 190, temperature, 2, 16);
LCD_ShowNum(30 + 72, 190, (u32)(temperature * 10) % 10, 1, 16);
LCD_ShowNum(30 + 48, 210, humidity, 2, 16);
LCD_ShowNum(30 + 72, 210, (u32)(humidity * 10) % 10, 1, 16);
}
delay_ms(10);
t++;
}
}