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

本文介绍如何使用ESP8266_NON-OS_SDK开发环境,实现快速读取DHT11温湿度传感器数据。详细解析了DHT11的单总线通信原理,包括主机如何发送起始信号、接收响应信号及数据,以及如何正确读取和处理40Bit数据。提供代码下载和具体应用步骤。
摘要由CSDN通过智能技术生成

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

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

原理说明

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

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

程序逻辑大致如下:

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

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

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

代码下载

下载地址(如果有帮到你顺手帮我点个星星谢谢)

使用方法

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

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值