作者:GWD 时间:2019.06.26

DHT11温湿度传感器(单总线类)
一、 学习要点:
1、(重要)单总线类传感器检测高电平while(DHT11 == 1) temp |=0x01;出错,因为要提前拉高引脚或者加下拉电阻很麻烦,不如改成while(DHT11 == 0) temp<<=1;后程序正确,即检测低电平比检测高电平靠谱;
2、printf与LCD1602等显示字符的函数、屏幕外设要显示数字时怎么把数字转换成自负呢?答:数字后加’0’, shi_1 = val[0] / 10 + ‘0’;
二、手册分析:
(一)、参数、特性
1、传感器概述:DHT11 数字温湿度传感器是一款含有已校准数字信号输出的温湿度复合传感器。它应用专用的数字模块采集技术和温湿度传感技术,确保产品具有枀高的可靠性与卓越的长期稳定性。传感器包括一个电阻式感湿元件和一个 NTC 测温元件,并与一个高性能 8 位单片机相连接;
2、引脚说明:
1)、 VDD 供电 3.3-5.5V DC;
2)、 DATA 串行数据,单总线;
3)、 NC 空脚;
4)、 GND 接地,电源负极、
3、典型电路;

4、建议连接线长度短于 20 米时用 5.1K 上拉电阻, 大于 20 米时根据实际情况降低上拉电阻的阻值;
5、使用 3.3V 电压供电时连接线长度不得大于 100cm。否则线路压降会导致传感器供电不足,造成测量偏差;
6、每次读出的温湿度数值是上一次测量的结果,欲获取实时数据,需连续读取两次,但不建议连续多次读取传感器,每次读取传感器间隔大于 5 秒即可获得准确的数据(有点弱);
7、微处理器与 DHT11 的连接典型应用电路如上图所示, DATA 上拉后与微处理器的 I/O 端口相连。
(二)、通信协议 串行通信-单线双向:
1、DHT11 器件采用简化的单总线通信。单总线即只有一根数据线,系统中的数据交换、控制均由单总线完成,当总线闲置时,其状态为高电平;
2、DATA 用于微处理器与 DHT11 之间的通讯和同步,采用单总线数据格式,一次传送 40 位数据,高位先出(先接收到的是高位);
3、数据格式:
1)、8bit 湿度整数数据 + 8bit 湿度小数数据+8bit 温度整数数据 + 8bit 温度小数数据+8bit 校验位。
注:其中温湿度小数部分为 0。
2)、校验位数据定义:“8bit 湿度整数数据 + 8bit 湿度小数数据+8bit 温度整数数据 + 8bit 温度小数数据” 8bit 校验位等于所得结果的末 8 位
4、接收数据解读:湿度: 0011 0101=35H=53%RH 温度: 0001 1000=18H=24℃
5、数据时序图:用户主机(MCU)发送一次开始信号后, DHT11 从低功耗模式转换到高速模式, 待主机开始信号结束后, DHT11 发送响应信号,送出 40bit 的数据,并触发一次信采集。信号发送如所示;

6、通信步骤:
步骤一:DHT11 上电后要等待 1S 以越过不稳定状态在此期间不能发送任何指令;
步骤二:开始信号(图2-3)微处理器的 I/O 设置为输出同时输出低电平,且低电平保持时间不能小于 18ms,然后微处理器的 I/O设置为输入状态,释放总线等待 DHT11 作出回答信号;

步骤三:DHT11 的 DATA 引脚检测到外部信号有低电平时,等待外部信号低电平结束,完成后 DHT11 的 DATA引脚处于输出状态,输出 80 微秒的低电平作为应答信号,紧接着输出 80 微秒的高电平通知外设准备接收数据,微处理器的 I/O 此时处于输入状态,检测到 I/O 有低电平(DHT11 回应信号)后,等待 80 微秒的高电平后的数据接收,发送信号如所示:

步骤四:由 DHT11 的 DATA 引脚输出 40 位数据,微处理器根据 I/O 电平的变化接收 40 位数据,位数据“0”的格式为(图2-6): 50 微秒的低电平和 26-28 微秒的高电平,位数据“1”的格式为: 50 微秒的低电平加 70微秒的高电平。位数据“0”、“1”格式信号如图所示:


步骤五:结束信号:DHT11 的 DATA 引脚输出 40 位数据后,继续输出低电平 50 微秒后转为输入状态,由于上拉电阻随之变为高电平。但 DHT11 内部重测环境温湿度数据,并记录数据,等待外部信号的到来。
三:编程
1、程序功能:检测温湿度在LCD1602显示或者串口输出检测结果,DHT11检测函数需要返回多个参数所以用了指针传址的操作,模板简单利用;
2、 程序效果:

3、 DHT11.c文件
#include “DHT11.h”
#include “delay.h”
#include “reg52.h”

