当前位置: 首页 > news >正文

DHT11温湿度传感器

接口定义

在这里插入图片描述

传感器通信

DHT11采用简化的单总线通信。单总线仅有一根数据线(SDA),通信所进行的数据交换、挂在单总线上的所有设备之间进行信号交换与传递均在一条通讯线上实现。
单总线上必须有一个上拉电阻(Rp)以实现单总线闲置时,其处于高电平状态。
在单总线中,微处理器与传感器是主从结构,只有微处理器呼叫传感器时,传感器才会应答。
微处理器访问传感器必须严格遵循单总线时序要求,否则传感器将不响应主机。

  • 使用 3.3V 电压给 DHT11 供电时,建议微处理器与 DHT11 连接线长度不得大于 100cm。否则线路压降会导致对 DHT11 的供电不足,造成测量偏差。
  • 与DHT11通信最小间隔时间为2s,若小于2s可能导致温湿度不准或通信不成功等情况。因此传感器上电后应等待2s再去读取传感器,以避免传感器处于不稳定状态。
  • 每次通信结束DHT11会进行一次温湿度采集然后进入待机状态,因此每次通信读出的温湿度数值位上一次通信时DHT11采集的温湿度数据,故建议使用时隔2s连续两次读取DHT11传感器,以获取当前测量环境实时温度。

单总线传送数据定义

SDA引脚所在线路用于微处理器与DHT11之间的通讯和同步,采用单总线数据格式,一次传送40bits长度数据,高位先传送。

在这里插入图片描述

  • 起始信号:微处理器将单总线SDA拉低一段时间(18~30ms),通知传感器准备数据。
  • 响应信号:传感器将单总线SDA拉低83us,再接高87us以响应主机的起始信号。
  • 湿度信息:湿度高8位为湿度整数部分数据,占用一个字节,湿度低8位为湿度小数部分数据(占用一个字节)。
  • 温度信息:温度高 8 位为温度整数部分数据(占用 1 个字节),温度低 8 位为温度符号及小数部分数据(占用 1 个字节,含最高位 Bit7 符号位,Bit7 为 1 则表示负温度)
  • 校验数据:校验字节=湿度高位+湿度地位+温度高位+温度低位

示例
在这里插入图片描述
校验码:34H + 01H + 18H + 8CH = D9H
将计算得到的校验码D9H与接收到的校验码进行比较,如果相同则表示接收到的湿度信息和温度信息数据正确,否则应舍弃本次通信数据。

湿度与温度的数值可以根据数据结构转换得出。如,湿度高8位(整数)为34H,低8位(小数)为01H,将两部分数值转换为十进制后可以得出52.1,即湿度为52.1%RH。同理可以得出图7中的温度为-24.12℃。此处温度为负值时因为温度数据的低8位的最高位Bit7为1;当最高位Bit7为0时,数值为正值。

单总线通信时序

在这里插入图片描述
每次通信结束DHT11会进行一次温湿度采集然后进入待机状态,因此每次通信读出的温湿度数值为上一次通信时DHT11采集的温湿度数据,故建议隔2s连续2次读取DHT11,以获得当前测量环境实时数据。

外设读取流程

