0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

使用STM32F103ZET6采集DHT11温湿度串口显示

jf_88434166 来源:jf_88434166 2026-03-18 17:06 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

关于DHT11

DHT11是一款数字温湿度传感器,DHT11是一款含有已校准数字信号输出的温湿度复合传感器。它应用专用的数字模块采集技术和温湿度传感技术,确保产品具有可靠的稳定性,响应快,抗干扰能力强。传感器包括一个高分子电阻式感湿元件和一个NTC测温元件,并与一个高性能8位单片机相连接,通过单总线与微处理器通讯,只需要一根线。
主图.png

相关参数

1、DHT11数据结构
DHT11数字湿温度传感器采用单总线数据格式。即,单个数据引脚端口完成输入输出双向传输。其数据包由5Byte(40Bit)组成。数据分小数部分和整数部分,具体格式在下面说明。
一次完整的数据传输为40bit,高位先出。
数据格式:8bit湿度整数数据+8bit湿度小数数据+8bit温度整数数据+8bit温度小数数据+8bit校验和
校验和数据为前四个字节相加。
传感器数据输出的是未编码的二进制数据。数据(湿度、温度、整数、小数)之间
应该分开处理。如果,某次从传感器中读取如下5Byte数据:
在这里插入图片描述
由以上数据格式可以得到温湿度计算方法
humi (湿度)= byte4 . byte3=45.0 (%RH)
temp (温度)= byte2 . byte1=28.0 ( ℃)
jiaoyan(校验)= byte4+ byte3+ byte2+ byte1=73(=humi+temp)(校验正确)
2、DHT11传输数据时序
主机发送开始信号后,延时等待 20us-40us 后读取 DH11T 的回应信号,读取总线为低电平,说明 DHT11 发送响应信号,DHT11 发送响应信号后,再把总线拉高,准备发送数据,每一 bit 数据都以低电平开始。
在这里插入图片描述
3、DHT11的数字“0”和数字“1”表示方法
DHT11的数字0和数字1表示方式和常见的不同,一般的数据表示0的是低电平,表示1的是高电平,DHT11不同,开始传输数据之后他数字0的表示方式是高电平26-28us,数字1的表示方式是高电平116-118us。
在这里插入图片描述

在这里插入图片描述

代码篇

本次实验定义的IO口是PB11,传输的数据是串口一
1、主机发送开始信号到DHT11即单片机拉低18ms之后再拉高20-40us

static void DHT11_Rst(void)
{                
		GPIO_SETOUT();											//配置成输出模式
    GPIO_ResetBits(DHT11_IO,DHT11_PIN); //拉低数据线
    Delay_ms(20);    										//拉低至少18ms
    GPIO_SetBits(DHT11_IO,DHT11_PIN); 	//拉高数据线 
	  Delay_us(30);     									//主机拉高20~40us
		GPIO_ResetBits(DHT11_IO,DHT11_PIN);
}

2、DHT11发送响应信号到主机(32单片机),DHT11的数据线会拉低40-50us的,在拉高40-50us,让单片机的IO口检测信号。

函数名:static u8 DHT11_Check(void)
参数说明:无
返回值:检测到回应-- >返回1,否则0
函数作用:检测DHT11的响应信号
***********************************************/
static u8 DHT11_Check(void) 	   
{   
	u8 retry=0;
	GPIO_SETIN();			//设置为输入模式	
	
  while (!GPIO_ReadInputDataBit(DHT11_IO,DHT11_PIN) && retry< 100)//DHT11会拉低40~50us
	{
		retry++;
		Delay_us(1);
	}
	if(retry >= 100)	//超时未响应/未收到开始信号,退出检测
		return 0;
	else 
		retry = 0;
  while (GPIO_ReadInputDataBit(DHT11_IO,DHT11_PIN) && retry< 100)//DHT11拉低后会再次拉高40~50us
	{
		retry++;
		Delay_us(1);
	}
	if(retry >=100)		//超时,DHT11工作出错,退出检测
		return 0;
	return 1;					//设备正常响应,可以正常工作
}

3、DHT11开始传输数据给单片机,这有两个传输数据的函数,一个是传输字节的,在由传输字节的函数来写传输一个8位字符串的函数。