void Dht11_Start(void)
{
DHT11 = 0;
Delay10ms();
Delay10ms();
Delay10ms();
DHT11 = 1;
Delay10us();
while(DHT11 == 0);
Delay10us();
while(DHT11 != 0);
}

void Rd_DHT11(char *p)
{
int i,j;
char temp;
for(i=0 ; i<5 ; i++)
{
for( j=0 ; j<8 ; j++ )
{
while(DHT11 == 0);
Delay10us();
Delay10us();
Delay10us();
if(DHT11 == 0)
{
temp = temp << 1;
}
else
{
temp = temp | 0x01;
temp = temp << 1;
}
while(DHT11 != 0);
}
*p++ = temp;
}
DHT11=1;
}

源代码下载:
链接:https://pan.baidu.com/s/1uwDn0i9UEdQa0BT2bPOgdA
提取码:4nfw

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

  1. 传感器自学笔记第九章——SW-420震动传感器、声控开关传感器、避障传感器模块、TCRT5000循迹传感器、倾斜开关

    作者:GWD 时间:2019.06.26 SW-420震动传感器(开关量传感器) 一.学习要点:无 二.手册分析(开关量传感器) 1.产品用途:各种震动触发作用,比如防盗报警等 2.产品不震动时开关闭 ...

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

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

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

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

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

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

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

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

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

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

  7. Esp8266 进阶之路19 【外设篇①】esp8266驱动 ds18b20、dht11 温湿度传感器,采集温湿度传感器到服务器。(附带Demo)

    本系列博客学习由非官方人员 半颗心脏 潜心所力所写,不做开发板.仅仅做个人技术交流分享,不做任何商业用途.如有不对之处,请留言,本人及时更改. 序号 SDK版本 内容 链接 1 nonos2.0 搭建 ...

  8. Android手机HC-05蓝牙连接Arduino nano获取DHT-11温湿度传感器数据

    如果您觉得本文对您有用,希望您点赞,收藏并且把它分享出去,不明白的可以在评论区留言,我会一一解答,感谢您的支持!! 目标 Android手机HC-05蓝牙连接Arduino nano获取DHT-11温 ...

  9. 个人物联网(目前用到了树莓派、PMS7003攀藤g7传感器、DHT11温湿度传感器)

    上周空气不好,突发奇想要搞个个人物联网系统,检测生存环境.手头有树莓派.NodeMCU esp8266.DHT11温湿度传感器.pm2.5检测需要专门的传感器,本以为也就几块钱,结果发现淘宝还挺贵.在 ...

最新文章

  1. 基于matlab的64QAM,通信调制体制设计之64QAM性能分析MATLAB仿真及代码
  2. Leetcode 217. 存在重复元素 解题思路及C++实现
  3. BAT脚本加防火墙455端口
  4. intellij idea_IntelliJ IDEA内部设计
  5. vue js xlsx 读取 本地 excel
  6. linux中检测用户信息的命令是,在Linux系统上检查用户所属组
  7. hadoop--集群时间同步(可不同步)
  8. Lua利用cjson读写json
  9. 解决pandas读取parquet报错ImportError:Unable to find a usable engine;tried using: ‘pyarrow‘, ‘fastparquet‘
  10. pythonsocket自定义协议_Python实现同时兼容老版和新版Socket协议的一个简单WebSocket服务器...
  11. MacOS如何修复磁盘权限
  12. qq批量登录软件_20191228分享,雪藏了几天的软件合集分享,心痛一小编,开心一大家。...
  13. dell笔记本重装win10系统超详细的教程(适用所有windows系统的一套流程)
  14. VUzzer: Application-aware Evolutionary Fuzzing
  15. mysql 订单表与商品表_数据库——订单表中有不同类型的商品,表的设计
  16. 你的前500位种子用户是怎么来的?
  17. 私域流量运营平台有哪些?
  18. Python错误之 SyntaxError: invalid syntax的解决方法总结
  19. unity打开除主菜单其他地方黑屏或白屏与unityHub安装unity简介
  20. 【offer收割机必备】我简历上的Java项目都好low,怎么办?

热门文章

  1. 5G QoS控制原理专题详解-基础概念
  2. linux 访问西数网盘,西数不认盘,无法访问固件
  3. Salesforce系列(五):Salesforce Apex基础SOSL查询和数据添加!
  4. 字节跳动以 50 亿元收购 Pico 入局 VR;哪吒汽车与华为达成合作;韩国计划禁止苹果和谷歌向开发者抽取佣金 | EA周报...
  5. PayPal开发之IPN的使用
  6. PayPal 全攻略
  7. 什么是5G会话管理功能(SMF)
  8. [python]WindowsError的错误代码详解
  9. 项目经理面试题pmp面试题项目管理面试题
  10. C#获取http请求的JSON数据并解析