毕业设计,基于STM32空气质量监测系统(实物+资料+APP)!

1, 前言

本文将给大家介绍一个项目,基于STM32空气质量监测系统,希望大家有所收获,拉到文末可以领取资料哈~
产品成品图

2, 器件准备

  1. STM32F103C8T6单片机
  2. 使用DHT11模块检测温湿度
  3. 使用MQ-7传感器检测一氧化碳浓度
  4. 使用BH1750传感器检测光照强度
  5. 使用GP2Y1014AU传感器检测PM2.5浓度
  6. OLED显示温度,湿度,一氧化碳浓度,光照强度等数据
  7. 一氧化碳浓度、PM2.5浓度超标时蜂鸣器报警,同时打开风扇通风
  8. ESP8266模块实现 WIFI通讯数据传输,wifi通讯需借助一个有网络wifi热点
  9. APP可实时查看传感器数据,控制风扇,蜂鸣器和LED

使用的模块

下面是APP的截图,有显示界面,也可以远程控制风扇,蜂鸣器和LED。数据是通过onenet平台对数据进行收集的,而界面也是可以动态根据需求进行修改的。

在这里插入图片描述

3, 原理图

原理图使用立创EDA平台进行制作的,这个平台很适合新手入门。而且每月还有免费打板次数,简直不要太爽!
在这里插入图片描述

4, 示例代码

由于代码内容过多,给大家展示部分代码。

1.main文件
#include "led.h"
#include "delay.h"
#include "LCD1602.h" 

#include "stmflash.h"
#include "adc.h"
#include "OLED_I2C.h"
#include "usart.h"	
#include "timer.h"
#include "MHZ14.h"
#include "dht11.h"
#include "PM2.h"
#include "MQ.h"
#include "bh1750.h"
//网络设备
#include "net_device.h"

//协议文件
#include "onenet.h"
#include "fault.h"


//C库
#include <string.h>
#include <stdlib.h>
#include <stdio.h>



u16 MQ2,PM25,light,CO;						//烟雾浓度
//extern unsigned short CO2;		//二氧化碳浓度

u8 mode = 0;					//模式:0自动模式 根据环境控制风扇  1:手动控制风扇 

u8 temp,humi,water;

//数据流
DATA_STREAM dataStream[] = {
								{"Mode", &mode,TYPE_UCHAR, 1},
								{"LED1", &gpioStatus.Led1Sta, TYPE_BOOL, 1},
								{"Beep", &gpioStatus.BeepSta, TYPE_BOOL, 1},
								{"JD0", &gpioStatus.Jd0Sta, TYPE_BOOL, 1},
//								{"CO2", &CO2,TYPE_USHORT, 1},
								{"CO", &CO,TYPE_USHORT, 1},
								{"MQ2", &MQ2,TYPE_UCHAR, 1},
//								{"water", &water,TYPE_UCHAR, 1},
								{"light", &light,TYPE_UCHAR, 1},
								{"PM25", &PM25,TYPE_UCHAR, 1},
								{"temp", &temp,TYPE_UCHAR, 1},
								{"humi", &humi,TYPE_UCHAR, 1},	
								{"errType", &faultTypeReport, TYPE_UCHAR, 1},
							};
