【国民技术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);
- }
- }
由此可见,使用数字式温湿度传感器来检测环境的温湿度变化还是更方便的。此外,其占用系统的资源也很少,是进行温湿度检测的好方案。
|