【51单片机快速入门指南】6.4:DHT11、DHT22单总线温湿度传感器

目录

  • 硬知识
    • DHT11
    • DHT22
    • 通信协议
      • 读取步骤
    • 数据解读
      • DHT11
      • DHT22
  • 示例程序
    • DHT11_22.c
    • DHT11_22.h
  • 测试程序
    • main.c
    • 实验现象
      • DHT11
      • DHT22

STC89C52
Windows 10 20H2
Proteus 8 Frofessional v8.9 SP2
Keil uVision V5.29.0.0
PK51 Prof.Developers Kit Version:9.60.0.0


硬知识

摘自《温湿度模块 DHT11产品手册》、《数字温湿度传感器 DHT22》

  1. 典型应用电路中建议连接线长度短于5m时用4.7K上拉电阻,大于5m时根据实际情况降低上拉电阻的阻值。
  2. 使用3.3V电压供电时连接线尽量短,接线过长会导致传感器供电不足,造成测量偏差。
  3. 每次读出的温湿度数值是上一次测量的结果,欲获取实时数据,需连续读取2次,但不建议连续多次读取传感器,每次读取传感器间隔大于2秒即可获得准确的数据。
  4. 电源部分如有波动,会影响到温度。如使用开关电源,温度就会跳动。传感器上电后,要等待1s以越过不稳定状态,在此期间无需发送任何指令。电源引脚(VDD,GND)之间可增加一个100nF的电容,用以去耦滤波。

       引脚说明

  1. VDD:供电3.3~5.5V DC
  2. DATA:串行数据,单总线
  3. NC:空脚
  4. GND:接地,电源负极

DHT11

       DHT11数字温湿度传感器是一款含有已校准数字信号输出的温湿度复合传感器。它应用专用的数字模块采集技术和温湿度传感技术,确保产品具有极高的可靠性与卓越的长期稳定性。传感器包括一个电容式感湿元件和一个NTC测温元件,并与一个高性能8位单片机相连接。
在这里插入图片描述
在这里插入图片描述

DHT22

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

通信协议

       器件采用简化的单总线通信。单总线即只有一根数据线,系统中的数据交换、控制均由单总线完成。设备(主机或从机)通过一个漏极开路或三态端口连至该数据线,以允许设备在不发送数据时能够释放总线,而让其它设备使用总线;单总线通常要求外接一个约4.7kΩ的上拉电阻,这样,当总线闲置时,其状态为高电平。由于它们是主从结构,只有主机呼叫从机时,从机才能应答,因此主机访问器件都必须严格遵循单总线序列,如果出现序列混乱,器件将不响应主机。
       DATA用于微处理器与传感器之间的通讯和同步,采用单总线数据格式,一次传送40位数据,高位先出。
数据格式:
8bit湿度高位数据+8bit湿度低位数据+8bit温度高位数据+8bit温度低位数据+8bit校验位。
校验位数据定义:
       校验位等于8bit湿度高位数据+8bit湿度低位数据+8bit温度高位数据+8bit温度低位数据所得结果的末8位
在这里插入图片描述
数据时序图
       用户主机(MCU)发送一次开始信号后,传感器从低功耗模式转换到高速模式,待主机开始信号结束后,传感器发送响应信号,送出40bit的数据,并触发一次信采集。
在这里插入图片描述

读取步骤

  1. 上电后(上电后要等待1S以越过不稳定状态,在此期间不能发送任何指令),测试环境温湿度数据,并记录数据,同时传感器的DATA数据线由上拉电阻拉高一直保持高电平;此时传感器的DATA引脚处于输入状态,时刻检测外部信号。
  2. 微处理器的I/O设置为输出同时输出低电平,且低电平保持时间不能小于18ms(最大不得超过30ms),然后微处理器的I/O设置为输入状态,由于上拉电阻,微处理器的I/O即传感器的DATA数据线也随之变高,等待传感器作出回答信号。
    在这里插入图片描述
  3. 传感器的DATA引脚检测到外部信号有低电平时,等待外部信号低电平结束,延迟后传感器的DATA引脚处于输出状态,输出83微秒的低电平作为应答信号,紧接着输出87微秒的高电平通知外设准备接收数据,微处理器的I/O此时处于输入状态,检测到I/O有低电平(传感器回应信号)后,等待87微秒的高电平后的数据接收
    在这里插入图片描述
  4. 由传感器的DATA引脚输出40位数据,微处理器根据I/O电平的变化接收40位数据,位数据"0”的格式为:54微秒的低电平和23-27微秒的高电平,位数据"1"的格式为:54微秒的低电平加68-74微秒的高电平。
    在这里插入图片描述
  5. 结束信号:传感器的DATA引脚输出40位数据后,继续输出低电平54微秒后转为输入状态,由于上拉电阻随之变为高电平。但传感器内部重测环境温湿度数据,并记录数据,等待外部信号的到来。
    在这里插入图片描述

