STM32+DHT11温湿度采集,小白也能看懂的保姆级教程

STM32+DHT11温湿度采集,小白也能看懂的保姆级教程

你是否曾盯着一堆电子元件发呆:STM32芯片、DHT11传感器,明明都是现成的零件,却不知道怎么让它们“合作”采集温湿度?其实这事儿一点都不复杂!就像教两个陌生人打招呼,只要摸清它们的“沟通规则”,几分钟就能搞定。今天就带大家从零开始,一步步解锁STM32驱动DHT11的技能,全程无晦涩术语,无复杂操作,看完就能上手实操~

一、先搞懂核心逻辑:DHT11和STM32是怎么“聊天”的?

DHT11是个性格随和的传感器,它只用一根线(单总线)就能和STM32沟通,不用复杂的接线,这也是它受欢迎的原因。它们的对话流程特别简单,就像一套固定的“暗号”:

  1. STM32先“主动搭话”:把总线拉低至少18毫秒(相当于大声喊“嗨,在吗?”),然后再拉高20-40微秒,等着DHT11回应;
  2. DHT11“礼貌回复”:收到信号后,先拉低总线80微秒,再拉高80微秒(意思是“我在呢,准备发数据啦”);
  3. DHT11“传递信息”:紧接着发送40位数据,包含湿度整数、湿度小数、温度整数、温度小数和校验和——这里要偷偷说个小秘密,DHT11的小数位其实一直是0,所以我们重点看整数部分就行;
  4. STM32“核对信息”:把收到的前4个字节加起来,取最后8位和校验和对比,一致就说明数据没出错,这波沟通才算成功。

二、完整驱动代码:复制粘贴就能用(附详细注释)

下面的代码基于STM32F103系列(标准库),大家只要根据自己的硬件,修改一下引脚定义,就能直接用。每个部分都加了超详细的注释,就算是编程新手也能看明白每一行的作用~

1. 头文件(dht11.h):给“沟通”定好规则

头文件就像一本“沟通手册”,提前定义好要用的引脚、存储数据的格式和要用到的函数,让STM32和DHT11知道该怎么配合。

#ifndef__DHT11_H#define__DHT11_H#include"stm32f10x.h"// 这里要划重点!根据自己的硬件修改引脚(默认是GPIOB的Pin12)#defineDHT11_GPIO_PORTGPIOB// 传感器连接的GPIO端口#defineDHT11_GPIO_PINGPIO_Pin_12// 传感器连接的GPIO引脚#defineDHT11_GPIO_CLKRCC_APB2Periph_GPIOB// 对应端口的时钟// 存储温湿度数据的“小盒子”,把有用的信息都装进去typedefstruct{uint8_thumidity_int;// 湿度整数部分(0-99,比如50就是50%)uint8_thumidity_dec;// 湿度小数部分(DHT11固定为0,不用管它)uint8_ttemp_int;// 温度整数部分(-20~60,比如25就是25℃)uint8_ttemp_dec;// 温度小数部分(同样固定为0)uint8_tcheck_sum;// 校验和,用来核对数据是否准确}DHT11_DataTypeDef;// 声明要用到的函数(相当于提前告诉STM32有这些“工具”)voidDHT11_GPIO_Init(void);// 初始化GPIO引脚,做好沟通准备uint8_tDHT11_Read_Data(DHT11_DataTypeDef*DHT11_Data);// 读取温湿度数据uint8_tDHT11_Check_Response(void);// 检测DHT11有没有回应#endif

2. 源文件(dht11.c):实现“沟通”的具体操作

如果说头文件是“手册”,那源文件就是“操作步骤”,把每个函数的具体功能实现出来,让STM32知道该怎么发送信号、接收数据。

