STM32驱动-DHT11(温湿度模块)

news/2024/11/15 0:50:42/文章来源:https://www.cnblogs.com/zkbklink/p/18299412

STM32驱动-DHT11(温湿度模块)

一、DHT11模块简介

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

二、DHT11引脚介绍

DHT11通常有三个引脚或四个引脚,但第四个引脚(NC)是保留引脚,通常不用。主要引脚包括:

  • VCC:电源引脚,供电电压范围为3.3V~5.5V。
  • DATA:数据输入输出引脚,用于与微控制器进行通信。
  • GND:电源地引脚。

三、DHT11的工作原理

DHT11使用单总线数据格式,即使用一根数据线(DATA引脚)进行数据的发送和接收。传感器与微控制器之间的通信遵循DHT协议,该协议规定了数据传输的时序和数据格式。微控制器通过发送起始信号给DHT11,DHT11在接收到正确的起始信号后,会发送一个响应信号,并随后发送包含温湿度数据的40位数据包。这40位数据包由8位湿度整数数据、8位湿度小数数据、8位温度整数数据、8位温度小数数据和8位校验数据组成。

四、DHT11的使用注意事项

  • 测量精度:DHT11的湿度测量精度范围为20%90%RH(相对湿度),温度测量精度范围为0°C50°C。但需要注意的是,DHT11的精度可能会受到环境因素的影响,如温度变化、湿度变化、气流等。因此,在使用DHT11进行测量时,应该尽量选择稳定的环境条件,以提高测量的准确度。
  • 通信协议:DHT11与微控制器之间的通信需要严格遵循DHT协议,包括起始信号的发送、响应信号的接收以及数据包的解析等。
  • 电源要求:DHT11的供电电压范围为3.3V~5.5V,因此在使用时需要确保电源电压在此范围内。

代码示例

