STM32单片机+DHT11温湿度传感器+OLED屏幕+蜂鸣器报警+温湿度数据发送到串口调试助手+源代码

目录

一、DHT11模块参数

二、DHT11模块接线说明

三、测试说明 

四、DTT11传感器模块代码 

五、串口调试助手把采集的温湿度数据发送出来  

六、源代码 

七、DHT11温湿度传感器原理图资料

八、串口调试助手软件


一、DHT11模块参数

1 可以检测周围环境的湿度和温度

2 传感器采用DHT11

3 湿度测量范围:20%-95%(0 度-50 度范围)湿度测量误差:+-5%

4 温度测量范围:0 度-50 度温度测量误差:+-2 度 4 工作电压3.3V-5V

5 输出形式:数字输出

6 设有固定螺栓孔,方便安装

7 小板PCB 尺寸:3.2cm * 1.4cm

8 电源指示灯(红色)

二、DHT11模块接线说明

1 VCC 外接3.3V-5V

2 GND 外接GND

3 DATA 小板开关数字量输出接口接单片机IO 口

4 蜂鸣器VCC 外接3.3V,GND外接GND,I/O接PA7

三、测试说明 

编译环境:keil5

测试单片机: STM32F103C8T6

DHT11 模块与单片机连接: VCC-VCC  GND-GND  DATA-PA11

温湿度超过设定的阈值就会触发蜂鸣器报警!!!

FMQ.c文件编写蜂鸣器驱动代码如下:

#include "FMQ.h"
#include "stm32f10x.h"   
void mfq_Init(void)	
{
	GPIO_InitTypeDef  GPIO_InitStructure; 
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);
	
	GPIO_InitStructure.GPIO_Pin =  GPIO_Pin_0;
	GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
	GPIO_Init(GPIOB, &GPIO_InitStructure);
	
}

void fmq(float temp,float humi)
{
		if(temp>15 || humi>95)//温度大于15度 或者 湿度大于95度 蜂鸣器报警
		{
			GPIO_ResetBits(GPIOB, GPIO_Pin_0);
    }
		else
		{
			GPIO_SetBits(GPIOB, GPIO_Pin_0);
		}
}

四、DTT11传感器模块代码 

 DHT11.c文件,对温湿度传感器驱动经行了封装

#include "dht11.h"
#include "Delay.h"

void DHT11_Rst(void)	   
{                 
	DHT11_IO_OUT(); 	
    DHT11_DQ_OUT=0; 	
    Delay_ms(20);    	
    DHT11_DQ_OUT=1; 	
	Delay_us(30);     	
}

u8 DHT11_Check(void) 	   
{   
	u8 retry=0;
	DHT11_IO_IN();//SET INPUT	 
    while (DHT11_DQ_IN&&retry<100)
	{
		retry++;
		Delay_us(1);
	};	 
	if(retry>=100)return 1;
	else retry=0;
    while (!DHT11_DQ_IN&&retry<100)
	{
		retry++;
		Delay_us(1);
	};
	if(retry>=100)return 1;	    
	return 0;
}

u8 DHT11_Read_Bit(void) 			 
{
 	u8 retry=0;
	while(DHT11_DQ_IN&&retry<100)
	{
		retry++;
		Delay_us(1);
	}
	retry=0;
	while(!DHT11_DQ_IN&&retry<100)
	{
		retry++;
		Delay_us(1);
	}
	Delay_us(40);//µÈ´ý40us
	if(DHT11_DQ_IN)return 1;
	else return 0;		   
}

u8 DHT11_Read_Byte(void)    
{        
    u8 i,dat;
    dat=0;
	for (i=0;i<8;i++) 
	{
   		dat<<=1; 
	    dat|=DHT11_Read_Bit();
    }						    
    return dat;
}

u8 DHT11_Read_Data(u8 *temp,u8 *humi)    
{        
 	u8 buf[5];
	u8 i;
	DHT11_Rst();
	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;	    
}
	 
u8 DHT11_Init(void)
{	 
 	GPIO_InitTypeDef  GPIO_InitStructure;
 	
 	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);	 //ʹÄÜPG¶Ë¿ÚʱÖÓ
	
 	GPIO_InitStructure.GPIO_Pin = GPIO_Pin_11;				 
 	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; 		
 	GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
 	GPIO_Init(GPIOA, &GPIO_InitStructure);				 
 	GPIO_SetBits(GPIOA,GPIO_Pin_11);						 
			     
	DHT11_Rst();  
	return DHT11_Check();
} 








 

 DHT11.h文件,对温湿度传感器驱动函数经行了声明

#ifndef __DHT11_H
#define __DHT11_H 
#include "sys.h"   

#define DHT11_IO_IN()  {GPIOA->CRH&=0XFFFF0FFF;GPIOA->CRH|=8<<12;}
#define DHT11_IO_OUT() {GPIOA->CRH&=0XFFFF0FFF;GPIOA->CRH|=3<<12;}
IO²Ù×÷º¯Êý											   
#define	DHT11_DQ_OUT PAout(11) //Êý¾Ý¶Ë¿Ú	PA0 
#define	DHT11_DQ_IN  PAin(11)  //Êý¾Ý¶Ë¿Ú	PA0 


