【GD32F303红枫派使用手册】第二十四节 DHT11温湿度传感器检测实验

24.1 实验内容

通过本实验主要学习以下内容:

  • DHT11操作原理
  • 单总线GPIO模拟操作原理

24.2 实验原理

HT11是一款已校准数字信号输出的温湿度一体化数字传感器。该产品具有品质卓越、超快响应、抗干扰能力强、性价比极高等优点信号,传输距离可达20米以上。

其具体参数如下:

  • 工作电压:3.3V-5.5V
  • 工作电流:0.5mA
  • 控制方式:单总线
  • 输出方式:数字量
  • 湿度精度:±5%
  • 温度精度:±2℃
  • 湿度量程:5%~95%
  • 温度量程:-20℃~+60℃
    DHT11引脚定义和封装如下图所示

DHT11采用单总线的方式进行数据传输,下面对其通信时序以及传输数据构成进行介绍。

DHT11通信时序可分为:建立连接、数据接收两部分。

建立连接部分时序如下图所示,共包括:主机动作和从机响应两部分。主机动作:DHT11温湿度传感器上电后,数据线处于空闲状态(配置数据线空闲状态为高电平)。主机发送建立连接动作,动作内容为:拉低数据线再拉高数据线(数据线拉低时间>18ms、拉高时间在20-40us之间)然后释放总线。从机响应:从机接收到主句发送的建立连接动作后,先拉低数据线,再拉高数据线,表示连接建立成功(拉低数据线40-50us,拉高数据线40-50us)。

 在连接成功建立后,从机发送数据,主机进行数据的接收。数据接收:每一bit数据都以50us低电平开始,通过判断低电平后的高电平时间来决定接收数据的种类。接收高电平时间为26us-28us表示0,接收高电平为70us表示1。当最后一bit数据传送完毕后,从机拉低数据线50us,随后从机释放总线,总线进入空闲状态(高电平)。

主机一次接收40bit数据,共5字节,每个字节的含义如下图所示。从高到低依次为:湿度整数h(0)、湿度小数h(1)、温度整数h(2)、温度小数h(3)、校验和h(4)。检验和等于前四字节数据之和。在一次数据接收完成后,验证h(4)是否等于h(1)+h(2)+h(3)+h(4)。若等式成立则表示数据成功接收,然后进行数据更新,否则不进行数据更新。

DHT11数据格式举例如下。

 

24.3 硬件设计

DHT11硬件电路图如下所示。DHT11为单信号线通信,因而仅使用了一个IO进行数据通信,且该IO使用了RC进行滤波并采用4.7K进行上拉,保证了数据通信的稳定性,电源地通过100nf电容滤波。

 

24.4 代码解析

24.4.1 DHT11初始化

DHT11初始化函数实现如下,主要包括DHT11数据通信引脚的初始化以及DHT11 reset和check操作。

C
uint8_t dht11_init(void)
{driver_gpio_general_init(&DHT11_DA);/* DHT11_DQ引脚模式设置,开漏输出,上拉, 这样就不用再设置IO方向了, 开漏输出的时候(=1), 也可以读取外部信号的高低电平 */dht11_reset();return dht11_check();
}

在该函数中,将DHT11数据引脚配置为开漏模式,使用上可以不用切换引脚模式以及方向,使用比较方便。

dht11_reset()为复位DHT11操作函数,其实现如下,如原理中介绍,首先拉低数据引脚20ms,之后拉高30us,实现对DHT11的复位操作。

C
static void dht11_reset(void)
{DHT11_DA_OUT(0);    /* 拉低DQ */delay_ms(20);       /* 拉低至少18ms */DHT11_DA_OUT(1);    /* DQ=1 */delay_us(30);       /* 主机拉高10~35us */
}

dht11_check()为check DHT11是否正常连接以及工作,其实现如下,其主要通过判断DHT11是否能够响应主机的复位请求操作来判断DHT11是否连接以及工作正常,如果工作正常,该函数返回值为0,否则返回1.

C
uint8_t dht11_check(void)
{uint8_t retry = 0;uint8_t rval = 0;while (DHT11_DA_IN && retry < 100)  /* DHT11会拉低83us */{retry++;delay_us(1);}if (retry >= 100){rval = 1;}else{retry = 0;while (!DHT11_DA_IN && retry < 100) /* DHT11拉低后会再次拉高87us */{retry++;delay_us(1);}if (retry >= 100) rval = 1;}return rval;
}

24.4.2 DHT11温湿度读取

DHT11温湿度读取函数如下,通过该函数将会连续读取5个字节数据,前两个为湿度数据,之后两个为温度数据,最后一个数据为校验和。读取正确且校验完成后相关湿度数据将会放在对应的形参指定的变量内,该函数将会返回0.

