代码拉取完成,页面将自动刷新
AHT20是I2C接口的MEMS温湿度传感器,ADC位数为20Bit,具有体积小、精度高、成本低等优点。相对湿度精度 RH=±2%,温度精度 T=±0.3°C。相对湿度测量范围 RH=0100%,温度测量范围 T=-4085°C。
主板引脚 | 释义 |
---|---|
GPIO0 | SDA |
GPIO1 | SCL |
AHT20传感器使用I2C接口,I2C通讯协议(Inter-Integrated Circuit)引脚少,硬件实现简单,可扩展性强,实现I2C需要两根信号线完成信息交换。
·一个I2C总线只使用两条总线线路,一条双向串行数据线(SDA),一条串行时钟线(SCL)。数据线即用来表示数据,时钟线用于数据收发同步。
相对湿度RH可以根据SDA输出的相对湿度信号$S_{RH}$通过以下公式获得: $$ RH[%] = (\frac{S_{RH}}{2^{20}})*100% $$
温度T可以根据SDA输出的温度信号$S_{T}$通过以下公式获得: $$ T[^{\circ}C] = (\frac{S_{T}}{2^{20}})*200-50 $$
// 接收测量结果,拼接转换为标准值
uint32_t AHT20_GetMeasureResult(float* temp, float* humi)
{
uint32_t retval = 0, i = 0;
if (temp == NULL || humi == NULL) {
return HI_ERR_FAILURE;
}
uint8_t buffer[AHT20_STATUS_RESPONSE_MAX];
memset(&buffer, 0x0, sizeof(buffer));
retval = AHT20_Read(buffer, sizeof(buffer)); // recv status command result
if (retval != HI_ERR_SUCCESS) {
return retval;
}
for (i = 0; AHT20_STATUS_BUSY(buffer[0]) && i < AHT20_MAX_RETRY; i++) {
// printf("AHT20 device busy, retry %d/%d!\r\n", i, AHT20_MAX_RETRY);
usleep(AHT20_MEASURE_TIME);
retval = AHT20_Read(buffer, sizeof(buffer)); // recv status command result
if (retval != HI_ERR_SUCCESS) {
return retval;
}
}
if (i >= AHT20_MAX_RETRY) {
printf("AHT20 device always busy!\r\n");
return HI_ERR_SUCCESS;
}
uint32_t humiRaw = buffer[1];
humiRaw = (humiRaw << 8) | buffer[2];
humiRaw = (humiRaw << 4) | ((buffer[3] & 0xF0) >> 4);
*humi = humiRaw / (float)AHT20_RESOLUTION * 100;
uint32_t tempRaw = buffer[3] & 0x0F;
tempRaw = (tempRaw << 8) | buffer[4];
tempRaw = (tempRaw << 8) | buffer[5];
*temp = tempRaw / (float)AHT20_RESOLUTION * 200 - 50;
// printf("humi = %05X, %f, temp= %05X, %f\r\n", humiRaw, *humi, tempRaw, *temp);
return HI_ERR_SUCCESS;
}
屏幕下方分别是:温度、相对湿度
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。