STM32的DHT11

DHT11基础

DHT11数字温湿度传感器是一款含有已校准数字信号输出的温湿度复合传
感器。它应用专用的数字模块采集技术和温湿度传感技术,确保产品具有极高
的可靠性与卓越的长期稳定性。传感器包括一个电阻式感湿元件和一个NTC测
温元件,并与一个高性能8位单片机相连接。因此该产品具有品质卓越、超快
响应、抗干扰能力强、性价比极高等优点。每个DHT11传感器都在极为精确的
湿度校验室中进行校准。校准系数以程序的形式储存在OTP内存中,传感器内
部在检测信号的处理过程中要调用这些校准系数。单线制串行接口,使系统集
成变得简易快捷。超小的体积、极低的功耗,信号传输距离可达20米以上,使
其成为各类应用甚至最为苛刻的应用场合的最佳选则。产品为 4 针单排引脚
封装。连接方便,特殊封装形式可根据用户需求而提供.

接口说明

建议连接线长度短于20米时用5K上拉电阻,大于20米时根据实际情况使
用合适的上拉电阻

Pin名称注释
1VDD供电 3-5.5V
2GND接地,电源负极
3DATA串行数据,单总线
4NC空脚,请悬空

电源引脚

DHT11的供电电压为 3-5.5V。传感器上电后,要等待 1s 以越过不稳定状态在此
期间无需发送任何指令。电源引脚(VDD,GND)之间可增加一个100nF 的电容,用以去
耦滤波。

串行接口 (单线双向/半双工)

DATA 用于微处理器与 DHT11之间的通讯和同步,采用单总线数据格式,一次
通讯时间4ms左右,数据分小数部分和整数部分,具体格式在下面说明,当前小数
部分用于以后扩展,现读出为零.操作流程如下:
一次完整的数据传输为40bit,高位先出。
数据格式:8bit湿度整数数据+8bit湿度小数数据 +8bi温度整数数据+8bit温度小数数据
+8bit校验和
数据传送正确时校验和数据等于“ 8bit湿度整数数据+8bit湿度小数数据
+8bi温度整数数据+8bit温度小数数据” 所得结果的末8位。
用户MCU发送一次开始信号后,DHT11从低功耗模式转换到高速模式,等待主
机开始信号结束后,DHT11发送响应信号,送出40bit的数据,并触发一次信号采集,
用户可选择读取部分数据.从模式下,DHT11接收到开始信号触发一次温湿度采集,
如果没有接收到主机发送开始信号,DHT11不会主动进行温湿度采集.采集数据后
转换到低速模式。

操作时序

1、主机发送复位信号

DHT11 的初始化过程同样分为复位信号和响应信号
首先主机拉低总线至少 18ms,然后再拉高总线,延时 20~40us,取中间值 30us,此时复位信号发送完毕。

2 、DHT11 发送响应信号

DHT11 检测到复位信号后,触发一次采样,并拉低总线 80us 表示响应信号,告诉主机数据已经准备好了;然后 DHT11 拉高总线 80us,之后开始传输数据。如果检测到响应信号为高电平,则 DHT11 初始化失败,请检查线路是否连接正常。

当复位信号发送完毕后,如果检测到总线被拉低,就每隔 1us 计数一次,直至总线拉高,计算低电平时间;当总线被拉高后重新计数检测 80us 的高电平。如果检测到响应信号之后的80us 高电平,就准备开始接收数据。实际上 DHT11 的响应时间并不是标准的 80us,往往存在误差,当响应时间处于 20~100us 之间时就可以认定响应成功。
 

3 、数据传输

DHT11 在拉高总线 80us 后开始传输数据。每 1bit 数据都以 50us 低电平时隙开始,告诉主机开始传输一位数据了。DHT11 以高电平的长短定义数据位是 0 还是 1,当 50us 低电平时隙过后拉高总线,高电平持续 26~28us 表示数据“0”;持续 70us 表示数据“1”。

当 最后 1bit 数据传送完毕后,DHT11 拉低总线 50us,表示数据传输完毕,随后总线由上拉电阻拉高进入空闲状态。
 

位数据0表示方式:

以 50us 低电平开始,高电平持续 26~28us 表示 0。