C
uint8_t dht11_read_data(uint8_t *temp, uint8_t *humi)
{uint8_t buf[5];uint8_t i;dht11_reset();if (dht11_check() == 0){for (i = 0; i < 5; i++)     /* 读取40位数据 */{buf[i] = dht11_read_byte();}if ((buf[0] + buf[1] + buf[2] + buf[3]) == buf[4]){*humi = buf[0];*temp = buf[2];}}else{return 1;}return 0;
}

 24.4.3 主函数

DHT11温湿度检测实验主函数如下所示,首先对systick延迟函数进行初始化,之后对DHT11初始化,最后在主循环中没间隔1s读取一次温湿度数据。

C
int main(void)
{uint8_t temperature;uint8_t humidity;delay_init();while (dht11_init()) /* DHT11初始化 */{}while (1){dht11_read_data(&temperature, &humidity);             /* 读取温湿度值 */delay_ms(1000);}
}

 24.5 实验结果

将DHT11温湿度读取实验烧录到红枫派开发板中,并连接串口,运行程序会,将会每秒钟打印一次温湿度数据。向着DHT11吹口热气,将会观察到打印的温湿度数值都将会增加。

 由聚沃科技原创,来源于【红枫派开发板】第二十四讲 DHT11温湿度传感器检测实验 - 苏州聚沃电子科技有限公司 (gd32bbs.com)

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

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

相关文章

Codeforces Round 954 (Div. 3) (A~F)(不会数学)

A - X Axis 暴力枚举一下所有可能 void solve() {int a , b , c;cin >> a >> b >> c;int ans 100;for(int i 0 ; i < 10 ; i ){ans min(ans , abs(i - a) abs(i - b) abs(i - c));} cout << ans << endl; } B - Matrix Stabiliz…

【数据分享】2006-2023《中国贸易外经统计年鉴》

公众号新功能 目前公众号新增以下等功能 1、处理GIS出图、Python制图、区位图、土地利用现状图、土地利用动态度和重心迁移图等等 2、核密度分析、网络od分析、地形分析、空间分析等等 3、地理加权回归、地理探测器、生态环境质量指数、地理加权回归模型影响因素分析、计算…

硬件开发笔记(二十):AD21导入外部下载的元器件原理图库、封装库和3D模型

若该文为原创文章&#xff0c;转载请注明原文出处 本文章博客地址&#xff1a;https://hpzwl.blog.csdn.net/article/details/139707771 长沙红胖子Qt&#xff08;长沙创微智科&#xff09;博文大全&#xff1a;开发技术集合&#xff08;包含Qt实用技术、树莓派、三维、OpenCV…

webpack【实用教程】

基础配置 配置的拆分和合并 通常 webpack 的配置文件会有3个 webpack.common.js 公共配置&#xff08;会被另外两个配置文件导入并合并&#xff09;webpack.dev.js 开发环境的配置webpack.prod.js 生产环境的配置 开发环境的本地服务 在 webpack.dev.js 中配置 devServer:…

使用鸿蒙HarmonyOs NEXT 开发b站的卡片效果 手把手教学

资源准备&#xff1a; 需要4张图片&#xff1a;分别是页面图&#xff0c;播放图标&#xff0c;评论图标&#xff0c;更多图标 1.实现效果显示&#xff1a; 2.教学视频&#xff1a; 使用鸿蒙HarmonyOs NEXT 开发b站卡片_哔哩哔哩_bilibilihttps://www.bilibili.com/video/BV1…

Huffman树——AcWing 148. 合并果子

目录 Huffman树 定义 运用情况 注意事项 解题思路 AcWing 148. 合并果子 题目描述 运行代码 代码思路 其它代码 代码思路 Huffman树 定义 它是一种最优二叉树。通过构建带权路径长度最小的二叉树&#xff0c;经常用于数据压缩等领域。 运用情况 在数据压缩中&a…

【机器学习】半监督学习可以实现什么功能?

目录 一、什么是机器学习二、半监督学习算法介绍三、半监督学习算法的应用场景四、半监督学习可以实现什么功能&#xff1f; 一、什么是机器学习 机器学习是一种人工智能技术&#xff0c;它使计算机系统能够从数据中学习并做出预测或决策&#xff0c;而无需明确编程。它涉及到…

Java研学-RBAC权限控制(八)

九 登录登出 1 登录作用 判断员工是否有权限访问&#xff0c;首先得知道现在操作的人是谁&#xff0c;所以必须先实现登录功能 2 登录流程 ① 提供登录页面&#xff0c;可输入用户名与密码信息&#xff0c;并添加执行登录的按钮。&#xff08;登录页面不能被拦截&#xff09;…

意识清晰,对答如流,但手脚活动受限 是脊髓损伤?