unsigned char dataStreamLen = sizeof(dataStream) / sizeof(dataStream[0]);

							
int main(void)
{	
	u16 adcx;
	char buf[20];
	unsigned char *dataPtr;
	unsigned int runTime = 0;
	_Bool sendFlag = 0;
	unsigned int Num = 0;
	NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//设置中断优先级分组为组2:2位抢占优先级,2位响应优先级
	delay_init();	    			//延时函数初始化	  
    LED_Init();		  				//初始化与控制设备连接的硬件接口	
 	uart_init(115200);	 			//串口初始化为9600
	
	DHT11_Init();
	BH1750_Init();     //鍒濆鍖朾h1750;        

	printf( "开始\r\n");
	I2C_Configuration();
	OLED_Init();
	OLED_Fill(0x00);
	
//	OLED_ShowCN(0,2,4);				//烟雾
//	OLED_ShowCN(16,2,5);
//	OLED_ShowStr(32,2,":--%",2);
	
	OLED_ShowCN(0,0,17);				//温度
	OLED_ShowCN(16,0,19);
	OLED_ShowStr(32,0,":--C",2);
	
	OLED_ShowCN(64,0,18);				//湿度
	OLED_ShowCN(80,0,19);
	OLED_ShowStr(96,0,":--%",2);
	
	OLED_ShowCN(0,2,9);				//光照强度
	OLED_ShowCN(16,2,21);	
	OLED_ShowCN(32,2,22);	
	OLED_ShowCN(48,2,19);
	OLED_ShowStr(64,2,":--Lux",2);
	
	OLED_ShowCN(0,4,20);				//一氧化碳
	OLED_ShowCN(16,4,1);	
	OLED_ShowCN(32,4,2);	
	OLED_ShowCN(48,4,3);
	OLED_ShowStr(64,4,":--ppm",2);	
	
	
//	OLED_ShowStr(0,4,"Water",2);        
//	OLED_ShowStr(40,4,":--mm",2);
	
	OLED_ShowStr(0,6,"PM2.5",2);        
	OLED_ShowStr(40,6,":--ug/m^3",2);

2. onenet模块
//单片机头文件
#include "stm32f10x.h"

//网络设备
#include "net_device.h"

//协议文件
#include "onenet.h"
#include "fault.h"

//硬件驱动
#include "usart.h"
#include "delay.h"
#include "led.h"
#include "OLED_I2C.h"

#include "timer.h"


//图片数据文件
//#include "image_2k.h"

//C库
#include <string.h>
#include <stdlib.h>
#include <stdio.h>




EdpPacket *send_pkg;	//协议包

ONETNET_INFO oneNetInfo = {"1083535530", "vJgsIms24zojT1Y0ylvhfz=nyUg=", 0, 0, 0, 0};
extern DATA_STREAM dataStream[];


/*
************************************************************
*	函数名称:	OneNet_DevLink
*
*	函数功能:	与onenet创建连接
*
*	入口参数:	devid:创建设备的devid
*				auth_key:创建设备的masterKey或apiKey
*
*	返回参数:	无
*
*	说明:		与onenet平台建立连接,成功或会标记oneNetInfo.netWork网络状态标志
************************************************************
*/
void OneNet_DevLink(const char* devid, const char* auth_key)
{

	unsigned char *dataPtr;
	
	printf( "OneNet_DevLink\r\n"
                        "DEVID: %s,     APIKEY: %s\r\n"
                        , devid, auth_key);

#if 1
	send_pkg = PacketConnect1(devid, auth_key);						//根据devid 和 apikey封装协议包
#else
	send_pkg = PacketConnect2(devid, auth_key);						//根据产品id 和 鉴权信息封装协议包
#endif
	
	NET_DEVICE_SendData(send_pkg->_data, send_pkg->_write_pos);		//上传平台
	
	dataPtr = NET_DEVICE_GetIPD(250);								//等待平台响应
	if(dataPtr != NULL)
	{
		oneNetInfo.netWork = OneNet_EDPKitCmd(dataPtr);				//解析数据
	}
	
	DeleteBuffer(&send_pkg);										//删包
	
	if(oneNetInfo.netWork)											//如果接入成功
	{
		printf( "Tips:	NetWork OK\r\n");
		
		oneNetInfo.errCount = 0;
		
		NET_DEVICE_Set_DataMode(DEVICE_DATA_MODE);					//设置为数据收发模式
	}
	else
	{
		printf( "Tips:	NetWork Fail\r\n");
		
		if(++oneNetInfo.errCount >= 5)								//如果超过设定次数后,还未接入平台
		{
			oneNetInfo.netWork = 0;
			faultType = faultTypeReport = FAULT_NODEVICE;			//标记为硬件错误
		}
	}
	
}

5, 应用场景

这个基于STM32的空气质量检测系统的应用场景相当广泛,尤其是在对室内空气质量要求较高的场所,具体可能包括:

  1. 智能家居环境:在家庭环境中,它可以作为智能家居系统的一部分,实时监测家中的空气质量,并根据一氧化碳浓度、PM2.5浓度等指标自动调整空气净化器、新风系统或智能窗户等设备的工作状态,从而确保家庭成员呼吸到健康、清新的空气。
  2. 办公室和会议室:在封闭的办公环境中,空气质量同样重要。该系统可以实时检测空气质量,并在超标时自动开启通风设备,避免员工因空气质量不佳而感到不适,提高工作效率。
  3. 学校和教育机构:在教室、图书馆等场所,学生的健康和学习效率都与空气质量息息相关。安装该系统可以确保学生在一个舒适、安全的环境中学习和生活。
  4. 博物馆和艺术品展馆:在这些对空气质量要求较高的场所,该系统可以实时监测并控制空气质量,避免空气中的污染物对文物和艺术品造成损害。
  5. 工业车间和仓库:在一些可能存在有毒有害气体或粉尘的工业车间和仓库中,该系统可以作为安全监测系统的一部分,及时发现并处理危险情况,确保工人的安全和生产的顺利进行。
  6. 公共场所:如商场、医院、酒店等公共场所,人流量大,空气质量容易受到影响。安装该系统可以实时监测并改善空气质量,提高顾客的舒适度和满意度。

=======================================

6,资料领取

资料可以点击链接进行获取免费领取单片机资料

在这里插入图片描述

评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值