应用案例
温湿度传感器AHT10
AHT10 配有一个全新设计的 ASIC专用芯片、一个经过改进的MEMS半导体电容式湿度传感元件和一个标准的片上温度传感元件。主要引用场景有:
暖通空调 、除湿器、测试及检测设备、消费品、汽车 、自动控制、数据记录器、气象站、家电、湿度调节、医疗及其他相关温湿度检测控制。
AHT10工作流程如下:
-
给传感器上电,上电后传感器最多需要20ms时间(此时SCL为高电平)以达到空闲状态即做好准备接收由主机 (蜂窝模组)发送的命令。
-
主机通过IIC与AHT10通信,AHT10的从机地址为0x38。在主机发出初始化 命令之后(‘11100001’代表初始化,‘10101100’代表温湿度测量), 主机必须等待测量完成。基本的命令在下表中进行概述。
下表为从机返回的状态位说明。
- 主机发送采集指令(0xAC)触发AHT10采集温湿度信息,延时75ms以上,等待AHT10完成采集之后再读取AHT10温湿度数据。
def Trigger_measurement(self):
# Trigger data conversion
self.write_data([self.AHT10_START_MEASURMENT_CMD, 0x33, 0x00])
time.sleep_ms(200) # at last delay 75ms
# check has success
r_data = self.read_data(6)
# check bit7
if (r_data[0] >> 7) != 0x0:
print("Conversion has error")
else:
self.aht10_transformation_temperature(r_data[1:6])
- 主机获取AHT10数据后,需要对原始数据进行转化,得到需要的温湿度信息。相对湿度 RH 根据 SDA 输出的相对湿度信号 SRH 通过如下公式计算获得
温度 T可以通过将温度输出信号 ST 代入到下面的公式计算得到
def aht10_transformation_temperature(self, data):
r_data = data
# Convert raw data into temperature and humidity
humidity = (r_data[0] << 12) | (
r_data[1] << 4) | ((r_data[2] & 0xF0) >> 4)
humidity = (humidity/(1 << 20)) * 100.0
print("current humidity is {0}%".format(humidity))
temperature = ((r_data[2] & 0xf) << 16) | (
r_data[3] << 8) | r_data[4]
temperature = (temperature * 200.0 / (1 << 20)) - 50
print("current temperature is {0}°C".format(temperature))
AHT10详细驱动可参考AHT10驱动
常见问题和故障
IIC是一种非常简单和直接的通信协议,在实际应用中遇到的问题也比较少。
1. 数据接收或者接收一直失败
这可能是由于几种原因引起的,包括:波特率设置错误、硬件连接问题等。故障排查步骤可能包括:
-
检查模组IIC波特率是否超过外设芯片最高波特率限制。
-
检查硬件连接,确保SDA和SCL线正确连接,并且地线(GND)也要正确连接。
2. 可以正常进行收发,但是有错误数据
可能是以下几个原因:
-
主机SDA、SCL和从机SDA、SCL电平不一致。当主机电平为3.3V,从机为1.8V,此时从机的高电平是1.8V,但是主机一般认为电平高于1.65V是高电平,容易产生误判。
-
IIC上拉电阻过大,上拉能力不够,导致上升沿和下降沿持续时间过长,主机判断数据错误。