#include"dht11.h"#include"delay.h"// 注意!这里需要自己实现us级延时函数,非常关键!// 快速切换引脚状态的“快捷键”,不用写复杂代码,提高效率#defineDHT11_OUT_HIGH()GPIO_SetBits(DHT11_GPIO_PORT,DHT11_GPIO_PIN)// 引脚拉高#defineDHT11_OUT_LOW()GPIO_ResetBits(DHT11_GPIO_PORT,DHT11_GPIO_PIN)// 引脚拉低#defineDHT11_IN_READ()GPIO_ReadInputDataBit(DHT11_GPIO_PORT,DHT11_GPIO_PIN)// 读取引脚状态// GPIO初始化:给引脚“设定角色”,先让它能发送信号,后续再切换成接收voidDHT11_GPIO_Init(void){GPIO_InitTypeDef GPIO_InitStructure;RCC_APB2PeriphClockCmd(DHT11_GPIO_CLK,ENABLE);// 开启GPIO时钟,给引脚“通电”// 设定引脚为推挽输出模式,就像给STM32装了个“扬声器”,能主动发信号GPIO_InitStructure.GPIO_Pin=DHT11_GPIO_PIN;GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;GPIO_Init(DHT11_GPIO_PORT,&GPIO_InitStructure);DHT11_OUT_HIGH();// 初始状态把总线拉高,相当于“待命”状态}// 检测DHT11响应:看看传感器有没有收到STM32的“招呼”// 返回0=成功回应,1=没回应(传感器可能没接好或坏了)uint8_tDHT11_Check_Response(void){uint8_tretry=0;// 切换引脚为浮空输入模式,相当于让STM32“竖起耳朵”听DHT11说话GPIO_InitTypeDef GPIO_InitStructure;GPIO_InitStructure.GPIO_Pin=DHT11_GPIO_PIN;GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IN_FLOATING;GPIO_Init(DHT11_GPIO_PORT,&GPIO_InitStructure);// 等待DHT11拉低总线(最多等80微秒,超时就是没回应)while(DHT11_IN_READ()==1&&retry<80){retry++;delay_us(1);// 必须是精准的微秒级延时,差一点就可能出错!}if(retry>=80)return1;// 等太久没反应,返回失败elseretry=0;// 再等DHT11拉高总线(同样最多80微秒)while(DHT11_IN_READ()==0&&retry<80){retry++;delay_us(1);}if(retry>=80)return1;// 响应异常,返回失败return0;// 响应正常,准备接收数据}// 读取温湿度数据:核心函数,完成“打招呼-收数据-核数据”的全过程// 返回0=读取成功,1=失败(没回应或数据出错)uint8_tDHT11_Read_Data(DHT11_DataTypeDef*DHT11_Data){uint8_ti,j,temp;uint8_tdata[5]={0};// 用一个数组存40位数据(5个字节)// 1. 发送起始信号:STM32主动“打招呼”DHT11_OUT_LOW();// 拉低总线delay_ms(20);// 保持20毫秒(满足至少18毫秒的要求,多等2毫秒更稳妥)DHT11_OUT_HIGH();// 拉高总线delay_us(30);// 保持30微秒(在20-40微秒范围内)// 2. 检测DHT11响应:没回应就直接返回失败if(DHT11_Check_Response()!=0){return1;}// 3. 读取40位数据:5个字节,每个字节8位,慢慢“听”DHT11说for(i=0;i<5;i++)// 循环5次,读取5个字节{for(j=0;j<8;j++)// 循环8次,读取每个字节的8位{// 等待总线拉低:这是每一位数据的“开始信号”(大概50微秒)while(DHT11_IN_READ()==0);// 延时40微秒后检测电平:高电平=1,低电平=0(DHT11的“语言规则”)delay_us(40);temp=0;if(DHT11_IN_READ()==1){temp=1;// 检测到高电平,记为1}// 等待总线拉高结束,准备读取下一位while(DHT11_IN_READ()==1);// 把当前位的数据拼接到对应的字节里(高位在前,别搞反啦)data[i]|=(temp<<(7-j));}}// 4. 恢复GPIO为输出模式:读完数据,让引脚回到“待命”状态GPIO_InitTypeDef GPIO_InitStructure;GPIO_InitStructure.GPIO_Pin=DHT11_GPIO_PIN;GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;GPIO_Init(DHT11_GPIO_PORT,&GPIO_InitStructure);DHT11_OUT_HIGH();// 5. 校验数据:确保收到的数据是准确的// 规则:前4个字节的和,最后8位要等于第5个字节(校验和)if((data[0]+data[1]+data[2]+data[3])==data[4]){// 数据准确,把数据存到之前定义的“小盒子”里DHT11_Data->humidity_int=data[0];DHT11_Data->humidity_dec=data[1];DHT11_Data->temp_int=data[2];DHT11_Data->temp_dec=data[3];DHT11_Data->check_sum=data[4];return0;// 读取成功,返回0}else{return1;// 校验失败,数据可能出错了}}

3. 主函数调用示例(main.c):让整个系统跑起来

写完驱动代码,最后一步就是在主函数里“指挥”它们工作,让STM32定期读取DHT11的数据。

#include"stm32f10x.h"#include"delay.h"#include"dht11.h"intmain(void){DHT11_DataTypeDef dht11_data;// 创建一个“数据盒子”,用来存温湿度// 系统初始化:给STM32“开机设置”,时钟、延时这些都要提前弄好SystemInit();delay_init();// 初始化延时函数(必须要有!不然计时不准)DHT11_GPIO_Init();// 初始化DHT11的引脚,做好准备while(1)// 无限循环,让系统一直工作{// 读取温湿度数据:DHT11采样周期至少1秒,别读太频繁哦if(DHT11_Read_Data(&dht11_data)==0){// 读取成功!这里可以加打印代码,或者把数据用到其他地方// 举个例子:现在的湿度是dht11_data.humidity_int %,温度是dht11_data.temp_int ℃}else{// 读取失败,可以加个提示,或者让系统重试}delay_ms(2000);// 每隔2秒读取一次,既高效又不会累到传感器}}