在医学领域&#xff0c;有一种情况常常令人困惑&#xff1a;患者意识清醒&#xff0c;交流无碍&#xff0c;但手脚的活动却受到限制。这种情况可能源于多种原因&#xff0c;其中之一就是脊髓损伤。本文将对脊髓损伤进行科普&#xff0c;帮助大家更好地理解这一复杂的医学问题。…

Handler、Looper与Message Queue:深入解析Android中的异步消息处理机制

在Android开发中&#xff0c;Handler、Looper和Message Queue是处理异步消息和线程间通信的核心组件。它们共同构成了一个高效且灵活的消息处理机制&#xff0c;使得开发者能够轻松地在不同线程之间传递数据和执行任务。以下将从技术难点、面试官关注点、回答吸引力和代码举例四…

AIGC技术的发展现状与未来趋势探讨

AIGC技术的发展现状与未来趋势探讨 随着人工智能&#xff08;AI&#xff09;技术的迅猛发展&#xff0c;AI生成内容&#xff08;AI-Generated Content&#xff0c;AIGC&#xff09;成为了一项颠覆性的技术&#xff0c;它能够自动生成文本、图像、音频和视频等多种内容。本文将…

示例:推荐一个基于第三方QRCoder.Xaml封装的二维码显示控件

一、目的&#xff1a;基于第三方QRCoder.Xaml封装的二维码控件&#xff0c;为了方便WPF调用 二、效果如下 功能包括&#xff1a;背景色&#xff0c;前景色&#xff0c;中心图片设置和修改大小&#xff0c;二维码设置等 三、环境 VS2022 四、使用方式 1、安装nuget包&#xf…

数据可视化期末总结

期末考试重点&#xff08;世界上最没意义的事情&#xff09; 选择 p8 数据可视化的标准&#xff1a; 实用、完整、真实、艺术、交互&#xff08;性&#xff09; p21 色彩三属性 色相、饱和度、亮度 p23 视觉通道的类型&#xff1a; 记得色调是定性 p39 散点图&#xff08;二维…

【python入门】运算符

文章目录 算术运算符比较运算符赋值运算符逻辑运算符位运算符成员运算符身份运算符优先级 算术运算符 # 加法 print(5 3) # 输出: 8# 减法 print(5 - 3) # 输出: 2# 乘法 print(4 * 3) # 输出: 12# 除法&#xff08;结果为浮点数&#xff09; print(8.0 / 3) # 输出: 2.6…

Kotlin 运行代码片段多种方式

目录 场景描述 一、Scratch files and worksheets in the IDE 1、Scratch files(草稿文件) 特点&#xff1a; Scratch files文件创建步骤&#xff1a; 功能解释&#xff1a; Scratch Buffer笔记文件&#xff1a; 2、Worksheets(工单) 1&#xff09;、创建方式不同。 …

Java中的StringBuffer和StringBuilder类

在Java编程中&#xff0c;StringBuffer和StringBuilder是两个非常重要的类&#xff0c;用于处理可变字符串。StringBuffer和StringBuilder都继承自AbstractStringBuilder&#xff0c;提供了类似的方法来操作字符串。然而&#xff0c;这两者之间存在一个关键区别&#xff1a;Str…

国内有哪些比较优秀的wordpress主题?

WordPress作为全球最受欢迎的开源内容管理系统之一&#xff0c;拥有众多优质的主题供用户选择。那么国内有哪些比较优秀的wordpress主题呢&#xff1f;下面小编就和大家分享国内功能比较完善比较受欢迎的wordpress主题。 wordpress主题合集&#xff1a;WP主题-办公人导航https:…

软考初级网络管理员_03_硬件单选题

1.CPU是一块超大规模的集成电路&#xff0c;其主要部件有()。 运算器、控制器和系统总线 运算器、寄存器组和内存储器 控制器、存储器和寄存器组 运算器、控制器和寄存器组 2.(请作答此空)是指CPU一次可以处理的二进制的位数&#xff0c;它直接关系到计算机的计算精度、速…

浅析缓存技术

缓存技术的原理 缓存技术通过在内存中存储数据副本来加速数据访问。当应用程序需要数据时&#xff0c;首先检查缓存是否存在数据副本&#xff0c;如果有则直接返回&#xff0c;否则再从原始数据源获取。这种机制大大减少了访问时间&#xff0c;提升了系统的响应速度和整体性能。…

利用Frp实现内网穿透(docker实现)

文章目录 1、WSL子系统配置2、腾讯云服务器安装frps2.1、创建配置文件2.2 、创建frps容器 3、WSL2子系统Centos服务器安装frpc服务3.1、安装docker3.2、创建配置文件3.3 、创建frpc容器 4、WSL2子系统Centos服务器安装nginx服务 环境配置&#xff1a;一台公网服务器&#xff08…