• 方案介绍
  • 相关推荐
申请入驻 产业图谱

基于STM32物联网WiFi云平台温湿度烟雾报警器设计

8小时前
117
加入交流群
扫码加入
获取工程师必备礼包
参与热点资讯讨论

 

基于STM32物联网WiFi云平台温湿度烟雾报警器设计

本设计包含proteus仿真+程序代码+设计报告+讲解视频

一、开发环境

仿真图:proteus 8.17

程序编译器:keil 5

编程语言:C语言

设计编号:C0134

二、主要功能

STM32物联网WiFi云平台温湿度烟雾报警器仿真设计

  1. 烟雾采集传感器选用MQ-2,由于该传感器输出的是模拟信号,STM32内部ADC将模拟信号转为数字信号

proteus仿真使用电位器模拟;

  1. 温湿度采集使用DHT11数字传感器;
  2. 显示设备使用OLED,可以在屏幕上显示实时烟雾浓度值、温湿度值等信息;
  3. 报警模块则采用蜂鸣器和LED灯组成,烟雾浓度超过阈值蜂鸣器会鸣叫报警,灯光闪烁;
  4. 系统带有通风风扇,烟雾浓度高的时候开启;
  5. 设计采用1个按键作为操作输入设备,可以用来关闭报警;

6.通过WIFI模块ESP01S将数据实时上传至物联网云平台,仿真中使用串口通信模拟。

资料下载链接:

KEY_C0134 STM32远程WIFI温湿度烟雾监测报警OLED显示

链接: https://pan.baidu.com/s/1a5ZDB_Z1Ac4AYOm4tLU0rg?pwd=yzis

提取码: yzis

以下为本设计资料展示:

三、仿真设计

打开仿真工程,双击proteus中的单片机,选择hex文件路径,然后开始仿真。

四、程序代码

程序是用keil5 mdk版本打开的,如果打开有问题,核实下keil的版本。程序有注释可以结合讲解视频理解。