数据解读

DHT11

在这里插入图片描述

DHT22

在这里插入图片描述

示例程序

DHT11_22.c

#include "DHT11_22.h"void delay_ms(int i);
void delay_10us(uint8_t n);DHT_data DHT_Data = {0};void DHT_Read(DHT_data *dht_data)
{uint8_t DHT_timeout_count, i, j;uint8_t data_temp[6];uint8_t DHT_Byte;//主机拉低18~30msDHT_IO_L();delay_ms(20);DHT_IO_H();//总线由上拉电阻拉高 主机延时50usdelay_10us(5);//判断从机是否有低电平响应信号 如不响应则跳出,响应则向下运行if(!DHT_IO_read())		 {//判断从机是否发出 80us 的低电平响应信号是否结束DHT_timeout_count = 0;while(!DHT_IO_read()){delay_10us(1);if(++DHT_timeout_count >= 10)return;}//判断从机是否发出 80us 的高电平,如发出则进入数据接收状态DHT_timeout_count = 0;while(DHT_IO_read()){delay_10us(1);if(++DHT_timeout_count >= 10)return;}for(i = 0; i < 5; ++i){for(j = 0, DHT_Byte = 0; j < 8; ++j){DHT_Byte <<= 1;DHT_timeout_count = 0;while(!DHT_IO_read()){delay_10us(1);if(++DHT_timeout_count >= 10){DHT_Byte = 0;break;}	}delay_10us(3);	//跳过数据0的时间段,只检测数据为1时的电平if(DHT_IO_read()){++DHT_Byte;while(DHT_IO_read()){delay_10us(1);if(++DHT_timeout_count >= 10){DHT_Byte = 0;break;}	}}}data_temp[i] = DHT_Byte;}for(i = 0, data_temp[5] = 0; i < 4; ++i)data_temp[5] += data_temp[i];if(data_temp[5] == data_temp[4])	//数据解读{#ifdef DHT11dht_data->RH = data_temp[0] + (data_temp[1] & 0x0f)/10.;dht_data->Temp = data_temp[2] + (data_temp[3] & 0x0f)/10.;if(data_temp[3] & 0x80)dht_data->Temp *= -1;#endif#ifdef DHT22dht_data->RH = ((int16_t)data_temp[0] << 8 | data_temp[1])/10.;dht_data->Temp = ((int16_t)(data_temp[2] & 0x7f) << 8 | data_temp[3])/10.;if(data_temp[2] & 0x80)dht_data->Temp *= -1;#endif}}
}

DHT11_22.h

#ifndef DHT11_22_H
#define DHT11_22_H#include <STC89C5xRC.H>
#include <stdint.h>#define DHT11
//#define DHT22typedef struct 
{float RH;float Temp;
} DHT_data;#define DHT_IO_H() {P00=1;}
#define DHT_IO_L() {P00=0;}
#define DHT_IO_read() P00extern DHT_data DHT_Data;void DHT_Read(char *Str);#endif

测试程序

       stdint.h见【51单片机快速入门指南】1:基础知识和工程创建
       串口部分见【51单片机快速入门指南】3.3:USART 串口通信
       定时器的介绍和配置源码见【51单片机快速入门指南】3.2:定时器/计数器

       在头文件中选择使用的型号:
在这里插入图片描述

main.c

