实验目的
本章学习温湿度传感器DHT11的使用,利用DHT11采集环境的温湿度,DHT11和DS18B20一样,也是单线通信。
实验简介
DHT11数字温湿度传感器是一种含有已校准数字信号传输的温湿度复合传感器。它应用专用的数字模块采集技术和温湿度传感技术。确保产品具有很高的可靠性与卓越的长期稳定性。传感器包括一个电阻式感湿元件和一个NTC测温元件,并与一个高性能8位单片机相连接,DHT11与单片机之间能采用简单的单总线进行通信,仅需要一个I/O口,传感器内部温度和温度数据40Bit的数据一次性传给单片机,数据采用校验和方式进行校验,有效的保证数据传输的准确性。DHT11功耗很低,5V电源电压,工作平均最大电流0.5mA
DHT11 的技术参数如下:
工作电压范围:3.3V-5.5V;
平均电流:平均0.5mA。
输出:单总线数字信号
测量范围:湿度 20~90%RH,温度 0~50°C。
精度:湿度 ±5%,温度±2°C。
分辨率:湿度 1% 温度 1°C。
DHT11和MCU之间一次通信大约4ms,一次完整的数据包由40Bit组成,高位先出,数据分为整数部分和小数部分,当前小数部分用于以后扩展,现读出为0,数据格式如下:8bit湿度整数数据+8bit湿度小数数据+8bit温度整数数据+8bit温度小数数据和8bit校验和,其中校验和数据为前四字节相加。
MCU发送一次开始信号后,DHT11从低功耗模式转换到高速模式,等待主机开始信号结束后,DHT11发送响应信号,送出40Bit数据并触发一次采集,采集完成转到低功耗模式下,DHT11通信过程如下:
**DHT11开始信号:**总线空闲状态位高电平,主机把总线拉低必须大于18ms,,然后再拉高总线20-40us后,读取DHT11的响应,如果DHT11存在,会拉低总线80us后,再拉高总线80us,接着才会开始输出数据,开始信号时序图如下:
电路设计
DHT11和DS18B20一样,不过DHT11有4个引脚,注意:DS18B20读写都是低位在前,而DHT11读是高位在前
HAL库代码
#include "MyIncludes.h"
u16 sys_cnt = 0;
void systick_isr(void)
{
if(sys_cnt < 1000) sys_cnt++;
else
{
sys_cnt = 0;
HAL_GPIO_TogglePin(GPIOC,GPIO_PIN_4|GPIO_PIN_5);
}
}
DHT11_Data_TypeDef DHT11_Measure;
char measure[40];
//用来存储温湿度
int main(void)
{
System_Init();
LED_Init();
SysTick_Init(systick_isr);
USART1_Init(115200,NULL,NULL);
while(DHT11_Init())
//器件不存在
{
printf("DHT11 Init ERROR");
}
delay_ms(1000