一、认识DHT11传感器
1.概念
DHT11 是广州奥松有限公司生产的一款湿温度一体化的数字传感器。该传感器包括一个电阻式测湿元件和一个 NTC 测温元件,并与一个高性能 8 位单片机相连接。通过单片机等微处理器简单的电路连接就能够实时的采集本地湿度和温度。DHT11 与单片机之间能采用简单的单总线进行通信,仅仅需要一个I/O 口。传感器内部湿度和温度数据 40Bit 的数据一次性传给单片机,数据采用校验和方式进行校验,有效的保证数据传输的准确性。DHT11 功耗很低,5V 电源电压下,工作平均最大电流 0.5mA。
性能指标和特性如下:
工作电压范围:3.5V-5.5V
工作电流 :平均 0.5mA
湿度测量范围:20-90%RH
温度测量范围:0-50℃
湿度分辨率 :1%RH 8 位
温度分辨率 :1℃ 8 位
采样周期 :1S
单总线结构
与 TTL 兼容(5V)
2.电路图

3.实物图


S:signal 信号线
—:表示GND
二、单片机读取数据
1.数据结构
DHT11数字湿温度传感器采用单总线数据格式。即,单个数据引脚端口完成输入输出双向传输。其数据包由5Byte(40Bit)组成。数据分小数部分和整数部分,具体格式在下面说明。
一次完整的数据传输为40bit,高位先出。

校验和数据为前四个字节相加。
传感器数据输出的是未编码的二进制数据。数据(湿度、温度、整数、小数)之间应该分开处理。如果,某次从传感器中读取如下5Byte数据:

由以上数据就可得到湿度和温度的值,计算方法:
humi (湿度)= byte4 . byte3=45.0 (%RH)
temp (温度)= byte2 . byte1=28.0 ( ℃)
jiaoyan(校验)= byte4+ byte3+ byte2+ byte1=73(=humi+temp)(校验正确)
注意:DHT11一次通讯时间最大3ms,主机连续采样间隔建议不小于100ms。

2.时序图

时序图真的很重要,也有助于理解代码。
1、主机把总线拉低必须大于18毫秒,保证DHT11能检测到起始信号;
2、主机发送开始信号结束后,延时等待20-40us后,读取DHT11的响应信号;
3、DHT11接收到主机的开始信号后,等待主机开始信号结束,然后发送80us低电平响应信号;
4、DHT11发送响应信号后,再把总线拉高8Ous,准备发送数据;
5、每一bit数据都以50us低电平时隙开始,高电平的长短定了数据位是0还是1;
6、主机发送开始信号后,可以切换到输入模式,或者输出高电平均可;
7、如果读取响应信号为高电平,则DHT11没有响应,请检查线路是否连接正常。
当最后一bit数据传送完毕后,DHT11拉低总线50us,随后总线由上拉电阻拉高进入空闲状态。

三、代码

#include "dht11.h"
#include "delay.h"#define DT GPIO_Pin_11//复位DHT11
void DHT11_Rst(void)
{                 DHT11_IO_OUT();   //SET OUTPUTDHT11_DQ_OUT=0;    //拉低DQDelay_ms(20);     //拉低至少18msDHT11_DQ_OUT=1;  //DQ=1 Delay_us(30);       //主机拉高20~40us
}//等待DHT11的回应
//返回1:未检测到DHT11的存在
//返回0:存在
u8 DHT11_Check(void)
{   u8 retry=0;DHT11_IO_IN();//SET INPUT    while (DHT11_DQ_IN&&retry<100)//DHT11会拉低40~80us{retry++;Delay_us(1);};     if(retry>=100)return 1;else retry=0;while (!DHT11_DQ_IN&&retry<100)//DHT11拉低后会再次拉高40~80us{retry++;Delay_us(1);};if(retry>=100)return 1;      return 0;
}//从DHT11读取一个位
//返回值:1/0
u8 DHT11_Read_Bit(void)
{u8 retry=0;while(DHT11_DQ_IN&&retry<100)//等待变为低电平{retry++;Delay_us(1);}retry=0;while(!DHT11_DQ_IN&&retry<100)//等待变高电平{retry++;Delay_us(1);}Delay_us(40);//等待40usif(DHT11_DQ_IN)return 1;else return 0;
}//从DHT11读取一个字节
//返回值:读到的数据
u8 DHT11_Read_Byte(void)
{        u8 i,dat;dat=0;for (i=0;i<8;i++) {dat<<=1; dat|=DHT11_Read_Bit();}                          return dat;
}//从DHT11读取一次数据
//temp:温度值(范围:0~50°)
//humi:湿度值(范围:20%~90%)
//返回值:0,正常;1,读取失败
u8 DHT11_Read_Data(u8 *temp,u8 *humi)
{        u8 buf[5];u8 i;DHT11_Rst();if(DHT11_Check()==0){for(i=0;i<5;i++)//读取40位数据{buf[i]=DHT11_Read_Byte();}if((buf[0]+buf[1]+buf[2]+buf[3])==buf[4]){*humi=buf[0];*temp=buf[2];}}else return 1;return 0;
}//初始化DHT11的IO口 DQ 同时检测DHT11的存在
//返回1:不存在
//返回0:存在
u8 DHT11_Init(void)
{    GPIO_InitTypeDef  GPIO_InitStructure;  RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);    //使能PG端口时钟GPIO_InitStructure.GPIO_Pin = DT;                //PG11端口配置GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;         //推挽输出GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;GPIO_Init(GPIOA, &GPIO_InitStructure);              //初始化IO口GPIO_SetBits(GPIOA,DT);                         //PG11 输出高DHT11_Rst();  //复位DHT11return DHT11_Check();//等待DHT11的回应
}