三、实操小提醒:这些坑千万别踩!

  1. 延时函数是“灵魂”:us级延时一定要精准,差几微秒就可能导致通信失败,要是自己写不好,可以找现成的延时库;
  2. 引脚别接错:一定要根据自己的硬件修改头文件里的引脚定义,接错了传感器根本没反应;
  3. 别频繁读取:DHT11的采样周期至少1秒,频繁读取会让传感器“罢工”,2秒读一次是比较稳妥的选择;
  4. 校验不能少:数据校验是判断数据是否准确的关键,少了这一步,可能会拿到错误的温湿度值。

其实STM32驱动DHT11真的没有那么难,核心就是摸清它们的“沟通时序”,再跟着代码一步步操作。只要把引脚接对、延时精准,小白也能轻松实现温湿度采集~ 赶紧拿出你的电子元件,跟着教程试试吧!

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

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

相关文章

武汉研究生留学中介口碑排名出炉,学员满意度高获得认可 - 留学机构评审官

武汉研究生留学中介口碑排名出炉,学员满意度高获得认可作为从事国际教育规划工作逾十年的顾问,笔者在日常咨询中,常常遇到武汉地区高校学子提出的几个核心关切:在众多留学中介中,哪些机构在研究生申请领域真正积累…

淘宝商品数据采集 API 接口的应用与接入说明||电商API接口

淘宝商品数据采集 API 是淘宝开放平台&#xff08;TOP&#xff09; 提供的合规化数据接口&#xff0c;支持开发者 / 企业获取淘宝平台的商品基础信息、价格、库存、销量等数据&#xff0c;广泛应用于电商运营、竞品分析、选品决策等场景。本文从应用场景、接入准备、实操流程、…

打卡信奥刷题(2714)用C++实现信奥题 P3243 [HNOI2015] 菜肴制作

P3243 [HNOI2015] 菜肴制作 题目描述 知名美食家小 A 被邀请至 ATM 大酒店&#xff0c;为其品评菜肴。ATM 酒店为小 A 准备了 nnn 道菜肴&#xff0c;酒店按照为菜肴预估的质量从高到低给予 111 到 nnn 的顺序编号&#xff0c;预估质量最高的菜肴编号为 111。 由于菜肴之间口味…

新加坡硕士留学中介口碑排名揭晓,无隐形消费,服务透明可靠 - 留学机构评审官

新加坡硕士留学中介口碑排名揭晓,无隐形消费,服务透明可靠一。、新加坡硕士留学中介选择中的常见困惑与解答作为一名从业12年的新加坡留学规划导师,我经常被学生和家长问及:如何找到一家无隐形消费、服务透明可靠的…

基于STM32智能出租车计价器分时计费设计60X(设计源文件+万字报告+讲解)(支持资料、图片参考_相关定制)_文章底部可以扫码

基于STM32智能出租车计价器分时计费设计60X(设计源文件万字报告讲解)&#xff08;支持资料、图片参考_相关定制&#xff09;_文章底部可以扫码产品功能描述&#xff1a; 本系统由STM32F103C8T6单片机核心板、1.44寸TFT彩屏、电机驱动电路、霍尔传感器、蜂鸣器报警、按键电路及电…

打卡信奥刷题(2715)用C++实现信奥题 P3361 Cool loves maids

P3361 Cool loves maids 题目背景 Cool 非常喜欢妹子&#xff0c;以至于 Cool 在百度上有一个非常神奇的 ID 【雾】。 题目描述 Cool 现在搞清楚了女生宿舍的地形。女生宿舍是由很多栋楼构成的&#xff0c;它们可以被抽象成 202020\times 202020 的方格。 Cool 的妹子们所处的地…

长沙最好的研究生留学机构,申请成功率高,专业团队助力留学之路 - 留学机构评审官

长沙最好的研究生留学机构,申请成功率高,专业团队助力留学之路一、长沙研究生如何选择高成功率的留学服务机构在长沙寻求研究生留学服务的学生,常会聚焦几个核心问题:本地是否有具备强大实力的机构?申请成功率究竟…

2026芜湖市英语雅思培训辅导机构推荐;2026权威出国雅思课程排行榜 - 苏木2025

基于2026年雅思官方考纲变革、芜湖本地备考需求调研及数万学员真实反馈,我们联合教育测评机构开展深度测评,聚焦镜湖区、鸠江区、戈江区、湾沚区四大区域雅思培训市场,梳理出兼具权威性与实用性的机构排行榜。雅思考…

