DHT11 温湿度传感器

目录

1.DHT11 温湿度传感器概述

2.检测DHT11温湿度传感器模块是否存在

3.通过编写代码读取温湿度数据​编辑

4.将读取到的温湿度数据通过串口上传


1.DHT11 温湿度传感器概述

DHT11数字温湿度传感器是一款含有已校准数字信号输出的温湿度复合传感器,应用领域:暖通 空调;汽车;消费品;气象站;湿度调节器;除湿器;家电;医疗;自动控制

特点:

  • 相对湿度和温度测量
  • 全部校准,数字输出
  • 长期稳定性
  • 超长的信号传输距离:20米
  • 超低能耗:休眠
  • 4 引脚安装:可以买封装好的
  • 完全互换 : 直接出结果,不用转化

接线:

  • VCC接5V
  • GND接GND
  • DATA接P3^3口

数据传送逻辑:

只有一根数据线DATA,上官一号发送序列指令给DHT11模块,模块一次完整的数据传输为40bit,高位先出

数据格式:

8bit湿度整数数据+8bit湿度小数数据+8bi温度整数数据+8bit温度小数数据+8bit校验和 通讯过程时序图

2.检测DHT11温湿度传感器模块是否存在

根据如下时序图,做通信初始化,并检测模块是否存在,功能是否正常

时序逻辑分析:

  • a : dht = 1
  • b :dht = 0
  • 延时30ms
  • c: dht = 1
  • 在60us后读d点,如果d点是低电平(被模块拉低),说明模块存在!

代码示例:

#include "reg52.h"
#include "intrins.h"sbit ledOne = P3^7;
sbit dht = P3^3;//模块的data插在p3.3void Delay30ms()		//@11.0592MHz
{unsigned char i, j;i = 54;j = 199;do{while (--j);} while (--i);
}void Delay60us()		//@11.0592MHz
{unsigned char i;i = 25;while (--i);
}void Delay1000ms()		//@11.0592MHz
{unsigned char i, j, k;_nop_();i = 8;j = 1;k = 243;do{do{while (--k);} while (--j);} while (--i);
}void check_DHT()
{//a :  dht = 1 dht = 1;//b :dht = 0dht = 0;//延时30msDelay30ms();//c: dht = 1dht = 1;//在60us后读d点,如果d点是低电平(被模块拉低),说明模块存在!Delay60us();if(dht == 0){ledOne = 0;//亮灯,说明模块存在}
}void main()
{ledOne = 1;Delay1000ms();Delay1000ms();check_DHT();while(1);
}

3.通过编写代码读取温湿度数据

  • a : dht = 1
  • b :dht = 0
  • 延时30ms
  • c: dht = 1
  • 卡d点;while(dht1);
  • 卡e点 while(!dht)
  • 卡f点:while(dht)
  • 卡g点:while(!dht)
  • 有效数据都是高电平,持续时间不一样,50us读,低电平0 高电平

DHT11传输0的时序分析:

DHT11传输1的时序分析:

代码示例:

