本文的目的在于实如今以ESP8266_NON-OS_SDK为基础的ESP8266开发中快速读取DHT11温湿度传感器的功能:git
DHT11 传感器采用简化的单总线通讯。单总线即只有一根数据线,系统中的数据交换、控制均由单总线完成。设备(主机或从机)经过一个漏极开路或三态端口(单片机 IO 口) 连至该数据线,以容许设备在不发送数据时可以释放总线(由上拉电阻控制,把总线上拉成高电平),而让其它设备使用总线;单总线一般要求外接一个约 4.7kΩ 的上拉电阻,这样,当总线闲置时,其状态为高电平(模块中已经集成 4.7k 上拉电阻)。因为它们是主从结极,只有主机呼叫从机时,从机才能应答,所以主机访问器件都必须严格遵循单总线序列,若是出现序列混乱,器件将不响应主机。github
也就是说咱们须要控制IO的高低电平来与DHT11进行数据交互web
程序逻辑大体以下::app
主机发送起始信号并检测 DHT11 的响应信号。 主机会发送一个时间 T(18ms < T < 30ms)的低电平做为起始信号(拉低后要释放总线),DHT11 检测到起始信号后会把信号总线拉低83us做为响应信号,而后拉高 87us 通知主机准备接收数据。svg
主机接收 DHT11 发送的数据(高位先出)。 在 DHT11 发送 87us 高电平的通知信号后紧接着发送40Bit 数据。 数据 0 由 54us 的低电平与 23~27us 的高电平构成;数据 1 由 54us 的低电平与 68~74us构成函数
主机读取 DHT11 发送的 40Bit 数据并检测 DHT11 的结束信号。 DHT11 发送完 40Bit 数据后会继续输出54us的低电平做为结束信号,而后转为输入状态。 这时主机在检测到 DHT11 的结束电平结束后应该配置为输出模式并输出高电平。指针
下载地址(若是有帮到你顺手帮我点个星星谢谢)code
使用方法:xml
主要函数:开发
DHT11_Read_Data
函数原型:
ICACHE_FLASH_ATTR uchar DHT11_Read_Data(DHT11_Data *Data,int PIN_NAME,int PIN);
简介:读取DHT11的数据,改变传入指针指向的Data结构体中的Humi与Temp
参数1 Data: 储存数据的结构体
参数2 PIN_NAME: 引脚地址 如:PERIPHS_IO_MUX_GPIO5_U
参数3 PIN: 引脚号
返回值: uchar(unsigned char)返回读取是否成功
0:成功
1:失败