u8 DHT11_Init(void);
u8 DHT11_Read_Data(u8 *temp,u8 *humi);
u8 DHT11_Read_Byte(void);
u8 DHT11_Read_Bit(void);
u8 DHT11_Check(void);
void DHT11_Rst(void);
#endif

五、串口调试助手把采集的温湿度数据发送出来  

printf("temp=%d humi=%d\r\n",temp,humi);

六、源代码 

《STM32单片机+DHT11温湿度传感器+OLED屏幕+蜂鸣器报警+温湿度数据发送到串口调试助手》源代码资源-CSDN文库

七、DHT11温湿度传感器原理图资料

DHT11温湿度传感器原理图、模块资料资源-CSDN文库

八、串口调试助手软件

串口调试助手-keil5调试工具资源-CSDN文库

### 回答1: 基于STM32单片机DHT11温湿度传感器OLED显示程序可以实现以下功能: 首先,需要连接STM32单片机DHT11温湿度传感器以及OLED显示屏。 然后,编写程序读取DHT11传感器的温湿度数值。可以通过引脚连接和使用相应的库函数来实现数据读取。 接下来,使用OLED显示屏库函数将温湿度数据显示在OLED屏幕上。可以在屏幕上创建相应的文本框或者图标来显示温湿度值。可以使用合适的库函数调用,将温湿度数据转换为字符串格式并在屏幕上显示出来。 同时,可以设计一个定时器来定时更新温湿度数据的显示。可以设置一个适当的时间间隔来实现数据的定时更新,并使用相应的库函数来控制定时器的启动和停止。 此外,为了增加用户体验,还可以添加一些额外的功能,比如在某个温湿度阈值超过一定值时,显示警告信息或者触发报警器等。 最后,将编写好的程序下载到STM32单片机中进行测试。通过观察OLED显示屏是否能够正确显示温湿度数值,以及数据是否能够定时更新,来验证程序的正确性。 总体来说,基于STM32单片机DHT11温湿度传感器OLED显示程序需要通过串口和I2C总线连接硬件设备,并使用相应的库函数来读取传感器数据和控制OLED显示屏,以实现温湿度数据的实时显示。 ### 回答2: 基于STM32单片机DHT11温湿度传感器和OLED显示程序可以实现如下功能。 首先,我们需要连接DHT11温湿度传感器到STM32单片机的GPIO口。DHT11传感器的信号线接到单片机的输入GPIO口,供电线接到单片机的5V电源口,接地线接到单片机的地线。 接着,需要通过STM32的GPIO口读取DHT11传感器发送温湿度数据。通过向DHT11传感器发送一个读取请求信号,然后在适当的时间间隔后读取传感器发送数据,包括度和湿度值。 接下来,我们需要将读取到的温湿度数据通过I2C或SPI协议发送到连接的OLED显示屏上显示出来。首先,需要初始化I2C或SPI接口,然后将温湿度数据传送到OLED显示屏的适当位置进行显示。可以使用相应的OLED显示屏库函数来帮助实现这一功能。 此外,为了更好地呈现温湿度数据,还可以添加一些额外的功能。例如,可以设置一个度和湿度的阈值,当度或湿度超过阈值时,通过OLED显示屏进行警告或提示。还可以添加一个实时钟表显示当前的时间,并将当前温湿度数据显示在时钟表上。 需要注意的是,在编写程序时,应根据单片机型号和开发环境选择相应的库函数和配置参数,确保程序正确运行。 以上是基于STM32单片机DHT11温湿度传感器和OLED显示程序的简要说明。具体的实现细节和代码可以根据具体的需求和硬件平台进行调整和开发。 ### 回答3: 基于STM32单片机DHT11温湿度传感器OLED显示程序主要实现了以下功能。 首先,我们需要通过STM32单片机DHT11传感器进行通信。我们可以通过引脚连接和编程设置来实现数据的读取。在程序中,我们需要配置引脚输入/输出模式,并通过适当的延时来与DHT11发送和接收数据。 接下来,我们需要解析从DHT11传感器接收到的数据DHT11传感器会发送40位二进制数据,其中包含度和湿度信息。我们可以根据协议来解析这些数据,并将其存储到相应的变量中。 然后,我们需要将解析后的数据通过OLED显示屏进行显示。在STM32单片机中,我们可以使用相应的库函数来控制OLED显示屏。我们需要将度和湿度信息转换为字符串,并使用适当的字符函数来显示在OLED屏幕上。 最后,我们可以通过循环来实现数据的持续更新和显示。以一定的时间间隔读取DHT11传感器的数据,并将其显示在OLED屏幕上。这样,我们就实现了基于STM32单片机DHT11温湿度传感器OLED显示程序。 需要注意的是,为了确保程序的正常运行,我们还需要根据实际情况对程序进行优化和调试。这可能包括校准温湿度传感器、处理错误情况和调整程序逻辑等。
评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

嵌入式Dora

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值