在这里插入图片描述

  1. 在DHT11上电后,需要等待至少2s才完成传感器的初始化。

  2. 传感器接入单总线的微处理器I/O应配置为开漏模式并输出高电平,以保证单总线处于空闲状态(高电平)。

  3. DHT11传感器初始化后执行采样温湿度数据任务结束并自动转入休眠模式。

  4. 此后,DHT11将监测SDA引脚上单总线电平状态变化,以判断是否需要通信。

  5. 发送起始信号是通过微处理器的I/O输出电平,且低电平保持时间不能小于18ms(最大不得超过30ms),然后微处理器的I/O切换为输入(上拉)模式,实现释放单总线。

  6. DHT11等待主机释放单总线后,DHT11控制单总线,输出80us的低电平作为应答信号,随后输出87µs的高电平通知微处理器准备接收数据,完成响应信号传输从而实现DHT11对微处理器的应答。
    在这里插入图片描述

  7. DHT11完成上述应答过程,随后通过SDA引脚控制单总线。

  8. DHT11将从SDA引脚输出40bits长度数据信号至单总线,微处理器通过单总线可接收到40bits长度的数据。

  9. 数据中每个数据位的传输格式:数据位为“0”时,DHT11先输出5058µs的低电平随后输出2327µs的高电平;数据位为“1”时,DHT11首先输出5058µs的低电平随后输出6874µs的高电平。
    在这里插入图片描述

  10. DHT11完成输出40bits长度数据后将继续输出50~85us的低电平然后转为输入状态,不再控制单总线,实现对单总线的释放,本次通信结束。

  11. 通信结束后,DHT11会立即进行一次采样温湿度数据随后自动进入休眠状态。DHT11只有再次收到微处理器发出的起始信号后被唤醒进入单总线通信模式。

  12. 与此同时,微处理器将接收数据按照5.2节方式进行数据校验,如果校验正确则对数据解析得到温湿度值,否则舍弃本次通信接收的数据。

  13. 微处理器本次通信结束后等待至少2s的间隔周期后,可以再次发送起始信号读取DHT11。

相关文章:

DHT11温湿度传感器

接口定义 传感器通信 DHT11采用简化的单总线通信。单总线仅有一根数据线(SDA),通信所进行的数据交换、挂在单总线上的所有设备之间进行信号交换与传递均在一条通讯线上实现。 单总线上必须有一个上拉电阻(Rp)以实现单…...

RestTemplate超简单上手

目录 1.什么是RestTemplate? 2.RestTemplate的使用 2.1spring环境下 注意1:RestTemplate中发送请求execute()和exchange()方法的区别 execute()方式 exchange()方式 二者的区别 注意2:进阶配置——底层HTTP客户端 2.2非spring环境下 1.什么是R…...

监控系统设计原则及实现目标

1.1.1.1 1 .完善的设计理念: 包括符合国际发展潮流的特性化设计,完整的安防监控及围墙周界报警系统 的布线、设备安装、调试、测试、验收的“交钥匙”工程管理制度,以及符合标 准的质量控制体系。 1.1.1.2 设计原则&#xf…...

VulnHub项目:MONEYHEIST: CATCH US IF YOU CAN

靶机名称: MONEYHEIST: CATCH US IF YOU CAN 地址:MoneyHeist: Catch Us If You Can ~ VulnHub 这个系列是一部剧改编,还是挺好看的,大家有兴趣可以去看看! 废话不多说,直接上图开始! 渗透…...

对象存储OSS简介,一分钟了解对象存储OSS

对象存储(Object Storage)是一种新兴的数据存储方式,与传统的文件系统和块存储不同,对象存储以对象为基本单位进行数据管理和存储。在对象存储中,每个对象都有唯一的标识符,并包含了数据本身以及与之相关的…...

SpringCloud_微服务基础day2(Eureka简介与依赖导入,服务注册与发现)

p6:Eureka简介与依赖导入 前面我们了解了如何对单体应用进行拆分,并且也学习了如何进行服务之间的相互调用,但是存在一个问题,就是虽然服务拆分完成,但是没有一个比较合理的管理机制,如果单纯只是这样编写,…...

#tmux# #终端# 常用工具tmux

tmux tmux是一个终端复用工具,允许用户在一个终端会话中同时管理多个终端窗口,提高了终端使用效率,尤其在服务器上进行远程管理时更加实用。在tmux中,可以创建多个终端窗口和窗格,并在这些窗口和窗格之间自由切换&…...

后端服务架构高性能设计之道

“N 高 N 可”,高性能、高并发、高可用、高可靠、可扩展、可维护、可用性等是后台开发耳熟能详的词了,它们中有些词在大部分情况下表达相近意思。本序列文章旨在探讨和总结后台架构设计中常用的技术和方法,并归纳成一套方法论。 前言 本文主…...

Python中的Time和DateTime

