DHT11温湿度传感器编程详解

2023-11-09

一.DHT11介绍

       DHT11数字温湿度传感器是一款含有已校准数字信号输出的温湿度复合传感器,采用专用的数字模块采集技术和温湿度传感技术,无需复杂的电路处理。传感器包括一个电阻式感湿元件和一个NTC测温元件,并与一个高性能8位单片机相连接。

       每个DHT11传感器在出厂前都对湿度进行校准。校准系数以程序的形式储存在OTP内存中,传感器内部在检测信号的处理过程中要调用这些校准系数。传感器为 4 针单排引脚封装,采用单线制串行接口,应用电路简单方便。

二.DHT11主要参数

(1)湿度分辨率为8bit,测量精度为±4%RH(25℃),最大的测量范围为20~90%RH,响应时间为6-16秒;

(2)温度分辨率为8bit,测量精度为±1℃,测量范围为0~50℃,响应时间为6~30秒。

(3)传感器工作电压范围为3~5V,工作电流为0.5~2.5mA,采样周期为1s(即每次刷新温湿度数据时间至少1s以上)。

三.DHT11电路图

      电路如图,Pin1接至VDD,Pin2接至单片机引脚,Pin3悬空,Pin4接至GND。DHT11与MCU的连接线长度短于20米时,DATA引脚需外接5K上拉电阻至VDD。

四.DHT11数据格式

       DHT11每读取一次完整的数据为40bit的数据,需要根据以下格式将湿度和温度数据解析出来。

数据格式:8bit湿度整数数据+8bit湿度小数数据 +8bi温度整数数据+8bit温度小数数据+8bit校验和;

其中,高位在前,低位在后;校验和为前4个字节的累加和的末8位。

五.DHT11操作时序

1.复位时序

        总线空闲状态为高电平,MCU引脚设置为输出状态,把引脚设置为低电平,延时19ms,然后延时30us,并将引脚设置为输入状态,等待DHT11响应;从时序看,MCU需要保持引脚低电平必须大于18ms,保证DHT11能检测到起始信号。

        根据时序进行编程代码如下:

void dht11_reset(void)
{
  // DHT11设置为输出模式
  dht11_gpio_output();
  DHT11_OUT_L;
  delay_us(19000);
  DHT11_OUT_H;
  delay_us(30);
  dht11_gpio_input();
}

        DHT11接收到MCU的开始信号后, 等待MCU开始信号结束,然后发送80us低电平响应信号。MCU发送开始信号结束后,延时等待20-40us后;然后MCU读取DHT11的响应信号(即DHT11信号置低电平80us后,置为高电平80us);确认DHT11响应信号有效后,MCU进入数据读取模式。

u16 dht11_read_data(u8 buffer[5])
{
  u16 i = 0;
  u8 checksum;
  dht11_reset();
  if (dht11_scan() == RESET)
  {
    //MCU读取DHT11响应信号
    while (dht11_scan() == RESET); 
    while (dht11_scan() == SET);
    //确认DHT11发出响应信号后,进入数据读取模式
    for (i = 0; i < 5; i++)
    {
      buffer[i] = dht11_read_byte();
    }
    while (dht11_scan() == RESET);
    dht11_gpio_output();
    DHT11_OUT_H;
    checksum = buffer[0] + buffer[1] + buffer[2] + buffer[3];
    if (checksum != buffer[4])
    {
      // checksum error
      return 1;
    }
  }
  return 0;
}

        MCU读取完5个字节数据后,确认DHT11信号是否置为低电平,如果是,此次数据读取完毕;单片机引脚切换到输出模式,并将引脚电平拉高,释放总线。

完整的数据通信时序如图:

2.读取数据时序

        MCU进入数据读取模式时,判断数据位为0或者为1是通过高电平的时间来判断。时序如图:

数据线低电平50us后,拉至高电平,高电平时间为26us-28us内,数据位为0;高电平时间为28us-70us内,数据位为1;

数据位为‘0’

数据位为‘1’

        读数据位程序:程序通过在DHT11数据线拉至高电平时,延时40us,判断此时数据位引脚的状态,如果为高电平,则高电平状态在28us-70us内,数据位为‘1’;否则为‘0’。

u16 dht11_read_bit(void)
{
  while (DHT11_IN == RESET);
  delay_us(40);
  if (DHT11_IN == SET)
  {
    while (DHT11_IN == SET);
    return 1;
  }
  else
  {
    return 0;
  }
}

如需资料可关注公众号-单片机实例设计,发送“DHT11”获取。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

DHT11温湿度传感器编程详解 的相关文章

