与DHT11通信协议兼容的温湿度传感器——GXHT11
传感器封装介绍
传感器尺寸为2mm * 2mm,DFN6封装,各管脚定义如下:
引脚 | 描述 |
---|---|
1 | VDD接电源 |
3 | GND接地 |
6 | DQ引脚,接主机通信IO |
2,4,5 | 无连接,建议悬空 |
#基本参数
• 电源电压:2.6V ~ 5.5V
• 转换电流:350μA
• 待机电流:0.5μA
• 通信接口:单线
• 工作温度:-40~125℃
• 工作湿度:0~100%
通信协议
发送10ms以上的低电平传感器就会返回应答信号。
/**********************************************
函数名: void GXHT11_Rst(void)
参数说明:无
返回值:无
函数作用:主机发送复位信号
***********************************************/
void GXHT11_Rst(u8 txd)
{
GXHT11_config();
DQ_OUT( txd); //配置成输出模式
change_DQ_LOW( txd); //拉低数据线
Delay_MS(18); //拉低至少18ms
change_DQ_HIGH( txd); //拉高数据线
Delay_US(14); //主机拉高20~40us
}
读数据1和0的时序如上图。
/**********************************************
函数名: void GXHT11_readbit(u8 txd)
参数说明:无
返回值:无
函数作用:主机读取数据
***********************************************/
u8 GXHT11_readbit(u8 txd)
{
u8 retry = 0;
//11的Bit开始信号为50us低电平
while(GPIO_ReadInputDataBit(GPIO_DQ,change_DQ(txd)) && retry<100)//等待变为低电平(等待Bit开始信号)
{
retry++;
Delay_US(1);
}
retry = 0;
while(!GPIO_ReadInputDataBit(GPIO_DQ,change_DQ(txd)) && retry<100)//等待变高电平(代表数据开始传输)
{
retry++;
Delay_US(1);
}
Delay_US(30);//等待30us
//0信号为26-28us,1信号则为70us,所以说超过30us去读取引脚状态就可以知道传输的值了
if(GPIO_ReadInputDataBit(GPIO_DQ,change_DQ(txd))) return 1;
else return 0;
}
整个通信流程与DHT11兼容。
测试数据
传感器手册标明芯片温度的典型精度为±0.2,湿度典型精度为±2%,博主在温湿度箱实测数据如下:
与芯片温度做对比的是精度0.1以上的高精度温度计,基本符合手册所写的典型精度为±0.2。
芯片湿度是在%1精度内的温湿度箱测试的,受限于时间和条件只测试了25℃的湿度数据,基本符合手册标注的精度。
总结
GXHT11驱动程序与DHT11基本兼容,我使用相同程序方便读取了两款传感器,均能正常通信。而GXHT11的参数,包括工作电压范围、功耗、精度等会更好一些。