Python在处理与时间相关的操作时有两个重要模块:time和datetime。在本文中,我们介绍这两个模块并为每个场景提供带有代码和输出的说明性示例。 time模块主要用于处理时间相关的操作,例如获取当前时间、时间的计算和格式化等。它提供了一些函数…...

UNIX网络编程卷一 学习笔记 第十九章 密钥管理套接字

随着IP安全体系结构(IPsec)的引入,密钥加密和认证密钥的管理越来越需要一套标准机制。RFC 2367介绍了一个通用密钥管理API,可用于IPsec和其他网络安全服务,该API创建了一个新协议族,即PF_KEY域,…...

excel如何实现识别文本在对应单元格填上数据?

要实现 Excel 识别文本在对应单元格填上数据,有以下两种方法: 方法一:使用 VLOOKUP 函数 1. 在 Excel 工作表中,输入一个表格,列名为对应的文本,行名为不同条目。 2. 准备输入数据,在一个新的…...

Groovy 基本语法

一、简介 类型转换:当需要时,类型之间会自动发生类型转换: 字符串(String)、基本类型(如int) 和类型的包装类(如Integer) 类说明:如果在一个groovy 文件中没有任何类定义,它将被当做script 来处理,也就意味着这个文件将…...

系统学习IT技术的方法与实践

系统学习IT技术的方法与实践 作为一名技术人员,在学习新的IT技术时,采取系统性的学习方法是至关重要的。这样可以帮助我们更好地理解和掌握技术,并提高学习效率。下面我将分享一些我个人在系统学习IT技术方面的方法和实践。 1. 设定明确的学…...

聊聊TCP协议的粘包、拆包以及http是如何解决的?

目录 一、粘包与拆包是什么? 二、粘包与拆包为什么发生? 三、遇到粘包、拆包怎么办? 解决方案1:固定数据大小 解决方案2:自定义请求协议 解决方案3:特殊字符结尾 四、HTTP如何解决粘包问题的&#xf…...

一百二十、Kettle——用kettle把Hive数据同步到ClickHouse

一、目标 用kettle把hive数据同步到clickhouse,简单运行、直接全量导入数据 工具版本:kettle:8.2 Hive:3.1.2 ClickHouse21.9.5.16 二、前提 (一)kettle连上hive (二)kettle连上cli…...

PyTorch 提示和技巧:从张量到神经网络

张量和梯度 我们将深入探讨使用 PyTorch 构建自己的神经网络必须了解的 2 个基本概念:张量和梯度。 张量 张量是 PyTorch 中的中央数据单元。它们是类似于数组的数据结构,在功能和属性方面与 Numpy 数组非常相似。它们之间最重要的区别是 PyTorch 张量…...

第五期:字符串的一些有意思的操作

文章目录 1. 替换空格2. 字符串的左旋转3. 答案代码3.1 替换空格3.2 字符串的左旋转 PS:每道题解题方法不唯一,欢迎讨论!每道题后都有解析帮助你分析做题,答案在最下面,关注博主每天持续更新。 1. 替换空格 题目描述 请…...

使用Anaconda3结合vscode来实现django项目的建立(绝好的介绍)20230608

问题:如何使用Anaconda3结合vscode来实现django项目的建立? 回答: 知识背景 Anaconda3的安装包默认会安装最新版本的Python解释器。如果您想在安装时指定Python解释器的版本,您需要下载对应版本的Anaconda3。例如,如果您想使用Python 3.7&…...

【软件测试】软件测试的基本概念和开发模型

1. 前言 在进行软件测试的学习之前,我们要了解软件测试一些基本概念. 这些基本概念将帮助我们更加明确工作的目标以及软件测试到底要做什么. 2. 软件测试的基本概念 软件测试的基本概念有3个,分别是需求,测试用例和BUG. 2.1 需求 这里的需求还可以分为 用户需求和软件需求,用户…...

接口测试 —— 接口测试定义