函数名:static u8 DHT11_Read_Bit(void)
参数说明:无
返回值:返回从DHT11上读取的一个Bit数据
函数作用:从DHT11上读取一个Bit数据
***********************************************/
static u8 DHT11_Read_Bit(void)
{
 	u8 retry = 0;
	//DHT11的Bit开始信号为12-14us低电平
	while(GPIO_ReadInputDataBit(DHT11_IO,DHT11_PIN) && retry< 100)//等待变为低电平(等待Bit开始信号)
	{
		retry++;
		Delay_us(1);
	}
	retry = 0;
	while(!GPIO_ReadInputDataBit(DHT11_IO,DHT11_PIN) && retry< 100)//等待变高电平(代表数据开始传输)
	{
		retry++;
		Delay_us(1);
	}
	Delay_us(30);//等待30us
	//0信号为26-28us,1信号则为116-118us,所以说超过30us去读取引脚状态就可以知道传输的值了
	if(GPIO_ReadInputDataBit(DHT11_IO,DHT11_PIN)) return 1;
	else return 0;		   
}


/***********************************************************************
函数名:static u8 DHT11_Read_Byte(void)
参数说明:无
返回值:返回从DHT11上读取的一个byte数据
函数作用:从DHT11上读取一个byte数据
************************************************************************/
static u8 DHT11_Read_Byte(void)    
{        
  u8 i,dat;
  dat=0;
	
	for (i=0;i< 8;i++) 
	{
   	dat< <=1; 
	  dat|=DHT11_Read_Bit();
  }	
	
  return dat;
}

4、DHT11数据采集完毕之后通过主函数在串口显示出来

函数名:int main(void)
参数说明:无
返回值:无
函数作用:主函数
***************************************************************************/
 int main(void)
 {	
	 
   clock_init();
	 uart_init(115200);		//初始化串口
	 printf("wecome to DHT11");
	 
	 
	 //初始化DHT11(有BUG,第一次上电总是失败,按一下复位按钮又能进了)
	 if(!DHT11_Init()){
		 printf("rn EEROR! THE DHT11 HAS NO RESPOND...");
		 //while(1);
	 }
	 printf("rn THE DHT11 HAS RESPOND");
	 Delay_ms(10);		//这里延时10ms主要是因为,刚刚接收到响应信息,要等DHT11发送完信息
	 
	 while(1)
	 {
		 if(DHT11_Read_Data(&temp,&humi))
			printf("rn temp:%d,humi:%d",temp,humi);
		 else
		 //printf("rn EEROR! THE DHT11 HAS NO RESPOND...");//由于是库函数编程,不能准确把握函数的执行时间,
																													//所以会经常出现这条警告信息
		 Delay_ms(100);
	 }
	  
 }

接线和实验结果

6-现象.jpeg

在这里插入图片描述

总结