#include "reg52.h"
#include "intrins.h"sbit ledOne = P3^7;
sbit dht = P3^3;//模块的data插在p3.3char datas[5];void Delay30ms()		//@11.0592MHz
{unsigned char i, j;i = 54;j = 199;do{while (--j);} while (--i);
}void Delay60us()		//@11.0592MHz
{unsigned char i;i = 25;while (--i);
}void Delay1000ms()		//@11.0592MHz
{unsigned char i, j, k;_nop_();i = 8;j = 1;k = 243;do{do{while (--k);} while (--j);} while (--i);
}void DHT11_Start()
{dht = 1;dht = 0;//延时30msDelay30ms();dht = 1;//卡d点;while(dht1); 卡e点 while(!dht) 卡f点:while(dht)while(dht);while(!dht);while(dht);
}void Read_Data_From_DHT()
{int i;//轮int j;//每一轮读多少次char tmp;char flag;DHT11_Start();for(i= 0;i < 5;i++){//卡g点:while(!dht)       有效数据都是高电平,持续时间不一样,50us读,低电平0 高电平for(j=0;j<8;j++){while(!dht);//等待卡g点Delay60us();if(dht == 1){flag = 1;while(dht);}else{flag = 0;} tmp = tmp << 1;tmp |= flag;}datas[i] = tmp;}}void main()
{ledOne = 1;Delay1000ms();Delay1000ms();while(1){Delay1000ms();Read_Data_From_DHT();	}
}

4.将读取到的温湿度数据通过串口上传

代码示例:

#include "reg52.h"
#include "intrins.h"sbit ledOne = P3^7;
sbit dht = P3^3;//模块的data插在p3.3char datas[5];sfr AUXR = 0x8E;void UartInit(void)		//9600bps@11.0592MHz
{AUXR = 0x01;SCON = 0x40; //配置串口工作方式1,REN不使能接收TMOD &= 0xF0;TMOD |= 0x20;//定时器1工作方式位8位自动重装TH1 = 0xFD;TL1 = 0xFD;//9600波特率的初值TR1 = 1;//启动定时器
}
void sendByte(char data_msg)
{SBUF = data_msg;while(!TI);TI = 0;
}void sendString(char* str)
{while( *str != '\0'){sendByte(*str);str++;}
}void Delay30ms()		//@11.0592MHz
{unsigned char i, j;i = 54;j = 199;do{while (--j);} while (--i);
}void Delay60us()		//@11.0592MHz
{unsigned char i;i = 25;while (--i);
}void Delay1000ms()		//@11.0592MHz
{unsigned char i, j, k;_nop_();i = 8;j = 1;k = 243;do{do{while (--k);} while (--j);} while (--i);
}void DHT11_Start()
{dht = 1;dht = 0;//延时30msDelay30ms();dht = 1;//卡d点;while(dht1); 卡e点 while(!dht) 卡f点:while(dht)while(dht);while(!dht);while(dht);
}
void Delay40us()		//@11.0592MHz
{unsigned char i;_nop_();i = 15;while (--i);
}void Read_Data_From_DHT()
{int i;//轮int j;//每一轮读多少次char tmp;char flag;DHT11_Start();for(i= 0;i < 5;i++){//卡g点:while(!dht)       有效数据都是高电平,持续时间不一样,50us读,低电平0 高电平for(j=0;j<8;j++){while(!dht);//等待卡g点Delay40us();if(dht == 1){flag = 1;while(dht);}else{flag = 0;} tmp = tmp << 1;tmp |= flag;}datas[i] = tmp;}}void main()
{ledOne = 1;UartInit();Delay1000ms();Delay1000ms();while(1){Delay1000ms();Read_Data_From_DHT();	sendString("H:");sendByte(datas[0]/10 + 0x30);//43 a sendByte(datas[0]%10 + 0x30);sendByte('.');sendByte(datas[1]/10 + 0x30);//43 a sendByte(datas[1]%10 + 0x30);	sendString("\r\n");	sendString("T:");sendByte(datas[2]/10 + 0x30);//43 a sendByte(datas[2]%10 + 0x30);	sendByte('.');sendByte(datas[3]/10 + 0x30);//43 a sendByte(datas[3]%10 + 0x30);			sendString("\r\n");		}
}

打开串口助手收到温湿度数据:

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

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

相关文章

【资源推荐】一站式机器学习学习资料

我之前向大家推荐了许多关于人工智能数学原理与应用的资料&#xff0c;其中包括线性代数、机器学习和深度学习等方面的内容。 交互式线性代数学习网站 沉浸式线性代数学习网站 Kaggle大神教你机器学习 今天我将继续向大家推荐一个一站式学习机器学习的绝佳资源&#xff1a;《…

《TCP/IP网络编程》阅读笔记--多线程服务器端的实现

1--多线程的优点 多进程服务器的缺点&#xff1a; ① 创建进程的过程会带来一定的开销&#xff1b; ② 为了完成进程间的数据交换&#xff0c;需要特殊的 IPC 技术&#xff1b; ③ 进程间的上下文切换是创建进程时的最大开销&#xff1b; 多线程的优点&#xff1a; ① 线程的创…

C#类与类库调用注意事项

类 创建一个类文件&#xff0c;myfunction.cs //静态类&#xff1a;直接引用、无需实例化 static public int jiafa(int V) //普通类&#xff1a;引用时需要实例化 public int jiafa(int V)using System; using System.Collections.Generic; using System.Diagnostics; using …

无涯教程-JavaScript - ISNA函数

描述 如果指定的值为Excel&#xff03;N/A错误值,或者表达式返回Excel&#xff03;N/A错误,则ISNA函数将返回逻辑值TRUE。否则返回FALSE。当值不可用于您的公式时,将发生Excel&#xff03;N/A错误。 语法 ISNA (value)争论 Argument描述Required/OptionalvalueValue or exp…

《算法竞赛·快冲300题》每日一题:“点灯游戏”

《算法竞赛快冲300题》将于2024年出版&#xff0c;是《算法竞赛》的辅助练习册。 所有题目放在自建的OJ New Online Judge。 用C/C、Java、Python三种语言给出代码&#xff0c;以中低档题为主&#xff0c;适合入门、进阶。 文章目录 题目描述题解C代码Java代码Python代码 “ 点…

vue cli 打包、生产环境http-proxy-middleware代理

结构树 版本 1、创建vue.config.js const path require(path); const UglifyJsPlugin require(uglifyjs-webpack-plugin) //压缩 const CompressionWebpackPlugin require(compression-webpack-plugin) const isProduction process.env.NODE_ENV ! development;module.exp…

请求与响应以及REST风格

目录 请求与响应请求参数参数传递 五种类型参数传递普通参数POJO数据类型嵌套POJO类型参数数组类型参数集合类型参数 JSON数据传输参数JSON普通数组JSON对象数据JSON对象数组知识点1&#xff1a;EnableWebMvc知识点2&#xff1a;RequestBodyRequestBody与RequestParam区别日期类…

[SICTF 2023] webmisc

文章目录 webBaby_PHP涉及知识点 我全都要RCE你能跟得上我的speed吗 miscPixel_art攻破这个压缩包&#xff01; web Baby_PHP 涉及知识点 php解析特性apache换行解析漏洞无参RCE 源代码 <?php highlight_file(__FILE__); error_reporting(0);$query $_SERVER[QUERY_ST…

OpenCV Series : Target Box Outline Border

角点 P1 (255, 000, 000) P2 (000, 255, 000) P3 (000, 000, 255) P4 (000, 000, 000)垂直矩形框 rect cv2.minAreaRect(cnt)targetColor roi_colortargetThickness 1targetColor (255, 255, 255)if lineVerbose:if True:cv2.line(ph…

做机器视觉工程师,其实挺没意思的

3.康耐视VisionPro高级脚本系列教程-3.脚本编辑错误和运行错误调试方法&#xff0c;break和Contitinuee的差别_哔哩哔哩_bilibili 其实人生就是“有时有意思&#xff0c;有时没意思”。 心里有太多的不甘心&#xff0c;太多的苦水&#xff0c;是没法再吃学习的苦&#xff0c…

市场调查中的信度和效度分析原理及python实现示例

市场调查中的信度和效度分析 1.量表信度分析1.1 内部一致性信度&#xff1a;克朗巴赫α系数原理1.2 python实现示例 2.量表效度分析2.1 内容效度2.1.1 原理2.1.2 python实现示例 2.2 准则效度2.2.1 原理2.2.2 python实现示例 2.3 结构效度2.3.1 原理2.3.2 python实现示例 3.量表…

[PyTorch][chapter 54][GAN- 1]

前言&#xff1a; GAN playground: Experiment with Generative Adversarial Networks in your browser 生成对抗网络&#xff08;Generative Adversarial Nets&#xff0c;GAN&#xff09;是一种基于对抗学习的深度生成模型&#xff0c;最早由Ian Goodfellow于2014年在《Gener…

selenium.chrome怎么写扩展拦截或转发请求?

Selenium WebDriver 是一组开源 API&#xff0c;用于自动测试 Web 应用程序&#xff0c;利用它可以通过代码来控制chrome浏览器&#xff01; 有时候我们需要mock接口的返回&#xff0c;或者拦截和转发请求&#xff0c;今天就来实现这个功能。 代码已开源&#xff1a; https:/…

使用java连接Libvirtd

基于springboot web 一、依赖 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId>&l…

用c语言编写出三底模型

以下是一个用C语言实现三底模型的示例代码。这个程序通过循环遍历输入的股票数据&#xff0c;判断是否出现三底形态&#xff0c;如果是&#xff0c;则输出买入信号&#xff0c;否则输出卖出信号。 c语言 #include <stdio.h> #include <stdlib.h> // 判断是否出现…

Java项目---图片服务器

图片服务器--->服务器&#xff08;图床&#xff09; 核心功能&#xff1a;上传图片、展示图片等 比如&#xff1a;编写博客时我们会插入图片&#xff0c;本质上是往文章中放了一个链接&#xff08;URL&#xff09;&#xff0c;这个URL资源在另外一个服务器上。 核心知识点…

FPGA 纯VHDL解码 IMX214 MIPI 视频,2路视频拼接输出,提供vivado工程源码和技术支持

目录 1、前言免责声明 2、我这里已有的 MIPI 编解码方案3、本 MIPI CSI2 模块性能及其优越性4、详细设计方案设计原理框图IMX214 摄像头及其配置D-PHY 模块CSI-2-RX 模块Bayer转RGB模块伽马矫正模块VDMA图像缓存Video Scaler 图像缓存HDMI输出 5、vivado工程详解PL端FPGA硬件设…

无涯教程-JavaScript - INFO函数

描述 INFO函数返回有关当前操作环境的信息。 语法 INFO (type_text) 争论 Argument描述Required/OptionalType_text 指定要返回的信息类型的文本。 下表给出了Type_text的值和相应的返回信息。 Required Type_text 返回的信息"目录" 当前目录或文件夹的路径。&qu…

【Proteus仿真】【STM32单片机】四驱寻迹避障小车

文章目录 一、功能简介二、软件设计三、实验现象联系作者 一、功能简介 系统运行后&#xff0c;LCD1602显示红外、超声波检测状态和距离、小车运行状态。可通过K1键可手动切换模式&#xff0c;寻迹、避障、蓝牙遥控&#xff1b;也可通过蓝牙发送指令切换模式&#xff1b; 当处…

系统架构设计之道,论如何构建一个资金账户系统

&#x1f449;导读 资金账户是互联网和金融业务中非常常见的系统&#xff0c;尤其是在电商、支付等业务中必不可少。资金账户系统本身其核心模块的整体架构往往并不复杂&#xff0c;但其对于资金安全和可用性的要求非常高&#xff0c;导致建设好一个资金账户系统并不容易。本文…