1、接口测试概念 (重点) 接口测试是测试系统组件间接口的一种测试,它界于单元测试与系统测试中间。 接口测试主要用于检测外部系统与系统之间以及内部各个子系统之间的交互点。 测试的重点是要检查数据的交换,传递和控制管理过…...

Vim 调用外部命令学习笔记

Vim 外部命令集成完全指南 文章目录 Vim 外部命令集成完全指南核心概念理解命令语法解析语法对比 常用外部命令详解文本排序与去重文本筛选与搜索高级 grep 搜索技巧文本替换与编辑字符处理高级文本处理编程语言处理其他实用命令 范围操作示例指定行范围处理复合命令示例 实用技…...

在软件开发中正确使用MySQL日期时间类型的深度解析

在日常软件开发场景中,时间信息的存储是底层且核心的需求。从金融交易的精确记账时间、用户操作的行为日志,到供应链系统的物流节点时间戳,时间数据的准确性直接决定业务逻辑的可靠性。MySQL作为主流关系型数据库,其日期时间类型的…...

React 第五十五节 Router 中 useAsyncError的使用详解

前言 useAsyncError 是 React Router v6.4 引入的一个钩子,用于处理异步操作(如数据加载)中的错误。下面我将详细解释其用途并提供代码示例。 一、useAsyncError 用途 处理异步错误:捕获在 loader 或 action 中发生的异步错误替…...

【力扣数据库知识手册笔记】索引

索引 索引的优缺点 优点1. 通过创建唯一性索引,可以保证数据库表中每一行数据的唯一性。2. 可以加快数据的检索速度(创建索引的主要原因)。3. 可以加速表和表之间的连接,实现数据的参考完整性。4. 可以在查询过程中,…...

Spring Boot+Neo4j知识图谱实战:3步搭建智能关系网络!

一、引言 在数据驱动的背景下,知识图谱凭借其高效的信息组织能力,正逐步成为各行业应用的关键技术。本文聚焦 Spring Boot与Neo4j图数据库的技术结合,探讨知识图谱开发的实现细节,帮助读者掌握该技术栈在实际项目中的落地方法。 …...

3403. 从盒子中找出字典序最大的字符串 I

3403. 从盒子中找出字典序最大的字符串 I 题目链接:3403. 从盒子中找出字典序最大的字符串 I 代码如下: class Solution { public:string answerString(string word, int numFriends) {if (numFriends 1) {return word;}string res;for (int i 0;i &…...

C++ Visual Studio 2017厂商给的源码没有.sln文件 易兆微芯片下载工具加开机动画下载。

1.先用Visual Studio 2017打开Yichip YC31xx loader.vcxproj,再用Visual Studio 2022打开。再保侟就有.sln文件了。 易兆微芯片下载工具加开机动画下载 ExtraDownloadFile1Info.\logo.bin|0|0|10D2000|0 MFC应用兼容CMD 在BOOL CYichipYC31xxloaderDlg::OnIni…...

Rapidio门铃消息FIFO溢出机制

关于RapidIO门铃消息FIFO的溢出机制及其与中断抖动的关系,以下是深入解析: 门铃FIFO溢出的本质 在RapidIO系统中,门铃消息FIFO是硬件控制器内部的缓冲区,用于临时存储接收到的门铃消息(Doorbell Message)。…...

基于matlab策略迭代和值迭代法的动态规划

经典的基于策略迭代和值迭代法的动态规划matlab代码,实现机器人的最优运输 Dynamic-Programming-master/Environment.pdf , 104724 Dynamic-Programming-master/README.md , 506 Dynamic-Programming-master/generalizedPolicyIteration.m , 1970 Dynamic-Programm…...

LangChain知识库管理后端接口:数据库操作详解—— 构建本地知识库系统的基础《二》

这段 Python 代码是一个完整的 知识库数据库操作模块,用于对本地知识库系统中的知识库进行增删改查(CRUD)操作。它基于 SQLAlchemy ORM 框架 和一个自定义的装饰器 with_session 实现数据库会话管理。 📘 一、整体功能概述 该模块…...