位数据1表示方式:

以 50us 低电平开始,高电平持续 70us 表示 1。

4、区分数据0/1的巧法

数据“0”的高电平持续 26~28us,数据“1”的高电平持续70us,每一位数据前都有 50us 的起始时隙。如果我们取一个中间值 40us 来区分数据“0”和数据“1”的时隙。

当数据位之前的 50us 低电平时隙过后,总线肯定会拉高,此时延时 40us 后检测总线状态,如果为高,说明此时处于 70us 的时隙,则数据为“1”;如果为低,说明此时处于下一位数据 50us 的开始时隙,那么上一位数据肯定是“0”。

为什么延时 40us?
由于误差的原因,数据“0”时隙并不是准确 26~28us,可能比这短,也可能比这长。
当数据“0”时隙大于 26~28us 时,
如果延时太短,无法判断当前处于数据“0”的时隙还是数据“1”的时隙;
如果延时太长,则会错过下一位数据前的开始时隙,导致检测不到后面的数据

5、整个过程图

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/560763.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

(priority_queue)自定义优先级

思考与总结: 1.优先队列,先出队列元素不是先进队列的元素,而是队列中优先级最高的元素 2.遇到这种题一般把每一个数据封装到一个struct里 3.然后根据优先级判断依据,我们通过重定向定义优先队列的优先级 如果我们写bool opera…

python 如何匹配列表中某个单词_Python中部分指定单词的最佳匹配项

