在精英STM32 F103开发板上配置了温湿度检测接口,支持以DHT11和DS18B20来检测温湿度。在使用DS18B20进行温度采集时,只需将该器件插入对应的接口引脚接口,为了能直观地显示是以OLED屏为显示器件,具体的效果如图1所示。
使用DS18B20检测温度的好处在于其检测的温度范围要比DHT11宽,可在-20~120之间,而DHT11的温度范围约是0~50之间。
图1 DS18B20检测温度
在使用DHT11进行温湿度检测时,由于采用的是DHT11模块,从图2的原理图可知板上的接口是面向DHT11器件的,为此只好将DHT11的引脚连接到PG13上。
为此对DHT11的引脚定义修改为:
#defineDHT11_IO_IN() {GPIOG->CRH&=0XFF0FFFFF;GPIOG->CRH|=8<<20;}
#define DHT11_IO_OUT(){GPIOG->CRH&=0XFF0FFFFF;GPIOG->CRH|=3<<20;}
#define DHT11_DQ_OUT PGout(13) // PG13
#define DHT11_DQ_IN PGin(13) // PG13
图2 DHT11接口原理图
相应温湿度检测主程序为:
- int main(void)
- {
- u8 t=0;
- u8 temperature;
- u8 humidity;
- Stm32_Clock_Init(9);
- delay_init(72);
- LED_Init();
- OLED_Initi();
- OLED_ClearI();
- OLED_ShowStringI(10,0,"DHT11 TEST",16);
- while(DHT11_Init())
- {
- OLED_ShowStringI(10,6,"DHT11 Error",16);
- delay_ms(200);
- delay_ms(200);
- }
- OLED_ShowStringI(10,6,"DHT11 OK",16);
- OLED_ShowStringI(10,2,"Temp: C",16);
- OLED_ShowStringI(10,4,"Humi: %",16);
- while(1)
- {
- if(t%10==0)
- {
- DHT11_Read_Data(&temperature,&humidity);
- OLED_ShowNumI(50,2,temperature,2,16);
- OLED_ShowNumI(50,4,humidity,2,16);
- }
- delay_ms(10);
- t++;
- if(t==20)
- {
- t=0;
- LED0=!LED0;
- }
- }
- }
复制代码
使用DHT11进行温湿度检测的效果如图3和图4所示.
图3 DHT11温湿度检测(常态)
|