void Dht11_OutputInit(void)
{GPIO_InitTypeDef GPIO_InitStructure;RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOG, ENABLE);GPIO_InitStructure.GPIO_Mode 	= GPIO_Mode_OUT;GPIO_InitStructure.GPIO_Speed 	= GPIO_Speed_100MHz;GPIO_InitStructure.GPIO_OType 	= GPIO_OType_PP;GPIO_InitStructure.GPIO_PuPd 	= GPIO_PuPd_UP;GPIO_InitStructure.GPIO_Pin 	= GPIO_Pin_9;	GPIO_Init(GPIOG, &GPIO_InitStructure);//引脚空闲高电平GPIO_SetBits(GPIOG,GPIO_Pin_9);
}void Dht11_InputInit(void)
{GPIO_InitTypeDef GPIO_InitStructure;RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOG, ENABLE);GPIO_InitStructure.GPIO_Mode 	= GPIO_Mode_IN;GPIO_InitStructure.GPIO_Speed 	= GPIO_Speed_100MHz;GPIO_InitStructure.GPIO_Pin 	= GPIO_Pin_9;	GPIO_Init(GPIOG, &GPIO_InitStructure);}void  Dht11_Config(void)
{Dht11_OutputInit();
}void start_dht11(void)
{//1.配置引脚为输出模式Dht11_OutputInit();//2.把引脚电平拉低并持续20msGPIO_ResetBits(GPIOG,GPIO_Pin_9);delay_ms(20);//3.把引脚电平拉高并持续30usGPIO_SetBits(GPIOG,GPIO_Pin_9);delay_us(30);}bool dht11_ack(void)
{int cnt=0;Dht11_InputInit();while( GPIO_ReadInputDataBit(GPIOG,GPIO_Pin_9) == 1 && cnt < 80){delay_us(1);cnt++;}if(cnt >= 80)return false;cnt = 0;while(GPIO_ReadInputDataBit(GPIOG,GPIO_Pin_9)==0 && cnt < 80){cnt++;delay_us(1);  }  if(cnt>=80){return false;}else{return true;}}uint8_t get_bit(void)
{while(GPIO_ReadInputDataBit(GPIOG,GPIO_Pin_9)==1);while(GPIO_ReadInputDataBit(GPIOG,GPIO_Pin_9)==0);delay_us(40);if(GPIO_ReadInputDataBit(GPIOG,GPIO_Pin_9)==1){return 1;}else{return 0;}}uint8_t get_byte(void)
{uint8_t data=0;for(int i=0;i<8;i++){data<<=1;data|=get_bit();}return data;
}bool get_dht11_data(uint8_t data_buf[5])
{start_dht11();if(true ==dht11_ack()){for(int i=0;i<5;i++){data_buf[i]=get_byte();}if( data_buf[4] == data_buf[0] + data_buf[1] + data_buf[2] + data_buf[3] ){return true;}elsereturn false; }
}

综上所述,STM32的DHT11实际上是指STM32微控制器与DHT11温湿度传感器模块配合使用的情况。通过合理的硬件连接和软件开发,STM32可以轻松地读取DHT11传感器测量的温湿度数据,并将其用于各种应用场景中。

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

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

相关文章

输出的魅力

关于一份代码不同输出的不同结果。。(luogu能A) printf快写正常cout解绑cout就离谱

大厂性能优化的10大顶级方案 (万字图文史上最全)

文章很长,且持续更新,建议收藏起来,慢慢读!疯狂创客圈总目录 博客园版 为您奉上珍贵的学习资源 : 免费赠送 :《尼恩Java面试宝典》 持续更新+ 史上最全 + 面试必备 2000页+ 面试必备 + 大厂必备 +涨薪必备 免费赠送 :《尼恩技术圣经+高并发系列PDF》 ,帮你 实现技术自由,…

[学习笔记] 长链剖分 - 图论

长链剖分 字面意思,不同于重链剖分,每次选取最长的树链进行剖分,直到剖完为止。其原理和重链剖分相似。建议学习长链剖分前,先学习 重链剖分。 重链剖分能做的,长链剖分都能做(当然不包括找重儿子),长链剖分还能以 \(O(nlogn)-O(1)\) 的优秀复杂度找到 \(k\) 级祖先(当…

腾讯云加速企业和个人开发创新公开课直播预告

直播预告:07/18(周四)15:00-16:00 随着人工智能与大模型的蓬勃发展,我们正步入一个由技术驱动的创新时代。Al不仅是技术革新的先锋,更是每位程序员不可或缺的“搭子”,掌握AI工具的创造、加工与使用技巧,成为广大从业者当下的挑战之一。 腾讯云高性能应用服务HAl,打造一系…

CSP提高组模拟1

T1很明显的最短路floyed算法,但是这个最大的点权却不是很好维护,但我们可以想到枚举最大的点权其实就可以相当于枚举floyed中的k,那么这时我们要对k进行一个排序操作,使得我们每次枚举的中转点k为枚举经过路径的点权最大的点从而达到同时走最短路并维护点权最大值。点击查看…

【服务器搭建】为啥虚拟主机不能用IP直接访问?

需求 直接用IP访问了自己在线上的网站,结果发现被拒绝❓因为,IP映射的是一整台服务器,而服务器上可以部署的的服务是多种多样的。除了web网站服务,还可能有ftp文件传输服务,mail邮箱服务等。这时仅仅给出IP是不够的,需要在IP后添加端口号作进一步区分。 当然,如果用浏览…

应急响应命令(Linux)

netstat -anultp 查看进程(用来判断开启了哪些服务等)ls -al 查看目录下所有文件,包括隐藏文件 ls -alt 查看目录下所有文件,包括隐藏文件,按时间顺序排序cat access.log | wc -l 查看文件的行数 wc -l是查看文件行数的意思cat -e access.log | grep 1.php 查…

U7-11课综合练习+12课阶段测评练习——复习练习题目

[2的n次方] 高精度乘法复习资料:https://www.cnblogs.com/jayxuan/p/18287673重复做以下操作 $n $ 次:对每一位乘以 $2 $,然后进位。(当然也可以使用正常的高精度乘法)【参考代码】 #include<bits/stdc++.h> using namespace std;int ans[59]; int main() {int n;ci…

telegram发卡机器人

iDataRiver是一家提供telegram发卡机器人的发卡平台,商家上架商品后,自动获得平台提供的免费telegram发卡机器人。iDataRiver是一家提供telegram发卡机器人的发卡平台。 商家上架商品后,自动获得平台提供的免费telegram发卡机器人。 如果希望将机器人头像/名称设置成自己的,…

发卡网收益如何usdt提现

iDataRiver是一家支持直接使用加密货币USDT提现的发卡平台, 支持TRON(波场)、BSC(币安)、ETH(以太坊)区块链。iDataRiver是一家支持直接使用加密货币USDT提现的发卡平台, 支持TRON(波场)、BSC(币安)、ETH(以太坊)区块链。 由于iDataRiver天然的web3属性,加密货币拥有第一原生地…

《JavaScript权威指南第7版》中文PDF+英文PDF+源代码 +JavaScript权威指南(第6版)(附源码)PDF下载阅读分享推荐

JavaScript是Web编程语言。绝大多数网站都使用JavaScript,所有现代Web浏览器(无论是桌面、平板还是手机浏览器,书中以后统称为浏览器)都包含JavaScript解释器,这让JavaScript成为有史以来部署最广泛的编程语言。过去十年,Node.js让浏览器之外的JavaScript编程成为可能,N…

封装 uniapp 请求库的最佳实践

背景 在前端开发中,HTTP 请求是与服务器进行数据交互的核心手段。无论是获取数据还是提交数据,前端应用几乎都离不开 HTTP 请求。在 uniapp 中,uni.request 是官方提供的用于发起 HTTP 请求的基础 API。然而,直接使用 uni.request 存在一些问题和不足,比如:代码冗余:每次…