【国民技术N32G457评测】DHT22温湿度检测
[复制链接]
本帖最后由 jinglixixi 于 2022-2-26 11:07 编辑
DHT22是一款数字式温湿度传感器,它采用单总线方式工作,相较于DHT11它的精度要更高,可到1位小数,且检测范围也更宽一些。
为配合检测值的显示,这里仍使用双色OLED屏,其连接方式与检测效果如图1和图2所示。
图1 显示效果1
图2显示效果2
这里DHT22与开发板的连接关系为:
OUT--- PE5
为切换该引脚的输入输出性能,所定义的相关函数为:
void DHT22_IO_IN(void)
{
rt_pin_mode(SDA_PIN, PIN_MODE_INPUT_PULLUP);
}
void DHT22_IO_OUT(void)
{
rt_pin_mode(SDA_PIN, PIN_MODE_OUTPUT);
}
DHT22的初始化函数为:
uint8_t DHT22_Init(void)
{
rt_pin_mode(SDA_PIN, PIN_MODE_OUTPUT);
rt_pin_write(SDA_PIN, PIN_HIGH);
DHT22_Rst();
return DHT22_Check();
}
DHT22读取温湿度的函数为:
int8_t DHT22_Read_Data(int16_t *temp,int16_t *humi)
{
uint8_t buf[5];
uint8_t i;
DHT22_Rst();
if(DHT22_Check()==0)
{
for(i=0;i<5;i++)
{
buf=DHT22_Read_Byte();
}
if((buf[0]+buf[1]+buf[2]+buf[3])==buf[4])
{
*humi=buf[0]*256+buf[1];
*temp=buf[2]*256+buf[3];
}
}
else
return 1;
return 0;
}
实现图示效果的主程序为:
int main(void)
{
uint32_t Speed = 400;
int16_t temperature;
int16_t humidity;
OLEDInit();
OLED_Init();
OLED_Clear();
OLED_ShowString(20,0,"N32G457 TEST",16);
OLED_ShowString(20,2,"OLED & DHT22",16);
DHT22_Init();
rt_thread_mdelay(2000);
OLED_ShowString(40,4,"DHT22 OK!",16);
OLED_ShowString(0,6,"T= . C H= . %",16);
while(1)
{
DHT22_Read_Data(&temperature,&humidity);
OLED_ShowNum(16,6,temperature/10,2,16);
OLED_ShowNum(80,6,humidity/10,2,16);
OLED_ShowNum(40,6,temperature%10,1,16);
OLED_ShowNum(104,6,humidity%10,1,16);
rt_thread_mdelay(1000);
}
}
由此可见,使用数字式温湿度传感器来检测环境的温湿度变化还是更方便的。此外,其占用系统的资源也很少,是进行温湿度检测的好方案。
|