//单片机头文件#include "stm32f10x.h"//网络协议层#include "onenet.h"//网络设备#include "esp8266.h"//硬件驱动#include "delay.h"#include "usart.h"#include "beep.h"#include "led.h"#include "fan.h"#include "key.h"#include "dht11.h"#include "oled.h"#include "mq2.h"#include "fan_pwm.h"//C库#include <string.h>#include <stdio.h>#define ESP8266_ONENET_INFO		"AT+CIPSTART=\"TCP\",\"mqtts.heclouds.com\",1883rn"void Hardware_Init(void);void Display_Init(void);void Refresh_Data(void);u8 temp,humi,fan_adj;float mq2_vol,smog_th=200.0;uint8_t Fan_Status=0;uint8_t Beep_Status;uint8_t Status_Change;/**************************************************************	函数名称:	main**	函数功能:	**	入口参数:	无**	返回参数:	0**	说明:		*************************************************************/int main(void){    DHT11_Data_TypeDef DHT11_Data;		unsigned short timeCount = 0;	//发送间隔变量		unsigned char *dataPtr = NULL;		uint8_t smog_lock=0;		Hardware_Init();				//初始化外围硬件		ESP8266_Init();					//初始化ESP8266////	UsartPrintf(USART_DEBUG, "Connect MQTTs Server...rn");//	OLED_Clear(); OLED_ShowString(0,0,"Connect MQTTs Server...",16);//	while(ESP8266_SendCmd(ESP8266_ONENET_INFO, "CONNECT"))//		DelayXms(500);////	UsartPrintf(USART_DEBUG, "Connect MQTT Server Successrn");//	OLED_ShowString(0,4,"Connect MQTT Server Success",16); DelayXms(500);//	OLED_Clear(); OLED_ShowString(0,0,"Device login ...",16);//	while(OneNet_DevLink())			//接入OneNET//	{//		ESP8266_SendCmd(ESP8266_ONENET_INFO, "CONNECT");//		DelayXms(500);//	}		//	OneNET_Subscribe();		Display_Init();//	Led_Set(LED_ON);	mq2_vol=65;	temp=25;	humi=45;	while(1)	{				if(++timeCount >= 100)									//发送间隔5s		{//			DHT11_Read_Data(&temp,&humi);			if(DHT11_Read_TempAndHumidity(&DHT11_Data) == SUCCESS) {                humi = DHT11_Data.humi_int;                temp = DHT11_Data.temp_int;            }			//			UsartPrintf(USART_DEBUG, "OneNet_SendDatarn");			OneNet_SendData();									//发送数据						timeCount = 0;			ESP8266_Clear();				  mq2_vol=MQ2_GetData_PPM();		  UsartPrintf(USART_DEBUG, "mq2_data----%.2frn",mq2_vol);		 	if(Status_Change){				Status_Change=0;				Display_Init();			}		}				dataPtr = ESP8266_GetIPD(0);		if(dataPtr != NULL)			OneNet_RevPro(dataPtr);				Refresh_Data();				/***利用smog_lock进行自锁操作,避免重复无效控制,超阈值后,只执行一次,实现蜂鸣器可以被手动按停,		直到降到阈值以下,才解锁,进入下轮阈值检测***/		if(mq2_vol>smog_th && smog_lock==0)		{			smog_lock = 1;			Fan_Set(FAN_ON);			Beep_Set(BEEP_ON);		}		if(mq2_vol<smog_th && smog_lock==1)		{			smog_lock = 0;		}				if(smog_lock && (timeCount>50)){			Led_Set(LED_ON);		}else{			Led_Set(LED_OFF);		}				DelayMs(10);		}}/**************************************************************	函数名称:	Hardware_Init**	函数功能:	硬件初始化**	入口参数:	无**	返回参数:	无**	说明:		初始化单片机功能以及外接设备*************************************************************/void Hardware_Init(void){		NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);	//中断控制器分组设置	Delay_Init();									//systick初始化		Usart1_Init(115200);							//串口1,打印信息用		Usart2_Init(115200);							//串口2,驱动ESP8266用	  Key_Init();	Led_Init();		Beep_Init();	DHT11_Init();	OLED_Init();			//初始化OLED  	//	while(DHT11_Init())//	{////		UsartPrintf(USART_DEBUG, "DHT11 Error rn");//		OLED_ShowString(0,0,"DHT11 Error",16);//		DelayMs(1000);//	}	  Fan_Init();		UsartPrintf(USART_DEBUG, " Hardware init OKrn");	OLED_Clear(); OLED_ShowString(0,0,"Hardware init OK",16); DelayMs(1000);	}void Display_Init(void){		OLED_Clear();		OLED_ShowCHinese(0,0,1);//温	OLED_ShowCHinese(18,0,2);//度	OLED_ShowCHinese(36,0,0);//:	OLED_ShowCHinese(72,0,3);//℃		OLED_ShowCHinese(0,3,4);//湿	OLED_ShowCHinese(18,3,5);//度	OLED_ShowCHinese(36,3,0);//:	OLED_ShowString(72,3,"%",16);//%		OLED_ShowCHinese(0,6,10);//烟	OLED_ShowCHinese(18,6,11);//雾	OLED_ShowCHinese(36,6,0);//:		}void Refresh_Data(void){    static u8 changeflag = 0;    static u8 last_status = 0;  // 记录上一次的Status_Change状态    char buf[5];     if(Status_Change) {        // 如果状态从非Status_Change变为Status_Change,才执行OLED_Clear()        if(last_status == 0) {            OLED_Clear();        }                OLED_ShowCHinese(0,4,10);   //烟        OLED_ShowCHinese(18*1,4,11);//雾        OLED_ShowCHinese(18*2,4,12);//阈        OLED_ShowCHinese(18*3,4,13);//值        OLED_ShowCHinese(18*4,4,0); //:                memset(buf, 0, sizeof(buf));        sprintf(buf, "%4.0fppm", smog_th);        OLED_ShowString(18*2,6,(u8*)buf,16); //烟雾阈值    }    else {        // 原有的其他代码...        sprintf(buf, "%2d", temp);        OLED_ShowString(54,0,(u8*)buf,16); //温度值                sprintf(buf, "%2d", humi);        OLED_ShowString(54,3,(u8*)buf,16); //湿度值                sprintf(buf, "%4.0f PPM", mq2_vol);        OLED_ShowString(54,6,(u8*)buf,16); //烟雾测量值    }        last_status = Status_Change;  // 更新状态记录}

程序流程图:

五、设计说明书

10761字,内容包括硬件设计、软件设计、结论等。

六、资料清单&下载链接

资料下载链接:

链接: https://pan.baidu.com/s/1a5ZDB_Z1Ac4AYOm4tLU0rg?pwd=yzis

提取码: yzis

相关推荐