#include <STC89C5xRC.H>
#include "intrins.h"
#include "stdint.h"
#include "USART.h"
#include "TIM.h"
#include "DHT11_22.h"void Delay1ms()		//@22.1184MHz
{unsigned char i, j;_nop_();i = 4;j = 146;do{while (--j);} while (--i);
}void delay_ms(int i)
{while(i--)Delay1ms();
}uint8_t TIM0_Counter = 0;
void delay_10us(uint8_t n)
{TL0 = TH0;TIM0_Counter = n;while(TIM0_Counter > 1);
}void main(void)
{USART_Init(USART_MODE_1, Rx_ENABLE, STC_USART_Priority_Lowest, 22118400, 115200, DOUBLE_BAUD_ENABLE, USART_TIMER_1);Timer_Init(TIMER_0, TIMER_MODE_2, GATE_DISABLE, CLK_Internal, 22118400, 10, STC_TIM_Priority_Highest);	//定时器配置为10us中断一次,8位重装载delay_ms(1500);while(1){	DHT_Read(&DHT_Data);printf("%f %f\r\n", DHT_Data.RH, DHT_Data.Temp);delay_ms(2000);}
}

实验现象

DHT11

在这里插入图片描述

DHT22

在这里插入图片描述

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

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

相关文章

【电路补习笔记】1、电阻的参数与选型

目录参数精度温度系数功率贴片电阻色环电阻传感器电阻老师的主页&#xff1a;唐老师讲电赛 视频地址&#xff1a;唐老师讲电赛之唐老师讲电子器件&#xff08;1&#xff09;电阻参数与选型 电阻按封装分为直插、贴片与印刷电阻&#xff08;有些电阻直接印刷在PCB上&#xff09;…

redis本地安装

redis在本地的安装及使用1、首先下载redis安装包&#xff0c;下载地址如下 http://pecl.php.net/package/redis/2.2.7/windows输入phpinfo()查看php版本进行相应的下载&#xff0c;注意版本2、下载完成后将php_redis.dll放到ext下&#xff0c;在php.ini中添加extensionphp_re…

【Net】测试网络、查看IP

http://www.speedtest.cn/ 转载于:https://www.cnblogs.com/flydkPocketMagic/p/7380400.html

【电路补习笔记】2、电容的参数与选型

目录分类无极性电容有极性电容电解电容钽电容参数精度温度系数材质耐压温度范围ESRESL电容并联高频特性焊盘&#xff08;PAD&#xff09;和旁路电容的放置老师的主页&#xff1a;唐老师讲电赛 视频地址&#xff1a;唐老师讲电赛之唐老师讲电子器件&#xff08;1&#xff09;电容…

1005:I Think I Need a Houseboat-poj

1005:I Think I Need a Houseboat 总时间限制: 1000ms内存限制: 65536kB描述Fred Mapper is considering purchasing some land in Louisiana to build his house on. In the process of investigating the land, he learned that the state of Louisiana is actually shrinkin…

【电路补习笔记】3、电感的参数与选型

目录分类电感的模型参数精度直流电阻&#xff08;DCR&#xff09;通流能力&#xff08;Irms&#xff09;自谐振频率&#xff08;SRF&#xff09;饱和电流&#xff08;Isat&#xff09;标号老师的主页&#xff1a;唐老师讲电赛 视频地址&#xff1a;唐老师讲电赛之唐老师讲电子器…

八排序算法

概述 排序有内部排序和外部排序。内部排序是数据记录在内存中进行排序&#xff0c;而外部排序是因排序的数据非常大&#xff0c;一次不能容纳所有的排序记录。在排序过程中须要訪问外存。 我们这里说说八大排序就是内部排序。 当n较大。则应採用时间复杂度为O(nlog2n)的排序方法…

【电路补习笔记】4、二极管的参数与选型

目录常用二极管二极管的结构与特性结构参数最大整流电流IFI_FIF​最大反向工作电压URU_RUR​反向电流IRI_RIR​最高工作频率fMf_MfM​应用常见应用单相整流电路单相半波整流电路单相桥式整流电路稳压管稳压管的伏安特性参数稳压值UZU_ZUZ​稳定电流IZI_ZIZ​额定功耗PZP_ZPZ​动…

@font-face 使用过程

格式&#xff1a; TureTpe(.ttf)格式&#xff1a; .ttf字体是Windows和Mac的最常见的字体&#xff0c;是一种RAW格式&#xff0c;因此他不为网站优化,支持这种字体的浏览器有【IE9,Firefox3.5,Chrome4,Safari3,Opera10,iOS Mobile Safari4.2】 OpenType(.otf)格式&#xff1a;…

【电路补习笔记】5、三极管的参数与选型