如果要重复执行此操作,应创建一个索引:wordlist [word.strip() for word in "run, ran, rat, rob, fish, tree".split(,)]from collections import defaultdictclass Index(object):def __init__(self, wordlist()):self.trie defaultdict(s…

sigkill mysql_Ubuntu不能停止mysqld

我尝试运行服务mysql stop,killall -s SIGKILL mysqld,/etc/init.d/mysql停止,并停止mysql,但仍然看到这个输出从ps aux | grep mysql:root 32302 0.0 0.3 59040 2120 pts/8 S 06:03 0:00 sudo mysqld_saferoot 32305 0.0 0.1 4440 772 pts/8 S 06:03 0:00 /bin/sh …

java中函数_java中的函数

函数的概述1.函数定义: 能完成特定功能的代码段就是函数,每一个函数都是一个独立的小功能2.为什么要有: 如果没有函数,在实现一个功能时候,就要写一遍这个逻辑, 如果功能多次使用,就会产生大量重复的代码.有了函数之后,把这个功能封装到函数中,当你在使用这个功能时候不需要再写…

(dag模型+最长路+字典序)嵌套矩形

题目: 有 n 个矩形,每个矩形可以用两个整数 a, b 描述,表示它的长和宽。矩形 X(a, b) 可以嵌套在矩形 Y(c, d) 中当且仅当 a<c, b<d,或者 b<c, a<d(相当于把矩形 X 旋转…

Java智能卡 技术_java智能卡APDU学习笔记

因项目需要,利用APDU通信协议在ME手机端和卡端进行通讯。在实践的过程中遇到一些问题,先记录如下。APDU协议,即是智能卡与读写器间的应用层协议,在ISO7816-4[7]中定义了该协议的结构格式。APDU数据有两种结构,读写器使…

(二叉树存储+递归遍历)Binary Tree Traversals

题目: A binary tree is a finite set of vertices that is either empty or consists of a root r and two disjoint binary trees called the left and right subtrees. There are three most important ways in which the vertices of a binary tree can be sys…

java mutator_Java-使用Accessor和Mutator方法

小编典典让我们看一下基础知识:“ Accessor”和“ Mutator”只是获取器和设置器的奇特名称。一个获取器“Accessor”返回一个类的变量或其值。设置器“ Mutator”设置类变量指针或其值。因此,首先您需要设置一个带有一些要获取/设置的变量的类&#xff1…

(二叉树创建+查找)精灵邮差

题目 精灵是非常奇特的生物。众所周知,他们可以活很长时间,他们神奇的能力不是一件容易接受的事情。此外,他们住在树上。但是,你可能不知道有些事情。虽然通过魔法传送提供东西非常方便(很像电子邮件)。他…

java反序列化异常接不到_由Java对象反序列化异常想到的

今天写代码时候遇到一个异常,异常信息如下:Caused by: java.lang.RuntimeException: java.util.concurrent.ExecutionException: org.springframework.data.redis.serializer.SerializationException: Cannot deserialize; nested exception is org.spri…

(找规律)Magic of David Copperfield

题目: 每一个参与的观众被要求将手指放在左上方的图片上(即编号为1的图片),魔术师开始了:魔术师告诉观众在图片上移动k次(移动是把手指放到上下左右相邻的图片上,如果那儿有图片的话&#xff0…

java 日期只计算年月日大小_Java 计算两个日期相差多少年月日

JDK7及以前的版本,计算两个日期相差的年月日比较麻烦。JDK8新出的日期类,提供了比较简单的实现方法。/*** 计算2个日期之间相差的 相差多少年月日* 比如:2011-02-02 到 2017-03-02 相差 6年,1个月,0天*paramfromDate Y…

(DAG+固定终点的最长路和最短路)硬币问题

##题目: 有n种硬币,面值分别为v1, v2, …, vn,每种都有无限多。给定非负整数S,可以选用多少个硬币,使得面值之和恰好为S?输出硬币数目的最小值和最大值。 Input 第一行两个整数,n,S…

java虚拟机堆栈工作原理_java虚拟机工作原理?

展开全部从宏观上介绍一下Java虚拟机的e5a48de588b662616964757a686964616f31333363373731工作原理。从最初编写的Java源文件(.java文件)是如何一步步执行的,如下图所示,首先Java源文件经过前端编译器(javac或ECJ)将.java文件编译为Java字节码文件&#…

(二分)Trailing Zeroes (III)

题目&#xff1a; n的阶乘尾部有q个连续的0&#xff0c;现在给你q&#xff0c;请你算出满足条件的n&#xff0c;如果有多个n满足条件&#xff0c;输出最小的那个即可。 Input 输入一个T(T < 10000),表示样例数量。 每个样例输入一个q。(1 < q < 100,000,000) Outp…

ais文件还原到mysql_SQLSERVER 数据库可疑的解决步骤

异常关机后&#xff0c;金蝶帐套突然无法访问&#xff0c;发现数据库置疑&#xff0c;使用此方案解决&#xff1a;注意&#xff1a;在做任何修复操作之前&#xff0c;请务必备份.mdf/.ndf以及.ldf文件。一般情况下这样可以解决&#xff1a;1、将数据库设置为应急状态ALTER DATA…

(DFS)n皇后问题

Problem Description 在N*N的方格棋盘放置了N个皇后&#xff0c;使得它们不相互攻击&#xff08;即任意2个皇后不允许处在同一排&#xff0c;同一列&#xff0c;也不允许处在与棋盘边框成45角的斜线上。 你的任务是&#xff0c;对于给定的N&#xff0c;求出有多少种合法的放置…

(DFS)棋盘问题(poj1321)

题目&#xff1a; 在一个给定形状的棋盘&#xff08;形状可能是不规则的&#xff09;上面摆放棋子&#xff0c;棋子没有区别。要求摆放时任意的两个棋子不能放在棋盘中的同一行或者同一列&#xff0c;请编程求解对于给定形状和大小的棋盘&#xff0c;摆放k个棋子的所有可行的摆…

(BFS)Catch That Cow(poj3278)

题目&#xff1a; 农夫知道一头牛的位置&#xff0c;想要抓住它。农夫和牛都于数轴上 &#xff0c;农夫起始位于点 N(0<N<100000) &#xff0c;牛位于点 K(0<K<100000) 。农夫有两种移动方式&#xff1a; 1、从 X移动到 X-1或X1 &#xff0c;每次移动花费一分钟 2…

java jmx 监控_只用五分钟为系统实现基于JMX的监控

早期是作为J2EE的一部分, 因此总给人一种开发起来会很"重"的感觉, 这让不少Java程序员宁愿选择自行实现"轻量级"方案. 时至今日, 借助一些优秀的开源项目, JMX 也可以用起来很"轻".pojo-mbean 使用Annotation对MBean进行声明, 省去不少 JMX规范中…