DHT11温湿度传感器学习笔记相关推荐

  1. STC89C52驱动DHT11温湿度传感器测试笔记

    经常有在视频中看到网友应用DHT11采集温湿度,其次它与sht11这片温湿度传感就一字之差,臆想着它俩是否是互换代用,上某宝查一查发现这价格很亲民,果断的下单了一片去尝试着搞通它,快递收到后因为时间问 ...

  2. ⑦ ESP8266 开发学习笔记_By_GYC 【ESP8266 驱动 DHT11 温湿度传感器】

    目录 一.准备材料 二.硬件连接 三.软件编程 1.修改工程名 2.添加组件 3.编程 4.反馈结果 5.核心代码 四.总结 ⑦ ESP8266 开发学习笔记_By_GYC [ESP8266 驱动 D ...

  3. 【STM32Cube】学习笔记(六):DHT11温湿度传感器

    文章目录 摘要 一.简介 1.DHT11数字温湿度传感器 2.DHT11性能参数 2.DHT11数据结构 2.DHT11传输时序 二.硬件电路设计 1.模块内部电路 2.与单片机相连接电路 三.软件设 ...

  4. ESP32 开发笔记(三)源码示例 8_DHT11_RMT 使用RMT实现读取DHT11温湿度传感器

    开发板购买链接 https://item.taobao.com/item.htm?spm=a2oq0.12575281.0.0.50111deb2Ij1As&ft=t&id=62636 ...

  5. 传感器自学笔记第八章——DHT11温湿度传感器(附带自己写的很好用的51单片机DHT11代码模板,参数列表只有一个字符数组指针)

    作者:GWD 时间:2019.06.26 DHT11温湿度传感器(单总线类) 一. 学习要点: 1.(重要)单总线类传感器检测高电平while(DHT11 == 1) temp |=0x01;出错,因 ...

  6. 【STM32 Net MF开发板学习-19】DHT11温湿度传感器通信(上)

    前段时间开发远程医疗系统(Dr.Cloud)就曾用到过温湿度传感器,不过当时考虑到集成难度,选了一个RS485接口的传感器,该传感器实现了Modbus Rtu Slave的功能,只要客户程序实现Mod ...

  7. 【STM32 .Net MF开发板学习-19】DHT11温湿度传感器通信(上)

    前段时间开发远程医疗系统(Dr.Cloud)就曾用到过温湿度传感器,不过当时考虑到集成难度,选了一个RS485接口的传感器,该传感器实现了Modbus Rtu Slave的功能,只要客户程序实现Mod ...

  8. ESP8266笔记—DHT11温湿度传感器

    DHT11温湿度传感器 参考文档 产品概述 典型电路 标题串行通信说明(单线双向) 单总线传送数据位定义 校验位数据定义 外设读取步骤 参考文档 技小新:https://www.jixin.pro/b ...

  9. 基于STM32的DHT11温湿度传感器设计

    文章目录 前言 一.DHT11温湿度传感器是什么? 二.DHT11驱动程序详解 1.相关宏定义 2.输入输出GPIO配置 2.GPIO初始化设计 3.检测DHT11是否正常工作 4.读取DHT11数据 ...

最新文章

  1. 数据结构(07)— 线性顺序表基本操作
  2. Tornado框架中视图模板Template的使用
  3. Java开发面试问题,Java中高级核心知识全面解析(10)
  4. 通过反射创建动态代理对象(二)
  5. centos6.4 安装 mysql_CentOS6.4 安装MySQL
  6. 最精美详尽的 HTTPS 原理图
  7. java 3des 32位密钥_3des,java_java 中32位秘钥长度的 3des加密方法?,3des,java - phpStudy...
  8. 专转本计算机第一章试题,江苏专转本 计算机第一章自测题(含答案).doc
  9. 【线程安全的List】CopyOnWriteArrayList的原理及使用
  10. 圆网印花色浆未干引起的印花疵病
  11. Python:文件的读取、创建、追加、删除、清空
  12. Linux常用命令介绍(二)——压缩与解压缩命令
  13. (Singleton)单例模式的Java实现
  14. cmakelists语法_cmake使用教程(六)-蛋疼的语法
  15. 温度控制直流电动机的c语言,温度控制直流电动机转速系统设计报告
  16. 计算机开放电子书 2016 归档
  17. 可解释人工智能XAI
  18. 锐捷NAT地址池配置
  19. ios直播开发基础,推流协议及流程
  20. 学习如何使用 Git 来压扁、变基和精选

热门文章

  1. 读写超快的随身存储好物,设计也很漂亮,大华S809固态U盘上手
  2. 根据字符出现的频次排序
  3. 容器的作用span div10
  4. 地址栏中的#能不能去掉?
  5. Java阶段性测试--第四五六大题参考代码
  6. 如何用C++打印一个正三角形
  7. Mac技巧合集第一期
  8. 步态剪影_如何拍摄好剪影照片
  9. 精彩书摘:团队建立初期要做的事情
  10. 中国联通和中国电信措手不及,中国移动主动发起5G流量价格战