涡流传感器金属探测检测识别金银铜铁STM32/51单片机DIY设计模块(设计源文件+万字报告+讲解)(支持资料、图片参考_相关定制)_文章底部可以扫码

涡流传感器金属探测检测识别金银铜铁STM32/51单片机DIY设计模块(设计源文件万字报告讲解)&#xff08;支持资料、图片参考_相关定制&#xff09;_文章底部可以扫码产品功能描述&#xff1a; 涡流传感器金属检测工作原理&#xff1a; 根据法拉利电磁感应定律&#xff0c;金属导体…

多模态王炸!Transformer解锁跨域新能力!

Transformer 早不是当年只靠注意力机制的 “老架构” 啦&#xff01;现在的新玩法简直让人眼前一亮&#xff5e;轻量版卷出新高度&#xff0c;像 MicroViT 这样的模型&#xff0c;推理速度直接飙 3.6 倍&#xff0c;能耗还降了 40%&#xff0c;手机、边缘设备都能轻松跑起来。跨…

Excel公式不再神秘:用F9键和公式求值功能,像侦探一样解剖运算过程

面对嵌套五层的复杂公式&#xff0c;你是否曾感到绝望&#xff1f;无需重头学习&#xff0c;只需掌握Excel自带的“公式显微镜”。 01 困在公式迷宫的日常 这是一段Excel用户再熟悉不过的经历&#xff1a;你拿到一份报表&#xff0c;某个关键单元格的公式长得像天书&#xff1…

2026年闪测仪品牌TOP6选购指南:国际知名品牌与国产佼佼者全面解析 - 品牌推荐大师1

随着工业制造向高精度、智能化方向转型,闪测仪作为实现精密测量和质量把控的关键设备,已成为3C电子、汽车制造、新能源等行业不可或缺的质检工具。面对市场上琳琅满目的品牌,如何选择一家技术可靠、服务及时的供应商…

值得推荐的半导体不锈钢管来图定制厂家,前十名揭晓 - 工业品牌热点

2026年半导体产业持续高速扩张,上游核心材料与精密管件的定制化能力已成为芯片制造、封装测试企业保障产线稳定、提升良率的关键。无论是半导体不锈钢管的来图定制精度、洁净度控制,还是厂家的技术响应速度与全链条服…

2026宁德市英语雅思培训辅导机构推荐,2026权威出国雅思课程排行榜 - 苏木2025

基于2026年雅思考试趋势及宁德市本地备考需求,结合屏南县、寿宁县、周宁县、柘荣县、东侨经济技术开发区考生的真实反馈,本文通过权威全面的深度测评,聚焦雅思培训选课核心痛点,从性价比、提分效果、师资实力、个性…

2026龙岩市英语雅思培训辅导机构推荐,2026权威出国雅思课程排行榜 - 苏木2025

基于教育行业大数据调研、2000+真实学员反馈及多维度量化评估,本文针对龙岩市长汀县、上杭县、武平县、连城县及全市域雅思考生的核心需求,发布2026年度权威出国雅思课程排行榜。当前,龙岩地区雅思培训市场鱼龙混杂…

2026年分析知名的翻译服务专业公司,天使翻译公司口碑怎么样? - 工业品牌热点

本榜单依托全维度市场调研与真实行业口碑,深度筛选出五家标杆企业,为有翻译需求的个人与企业选型提供客观依据,助力精准匹配适配的服务伙伴。 TOP1 推荐:天使(上海)外语翻译有限公司 推荐指数:★★★★★ | 口碑…

2026宁德市英语雅思培训辅导机构推荐;2026权威出国雅思课程排行榜 - 苏木2025

基于雅思考试官方评分标准与2025-2026年宁德市语培行业数据,本次针对蕉城区、福安市、福鼎市、霞浦县、古田县及周边区域雅思考生需求,开展全面深度测评,结合第三方平台口碑排名、学员真实反馈与教学实效,推出权威…

2026皮革外观缺陷检测设备:赋能皮革生产质量管控 - 品牌排行榜

皮革作为广泛应用于服饰、家具、汽车等领域的重要材料,其外观质量直接影响产品价值与市场竞争力。皮革外观缺陷检测设备通过光学成像、机器视觉等技术,对皮革表面的划痕、色差、破损、杂质等缺陷进行自动化识别与分析…

治安管理处罚法:骂人违法

网址&#xff1a;治安管理处罚法&#xff1a;骂人违法

科心大心理专科收费项目详解 价格公开透明 无隐形消费 - 资讯焦点

科心大心理专科是深圳卫健委批准的正规失眠抑郁精神心理专科,坚守“合理检查、用药、收费、因病施治”原则,收费由市卫生局、工商局统一定价,全程透明,杜绝隐形消费与乱收费,为市民提供安心诊疗服务。以下为核心收…