目录常用的三极管型号结构作用放大三极管的三种放大组态的比较共射极放大电路单管共射放大电路&#xff08;受温度影响大&#xff09;的动态特性单管共射分压偏置放大电路的动态特性共集电极放大电路使用共基极放大电路多级放大电路多级放大电路的耦合多级放大电路的动态分析开…

FFT 专题讲解

FFT是什么&#xff1f; FFT是快速傅里叶变换(fast Fourier transform)的简称。在ACM领域主要是用来快速求解多项式乘法的算法&#xff0c; 在信号领域也有很大用途 基础知识 卷积 举个例子&#xff0c;给你两个向量 \(a (a_0, a_1, a_2), b(b_0, b_1, b_2)\) a和b的卷积就是$ (…

PureMvc学习笔记

2019独角兽企业重金招聘Python工程师标准>>> PureMvc学习笔记&#xff1a; Mediator ->对应View层&#xff0c;内部绑定View对象&#xff0c;由 Mediator 对象来操作具体的视图组件。&#xff08;它的作用还包括&#xff1a;添加事件监听器&#xff0c;发送或接收…

【电路补习笔记】6、MOS管的参数与选型

目录符号寄生二极管&#xff08;体二极管&#xff09;的方向连接方法作用导通问题NMOSPMOS开关作用隔离作用引脚分辨常见型号NMOS的参数VDSS最大漏-源电压VGS最大栅源电压ID-连续漏电流VGS&#xff08;th&#xff09;RDS&#xff08;on&#xff09;导通电阻Ciss&#xff1a;输入…

servlet核心API的UML图

转载于:https://www.cnblogs.com/suncoolcat/p/3339613.html

8.19noip模拟题

2017 8.19 NOIP模拟赛 by coolyangzc 共3道题目&#xff0c;时间3小时 题目名 高级打字机 不等数列 经营与开发 源文件 type.cpp/c/pas num.cpp/c/pas exploit.cpp/c/pas 输入文件 type.in num.in exploit.in 输出文件 type.out num.out exploit.out 时间限制 …

【电路补习笔记】7、磁珠的工作原理、磁珠的分类、磁珠的模型、磁珠的参数、磁珠与电感的区别、磁珠的应用、磁珠的误区

目录简介铁耗磁滞损耗磁珠归类应用对比参数用途电源滤波低通滤波器的设计符号关于单点接地老师的主页&#xff1a;唐老师讲电赛 视频地址&#xff1a;磁珠的工作原理&#xff0c;磁珠的分类&#xff0c;磁珠的模型&#xff0c;磁珠的参数磁珠与电感的区别&#xff0c;磁珠的应用…

利用python数据分析panda学习笔记之Series

1 Series a&#xff1a;类似一维数组的对象&#xff0c;每一个数据与之相关的数据标签组成 b:生成的左边为索引&#xff0c;不指定则默认从0开始。 1 from pandas import Series,DataFrame 2 import pandas as pd 3 #series 一组数据与相关得数据标签组成 4 objSeries([4,7,-5…

12864 OLED屏显示日历

目录calendar.c测试程序效果普中51-单核-A2 STC89C52 Keil uVision V5.29.0.0 PK51 Prof.Developers Kit Version:9.60.0.0 stdint.h见【51单片机快速入门指南】1&#xff1a;基础知识和工程创建 I2C版OLED驱动程序见【51单片机快速入门指南】4.2&#xff1a; SSD1306…

【联盛德W806上手笔记】二、GPIO

目录GPIO 控制器库函数函数参数宏极限翻转速度寄存器操作库函数操作测试main.cwm_it.cWindows 10 20H2 HLK-W806-V1.0-KIT WM_SDK_W806_v0.6.0 GPIO 控制器 摘自《W806 芯片设计指导书 V1.0》 可配置的 GPIO、软件控制的输入输出、硬件控制的输入输出、可配置中断方式。…

【联盛德W806上手笔记】三、MCU系统与时钟结构

目录总线结构AHB-1 总线AHB-2 总线时钟与复位主要特性时钟结构功能描述时钟门控时钟自适应关断功能复位时钟分频寄存器描述寄存器列表软件时钟门控使能寄存器软件时钟掩码寄存器软件复位控制寄存器时钟分频配置寄存器调试控制寄存器I2S 时钟控制寄存器复位状态寄存器调试功能控…