基于ESP8266的DHT11温湿度检测

2019-12-04 04:16王小祥
数字技术与应用 2019年8期
关键词:检测

王小祥

摘要:WIFI模块ESP8266以其价格低、性能能优而被广泛应用。其不仅能实现WIFI功能,而且可以实现MCU控制功能。本文主要介绍利用ESP8266和DHT11实现温度与湿度的检测。

关键词:ESP8266;DHT11;检测

中图分类号:TP27 文献标识码:A 文章编号:1007-9416(2019)08-0034-02

1 DHT11简介

DHT11数字温湿度传感器是一款含有已校准数字信号输出的温湿度复合传感器。其内置电容式感湿元件、NTC 测温元件和一个高性能 8 位单片机,具有极高的可靠性与卓越的长期稳定性。广泛应用于家电、汽车、医疗等行业的温湿度检测控制。主要特点如下:测量相对湿度范围:5~95%RH,测量温度范围:-20~60℃。DHT11的引脚说明:①VCC:供电3.3V~5.5VDC;②DAT:串行数据,单总线;③悬空;④GND。

DHT11采用单总线通讯协议(一般外接4.7kΩ的上拉电阻),其与单片机通迅主要由起始信号、响应信号、数据传输、结束信号组成。

(1)起始信号:起始信号由主机发送,主机拉低T(18ms

40位数据的组成:16位湿度数据(高8位是湿度的整数,低8位是湿度的小数(湿度的小数部分为0));16位温度数据(高8位是温度的整数,低8位是温度的小数);8位校验和(湿度与温度4个字节数据的和)。

结束信号:从机发送完40Bit数据后会输出54us的低电平作为结束信号,然后转为输入状态,而主机在检测到从机结束信号后应配置为输出模式并输出高电平。

2 基于EPS8266的温湿度检测

本次任务是利用ESP8266采集DHT11温湿度通过串口上传到电脑中(通过串口调试的软件显示测量值),3S刷新一次数据。

2.1 硬件电路

硬件电路主要有ESP8266模块和DTH11传感器。如图1所示,TXD、RXD实现串口通讯,ESP8266的GPIO5作为数据线与DHT11的数据脚相连。

2.2 编程思路

在nonos 工程中app/driver中加入dht11.c,dht11.c 包含了发起起始信号、接受响应信号、数据的传输(位数据读取、字节数据读取、完整数据的读取),判断结束信号等函数。

以位数据的读取为例说明:首先等待相应信息的低电平(最多等150us),低电平开始后计时最多等待120us,当为高电平后延时45us(跳过了数据“0”的高电平时间),读取GPIO5的电平,若此时电平为1则说明接收到的数据为“1”,若电平为0则说明接收到的数据为“0”,返回数据值。

u8 ICACHE_FLASH_ATTR DHT11_Read_Bit(void)

{

u8 C_delay_time = 0;

while( GPIO_INPUT_GET(GPIO_ID_PIN(5))==1 && C_delay_time<150 )

{os_delay_us(1);C_delay_time++; }

C_delay_time = 0 ;

while( GPIO_INPUT_GET(GPIO_ID_PIN(5))==0 && C_delay_time<120 )

{os_delay_us(1);C_delay_time++; }

os_delay_us(45);

return GPIO_INPUT_GET(GPIO_ID_PIN(5));

}

字節的读取将位数据读取循环调用8次,注意高位在前(高位先出)。完整数据的读取再调用字节读取5次,并对数据进行校验,同时判断温度值的正、负(当温度低于0℃,温度数据低8位的最高位为1)。

由于3s刷新一次数据,因此在user_main.c需要启动软件定时器。软件定时

初始化过程如下:①先宏定义一个定时器结构体: os_timer_t   os_timer;②初始化前先关闭该定时器:os_timer_disarm( &os_ timer);③配置该定时器回调函数:os_timer_setfn( &os_timer,(os_ timer_func_t *)OS_Timer_1,NULL);④启动该定时器os_timer _arm( &os_timer,3000,true);

在定时回调函数OS_Timer_1()中出数据:

void ICACHE_FLASH_ATTR OS_Timer_1 (void)

{

if(DHT11_Data[5] == 1) // 温度 >= 0℃

{

os_printf("\r\n湿度==%d.%d %RH\r\n",DHT11_Data[0],DHT11_Data[1]);

os_printf("\r\n温度==%d.%d ℃\r\n", DHT11_Data[2],DHT11_Data[3]);

}

else

{

os_printf("\r\n濕度==%d.%d %RH\r\n",DHT11_Data[0],DHT11_Data[1]);

os_printf("\r\n温度==-%d.%d ℃\r\n",DHT11_Data[2],DHT11_Data[3]);

}

}

3 调试与注意事项

程序下载后,利用串口调试软件观察DHT11的测量值,数据每3S刷新一次,若改变外部环境后测量值能及时发生变化。

在编程过程需要注意如下几点:

(1)主机对数据总线操作时,应配置为输出模式;DHT11对数据总线操作时,主机应配置为输入模式。(2)由于DHT11对时序要求严格,因此延迟函数误差不能太大,否则读取数据。(3)在时序检测过程中需进行超时检测,可以避免程序出现死循环。

参考文献

[1] DHT11温湿度传感器产品手册[P].

[2] ESP8266技术参考手册[P].

[3] ESP8266 Non-OS SDK API参考手册[P].

DHT11 Temperature and Humidity Detection Based on ESP8266

WANG Xiao-xiang

(Wuxi Institute of Technicians,Wuxi  Jiangsu  214000)

Abstract:WIFI module ESP8266 is widely used because of its low price and excellent performance. It can not only realize WIFI function, but also realize MCU control function. This paper mainly introduces the use of ESP8266 and DHT11 to detect temperature and humidity.

Key words:ESP8266;DHT11;Detection

猜你喜欢
检测
QC 检测
“不等式”检测题
“一元一次不等式”检测题
“一元一次不等式组”检测题
“几何图形”检测题
“角”检测题
“有理数的乘除法”检测题
“有理数”检测题
“角”检测题
“几何图形”检测题