36-基于stm32单片机室内环境温湿度CO2光敏检测OLED显示源程序、原理图、PCB、元件清单实物制作

功能介绍:采用stm32单片机作为主控CPU,采用SGP30传感器采集CO2浓度,采用光敏传感器采集当前的光照强度,采用DHT11采集温湿度,并且将采集到的数据显示到OLED显示屏上面,当CO2浓度大于一定值(程序可调节),继电器打开风扇进行排气,当光照强度低于一定值时,蜂鸣器进行报警提醒,可以通过按键手动打开继电器进行风扇排气,文末有资料分享:

36-基于stm32单片机室内环境温湿度CO2光敏检测OLED显示(程序+原理图+PCB+元件清单全套资料)

 程序打开办法:特别注意:下载资料包以后一定要先解压!(建议解压到桌面上,文件路径太深会导致程序打开异常),解压后再用keil5打开。 

int main(void)
{
	u32 sgp30_dat;
	NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//设置中断优先级分组为组2:2位抢占优先级,2位响应优先级
	delay_init();
	uart_init(9600);
	SGP30_Init();   //初始化SGP30
	delay_ms(100);
	SGP30_Write(0x20,0x08);
	sgp30_dat = SGP30_Read();//读取SGP30的值
	CO2Data = (sgp30_dat & 0xffff0000) >> 16;
	TVOCData = sgp30_dat & 0x0000ffff;	
	OLED_Init();
	OLED_ColorTurn(0);
	OLED_DisplayTurn(0);	
	OLED_ShowString(0,0,"TEMP:",16);   OLED_ShowString(70,0,"C",16);
	OLED_ShowString(0,16,"HUMI:",16); 	OLED_ShowString(70,16,"%",16);
	OLED_ShowString(0,32," CO2:",16);  OLED_ShowString(90,32,"PPM",16);
	OLED_ShowString(0,48," LUX:",16);
	OLED_Refresh();
	DHT11_Init();
	Adc_Init();
	LED_Init();
	LED=0;Q1=1;
	while(CO2Data == 400 && TVOCData == 0)
	{
		SGP30_Write(0x20,0x08);
		sgp30_dat = SGP30_Read();//读取SGP30的值
		CO2Data = (sgp30_dat & 0xffff0000) >> 16;//取出CO2浓度值
		TVOCData = sgp30_dat & 0x0000ffff;			 //取出TVOC值
		printf("正在检测中...\r\n");
		delay_ms(500);
	}
	while(1)
	{

		gm=4096-Get_Adc_Average(ADC_Channel_1,10);
		DHT11_Read_TempAndHumidity ( & DHT11_Data );//获取传感器湿度
		SGP30_Write(0x20,0x08);
		sgp30_dat = SGP30_Read();//读取SGP30的值
		CO2Data = ((sgp30_dat & 0xffff0000) >> 16)-400;//取出CO2浓度值
		TVOCData = sgp30_dat & 0x0000ffff;       //取出TVOC值
		printf("CO2:%dppm\r\nTVOC:%dppd\r\n",CO2Data,TVOCData);//蓝牙上传数据
		OLED_ShowNum(50,0,DHT11_Data .temp_int,2,16);//显示温度数据
		OLED_ShowNum(50,16,DHT11_Data .humi_int,2,16);//显示湿度
		OLED_ShowNum(50,32,CO2Data,4,16);//显示CO2
		OLED_ShowNum(50,48,gm,4,16);//显示gm
			OLED_Refresh();
		if(CO2Data>500) Q1=0;
		else Q1=1;
		
		if(CO2Data>500||gm<2000) 	LED=1;
		else LED=0;
		
		if(K1==0) Q1=0;
		//delay_ms(500);
	}
}

 下面是原理图展示:

百度云盘资料分享链接 

### 回答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个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值