随机推荐

  • 蓝桥杯嵌入式CT117E-M4学习笔记08-串口通信实验

    文章目录 前言 一 实验原理 二 配置步骤 三 串口发送 1 直接使用HAL USART Transmit发送 2 使用重定向prtinf函数发送 四 串口接收 总结 前言 本节我们学习开发板的串口通信 一 实验原理 1 串口通信原理 详见
  • 浏览器的渲染机制、提升页面性能、错误监控上报

    js运行机制 微任务队列 事件循环 单线程 错误监控 CSRF防范 css盒模型 Dom事件 原型链
  • 接口测试工具-apipost

    apiost Postman Swagger Mock 功能特色 实现多人实时协作 接口自动化测试 选择接口 组成流程 执行流程 基于接口创建在线文档可分享 官网 Apipost API 文档 调试 Mock 测试一体化协作平台 API列表
  • 02.07_两个链表相交

    给你两个单链表的头节点 headA 和 headB 请你找出并返回两个单链表相交的起始节点 如果两个链表没有交点 返回 null 解法一 如果两个链表有相交 那么从后面看一定是相同的 所以只需要把长的移动到和短的链表一样的长度开始遍历即可
  • 低成本副业:开发小程序商城攻略

    随着互联网的普及和电子商务的兴起 越来越多的人选择做点副业 其中开发小程序商城是一个不错的选择 相比传统的实体店 小程序商城的成本更低 而且门槛更低 可以让更多的人参与到副业中来 那么 如何开发自己的小程序商城呢 下面为大家介绍步骤和技巧
  • STM32中遇到的问题--关于串口的一些常见问题

    在单片机的开发过程中 最常用的外设就是串口了 是用来进行bug纠错 log输出的常用工具 也是用来与外部通讯的常见协议之一 但是在使用串口的过程中难免会遇到一些问题 下面就我在工作遇到的一些问题做了一些记录 与大家分享 其实也是为了自己在以
  • [云原生专题-39]:K8S - 核心概念 - 存储抽象- pod配置文件的挂载ConfigMap

    作者主页 文火冰糖的硅基工坊 文火冰糖 王文兵 的博客 文火冰糖的硅基工坊 CSDN博客 本文网址 https blog csdn net HiWangWenBing article details 122856681 目录 前言 第1章
  • 安卓逆向入门指南:应用分析与反编译

    安卓逆向入门指南 应用分析与反编译 概述 简要介绍安卓逆向工程的基本概念和背景 解释逆向工程的目的和重要性 以及在安全审计和应用研究中的应用 应用分析 安卓应用文件结构的解析 介绍APK文件的结构 包括AndroidManifest xml
  • c#中new 后面大括号

    C new一个对象的时候 后面的参数不是用小括号吗 下面的大括号是怎么回事 不是数据为什么会用大括号 BarcodeWriter barcodeWriter new BarcodeWriter Format ZXing BarcodeFor
  • jmap、jstat、jinfo、jstack命令详解

    jmap jmap histo pid gt log txt 此命令可以用来查看内存信息 实例个数以及占用内存大小 num 序号 instances 实例数量 bytes 占用空间大小 class name 类名称 C is a char
  • Windows中.exe程序的启动过程和C/C++运行时库<转载>

    很是受益 Windows中 exe程序的启动过程和C C 运行时库 lt 转载 gt Windows系统中 exe后缀的文件一般可以双击运行 编程时 编译出来的最终结果一般也表现为一个exe程序和其他的为程序执行提供支持的dll 我们双击一
  • Unity3d-简单AR游戏

    Unity3d 简单AR游戏 一 图片识别与建模 Vufria模块的导入 首先是安装Vuforia 模块 2017版本后的可以直接使用Unity Hub安装 安装完成后可以直接在软件中使用 然后在菜单目录的GameObject gt Vuf
  • 利用docx4j word转pdf

    依赖
  • 不能导入当前目录下的py模块,不能导入自己写的包

    遇到一个很奇怪的问题 在jupyter里面 明明这个包就在当前目录下就是不能倒入 后来 发现os getcwd 返回的也不是当前文件所在目录 真是奇哉怪也 然后我在终端cd进去我要运行代码的目录 然后在 jupoyter notebook
  • 【计算机考研】从二本到浙大

    报名志愿 浙大 计算机科学与技术学院 软件工程专业 初试成绩 分数不高 大佬轻喷 以下学习方法仅供参考 小tip 放在前头 1 不要照搬别人的学习方案 马克思主义要中国化 学习也要个人化 学习是很私人的事情 一定要找到最适合自己的学习作息和
  • 关于IDEA中tomcat启动控制台乱码(server Tomcat Localhost Log Tomcat Catalina Log乱码)问题

    之前在网上查了好多 但好多都是乱改一通 没有实际效果 经过自己的几次试验后 终于找到了原因 希望可以帮助大家解决问题 少走些弯路 具体解释如下 在这之前说下 tomcat安装目录中 conf文件夹中的logging properties文件
  • linux vim配置

    vimrc config vim 配置 没有vimrc就之间创建新的 vi vimrc set nu 设置显示行号 set tabstop 4 shiftwidth 4 softtabstop 4 tab 等于四个空格 set expand
  • org.dom4j.DocumentException: null Nested exception: null解决

    org dom4j DocumentException null Nested exception null at org dom4j io SAXReader read SAXReader java 484 at org dom4j io
  • 【SpringCloud实战开发总结】

    Vue开发总结 1 Vue 开启Watch监听 2 on blur 3 disabled 4 InputNumber标签中的 max和 min 5 Select标签用于模糊查询 6 强制渲染的三种方法 7 增加下拉框宽度 8 vue前端校验
  • DHT11温湿度传感器编程详解

    一 DHT11介绍 DHT11数字温湿度传感器是一款含有已校准数字信号输出的温湿度复合传感器 采用专用的数字模块采集技术和温湿度传感技术 无需复杂的电路处理 传感器包括一个电阻式感湿元件和一个NTC测温元件 并与一个高性能8位单片机相连接