使用ESP8266_NON-OS_SDK开发——读取DHT11温湿度传感器

使用ESP8266_NON-OS_SDK开发——读取DHT11温湿度传感器

本文的目的在于实如今以ESP8266_NON-OS_SDK为基础的ESP8266开发中快速读取DHT11温湿度传感器的功能:git

原理说明

DHT11 传感器采用简化的单总线通讯。单总线即只有一根数据线,系统中的数据交换、控制均由单总线完成。设备(主机或从机)经过一个漏极开路或三态端口(单片机 IO 口) 连至该数据线,以容许设备在不发送数据时可以释放总线(由上拉电阻控制,把总线上拉成高电平),而让其它设备使用总线;单总线一般要求外接一个约 4.7kΩ 的上拉电阻,这样,当总线闲置时,其状态为高电平(模块中已经集成 4.7k 上拉电阻)。因为它们是主从结极,只有主机呼叫从机时,从机才能应答,所以主机访问器件都必须严格遵循单总线序列,若是出现序列混乱,器件将不响应主机。github

也就是说咱们须要控制IO的高低电平来与DHT11进行数据交互web

程序逻辑大体以下:app

  1. 主机发送起始信号并检测 DHT11 的响应信号。 主机会发送一个时间 T(18ms < T < 30ms)的低电平做为起始信号(拉低后要释放总线),DHT11 检测到起始信号后会把信号总线拉低83us做为响应信号,而后拉高 87us 通知主机准备接收数据。svg

  2. 主机接收 DHT11 发送的数据(高位先出)。 在 DHT11 发送 87us 高电平的通知信号后紧接着发送40Bit 数据。 数据 054us 的低电平与 23~27us 的高电平构成;数据 154us 的低电平与 68~74us构成函数

  3. 主机读取 DHT11 发送的 40Bit 数据并检测 DHT11 的结束信号。 DHT11 发送完 40Bit 数据后会继续输出54us的低电平做为结束信号,而后转为输入状态。 这时主机在检测到 DHT11 的结束电平结束后应该配置为输出模式并输出高电平。指针

代码下载

下载地址(若是有帮到你顺手帮我点个星星谢谢)code

使用方法xml

  1. 创建工程;
  2. 将dht11.h文件复制到 工程目录\app\include\driver
  3. 将dht11.c文件复制到 工程目录\app\driver
  4. 在项目文件中应用dht11.h

主要函数开发

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:失败