DHT11是性价比较高的一个温湿度模块,用串口来显示温湿度来说比较直观,长期发布此类文章,喜欢的点个关注吧。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 传感器
    +关注

    关注

    2578

    文章

    55811

    浏览量

    795397
  • 串口
    +关注

    关注

    15

    文章

    1628

    浏览量

    83561
  • DHT11
    +关注

    关注

    19

    文章

    278

    浏览量

    60072
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    基于arduino的dht11温湿度传感器的使用

    本文介绍了DHT11温湿度传感器电气特性、DHT11封装形式及接口说明与典型应用电路,其次介绍了DHT11温湿度传感器时序图与连接图,最后介
    发表于 01-22 15:50 5.1w次阅读
    基于arduino的<b class='flag-5'>dht11</b><b class='flag-5'>温湿度</b>传感器的使用

    STM32F103试用体验:LCD显示DHT11测量实验

    实验名称:LCD显示DHT11测量温湿度 实验目的:通过开发板连接的DHT11模块实时测量环境温湿度,并在LCD屏上
    发表于 11-09 10:41 1.2w次阅读

    DHT11温湿度数据的采集

    用的控制器是STM32F103C8T6,如果你用STMF103的其他芯片来跑这个代码也能跑通,基本配置都是一样的。先介绍DHT11温湿度数据的采集
    发表于 07-16 06:24

    基于STM32开发板实现传感数据采集-DHT11温湿度采集

    STM32F407ZGT6开发板进行项目开发,选用的传感器为常见通用的DHT11温湿度传感器。传感器将采集到的数据传输到STM32(MCU)
    发表于 08-10 07:41

    如何通过STM32采集DHT11的数据将温湿度信息显示带LCD及虚拟串口上?

    如何通过STM32采集DHT11的数据将温湿度信息显示带LCD及虚拟串口上?
    发表于 11-10 06:37

    请问STM32F103C8T6如何通过DHT11获取温湿度数据?

    请问STM32F103C8T6如何通过DHT11获取温湿度数据?
    发表于 11-25 08:02

    请问STM32F103C8T6如何使用DHT11采集温湿度通过串口显示

    请问STM32F103C8T6如何使用DHT11采集温湿度通过串口显示
    发表于 12-14 06:02

    STM32F103ZET6主控开发板的学习记录

    文章目录前言一、所用器件(1)STM32F103ZET6(2) MQ_烟雾传感器(3)声音传感器(5)sg90舵机(5)DHT11 温湿度传感器(6)OLED
    发表于 01-06 06:39

    DHT11采集温湿度源程序

    DHT11采集温湿度并用LCD12864显示的源程序.可以使用的哈,分享给大家
    发表于 01-07 16:56 171次下载

    使用STM32设计的DHT11温湿度采集GSM报警系统程序资料免费下载

    本文档的主要内容详细介绍的是使用STM32设计的DHT11温湿度采集GSM报警系统程序资料免费下载。
    发表于 12-20 08:00 93次下载
    使用<b class='flag-5'>STM32</b>设计的<b class='flag-5'>DHT11</b><b class='flag-5'>温湿度</b><b class='flag-5'>采集</b>GSM报警系统程序资料免费下载

    stm32获取DHT11模块温湿度数据原理解析

    stm32获取DHT11模块温湿度数值原理解析stm32单片机如何从DHT11获取到温湿度的呢?
    发表于 11-13 20:06 55次下载
    <b class='flag-5'>stm32</b>获取<b class='flag-5'>DHT11</b>模块<b class='flag-5'>温湿度</b>数据原理解析

    STM32实例——基于STM32开发板实现传感数据采集-DHT11温湿度采集

    STM32实例——基于STM32开发板实现传感数据采集-DHT11温湿度采集
    发表于 12-05 20:06 93次下载
    <b class='flag-5'>STM32</b>实例——基于<b class='flag-5'>STM32</b>开发板实现传感数据<b class='flag-5'>采集</b>-<b class='flag-5'>DHT11</b><b class='flag-5'>温湿度</b><b class='flag-5'>采集</b>

    MSP432 P401R 单片机 读取DHT11 串口发送温湿度 OLED显示温湿度 温湿度检测

    MSP432P401R读取DHT11串口发送温湿度OLED显示温湿度
    发表于 12-16 16:54 33次下载
    MSP432 P401R 单片机  读取<b class='flag-5'>DHT11</b> <b class='flag-5'>串口</b>发送<b class='flag-5'>温湿度</b> OLED<b class='flag-5'>显示</b><b class='flag-5'>温湿度</b> <b class='flag-5'>温湿度</b>检测

    使用STM32F103ZET6采集DHT11温湿度串口显示

    STM32采集DHT11温湿度关于DHT11相关参数代码篇接线和实验结果总结关于DHT11DHT11
    发表于 12-24 19:10 46次下载
    使用<b class='flag-5'>STM32F103ZET6</b><b class='flag-5'>采集</b><b class='flag-5'>DHT11</b><b class='flag-5'>温湿度</b><b class='flag-5'>串口</b><b class='flag-5'>显示</b>

    基于STM32DHT11温湿度数据采集仿真设计

    通过STM32采集DHT11温度传感器的数据,将温湿度信息显示在LCD显示屏上及虚拟
    的头像 发表于 09-01 09:32 4221次阅读
    基于<b class='flag-5'>STM32</b>的<b class='flag-5'>DHT11</b><b class='flag-5'>温湿度数据采集</b>仿真设计