stm32单片机毕业设计——物联网机智云智能家居系统源代码程序+原理图+ESP8266wifi模块+dht11+MQ-2MQ-7MQ-135BMP280气压传感器+sg90舵机+机智云手机APP

一、设计简介

本毕业设计项目是基于STM32单片机的物联网机智云智能家居系统,包含原理图PCB手机APP。智能家居系统以STM32C8T6单片机为核心,结合多种传感器和执行器,通过ESP8266实现与机智云平台的通信,用户可通过手机APP进行远程监控和管理。系统具有网络化、数字化和智能化的特点,能够实现对家居环境的全方位监视和智能调节。

源代码资料百度网盘下载链接https://pan.baidu.com/s/1kp80vuKJtQlG6itJnDAO9g?pwd=9nen

二、功能设计

  1. 温湿度监控模块

  2. 使用DHT11温湿度传感器采集室内温湿度数据。
  3. 数据通过STM32单片机处理后,在0.96寸OLED显示屏上实时显示。
  4. 当温湿度超过设定阈值时,触发蜂鸣器和LED报警灯进行警示。
  5. 气体检测模块

  6. 使用MQ-2、MQ-7和MQ-135气体传感器检测室内可燃气体、有害气体等。
  7. 当检测到有害气体浓度超标时,系统通过蜂鸣器和LED报警灯进行警示,并通过ESP8266将报警信息上传至机智云平台。
  8. 气压监测模块

  9. 使用BMP290气压传感器监测室内气压变化。
  10. 数据通过STM32单片机处理后,可在OLED显示屏上显示,或上传至机智云平台进行远程监控。
  11. 光照强度监测模块

  12. 使用光敏电阻ADC检测室内光照强度。
  13. 当光照强度低于设定阈值时,系统可自动开启LED照明灯,或通过ESP8266发送报警信息至手机APP。
  14. 舵机控制模块

  15. 使用SG90舵机控制窗帘、窗户等家居设备的开关。
  16. 用户可通过手机APP发送控制指令至机智云平台,再通过ESP8266将指令传输至STM32单片机,最终控制舵机的动作。
  17. 智能报警模块

  18. 当系统检测到异常情况(如温湿度超标、有害气体浓度超标等)时,触发蜂鸣器和LED报警灯进行本地警示。
  19. 同时,通过ESP8266将报警信息上传至机智云平台,用户可通过手机APP接收报警信息。
  20. 远程监控模块

  21. 用户可通过机智云手机APP实时查看家居环境的温湿度、气压、光照强度等数据。
  22. 可通过手机APP发送控制指令至机智云平台,再通过ESP8266将指令传输至STM32单片机,实现对家居设备的远程控制。

三、所需硬件连接

  1. STM32最小系统板

  2. ESP8266 Wi-Fi模块

  1. BMP280气压传感器

  2. MQ-2烟雾传感器

  3. MQ-7、MQ-135气体传感器

  4. DHT11温湿度传感器

  5. 光敏电阻ADC

  6. SG90舵机

  7. 蜂鸣器、LED报警

  8. 0.96OLED显示屏

  9. 继电器模块

四、软件环境

Keil5 MDK:stm32单片机源代码程序编写及下载代码

ST-Link 驱动程序:用于下载程序到 STM32。

机智云手机APP

五、所需硬件以及传感器模块

1.1 stm32f103c8t6(1个)

  STM32F103C8T6单片机是一款非常用的单片机型号,可以方便灵活的进行嵌入式系统开发。首先,它的处理器基于Cortex-M3内核,最高工作频率达72MHz。STM32F103C8T6拥有64KB闪存和20KB SRAM,非常适合中小型单片机开发项目。

具有非常丰富的外设接口,如串口USART、SPI通信、I2C通讯、CAN通讯和USB,在与单片机外设通信方面非常方便。有多个GPIO通用IO口,定时器,中断系统,灵活配置为输入,输出、模拟输入或PWM输出,可以连接各类传感器和模块。

内部集成的12位逐次逼近型ADC和DAC,支持高精度模拟信号处理。STM32F103C8T6还支持低功耗模式,适合电池供电的应用场景。结合强大的STM32开发生态,包括库函数和工具链,可以让开发者很方便的完成单片机项目的开发。

1.2 wifi模块ESP8266(ESP01s)(1个)

一、基本信息

  • ESP-01S是安信可出品的一款功能强大的Wi-Fi模块采用ESP8266处理器,ESP-01S模块需要与主控制器(如Arduino、STM32等)进行连接,通过串口通信UART接口与单片机进行数据传输。ESP-01S是一款功能强大、易于使用的Wi-Fi模块,适用于各种物联网和智能家居应用。
  • Wi-Fi功能:支持标准的IEEE802.11 b/g/n协议和完整的TCP/IP协议栈,可以方便地与其他设备或网络进行通信。
  • 工作模式:支持STA模式和AP模式。在STA模式下,可以通过路由器连接到互联网,使手机或电脑能够实现对设备的远程控制。在AP模式下,可以作为热点,使其他设备能够连接到它。
  • AT指令支持:初始情况下,ESP-01S通常预装了Espressif提供的AT指令固件,这意味着可以通过发送简单的AT指令来控制模块的Wi-Fi连接和数据传输。
  • 二、软件配置

  • 固件烧录:用户可以根据需要进行固件烧录和配置,以满足特定的应用需求。
  • 串口通信参数:通常ESP-01S默认波特率为115200,数据位为8位,停止位为1位,无校验。
  • 1.3 MQ系列传感器(3个)

    MQ-2、MQ-7和MQ-135都是MQ系列的气体传感器模块,

  • MQ-2气体传感器所使用的气敏材料是在清洁空气中电导率较低的二氧化锡(SnO2)。当传感器所处环境中存在可燃气体时,传感器的电导率随空气中可燃气体浓度的增加而增大。利用简单的电路即可将电导率的变化转换为与该传感器气体浓度相对应的输出信号。MQ-2气体传感器对液化气、丙烷、氢气的灵敏度高,对天然气和其他可燃蒸汽的检测也很理想。这种传感器可检测多种可燃性气体,是一款适合多种应用的低成本传感器。

  • 引脚说明

  • VCC:电源正极接口,可外接3.3~5V供电电源。
  • GND:电源负极接口,可外接电源负极或地线(GND)。
  • DO:数字信号输出接口(0和1),可外接单片机的GPIO。
  • AO:模拟信号输出接口,可外接单片机的ADC采样通道。
  • MQ-7是一氧化碳传感器模块,属于气敏传感器检测报警模块。它能够灵敏地检测一氧化碳气体的浓度,并输出相应的电信号。MQ-7一氧化碳传感器模块广泛应用于家庭用气体泄漏报警器、工业用可燃气体报警器等领域,用于监测一氧化碳气体的浓度
  • 1.4 BMP280气压传感器(3个)

    BMP280是一款由博世公司推出的数字气压传感器,它采用了先进的APSM(Advanced Porous Silicon Membrane)工艺,具有小封装、低功耗的特点:

    一、外观与引脚

    BMP280传感器通常具有六个引脚,具体名称与功能如下:

  • pin1(VCC):3.3V供电,切记不可以接5V,以避免烧毁。
  • pin2(GND):接地。
  • pin3(SCL):I2C通信模式时钟信号。
  • pin4(SDA):I2C通信模式数据信号。
  • pin5(CSB):SPI通信模式下用到的引脚,片选引脚,拉低后启用。
  • pin6(SDO):传感器地址控制位。
  • 有些BMP280传感器版本可能有8个引脚,但常用的仍是上述6个引脚。

    二、功能与参数

    BMP280传感器能够测量环境温湿度和大气压强,其主要参数如下:

  • 温度测量

  • 测量范围:-40~85°C。
  • 测量误差:±0.5℃。
  • 分辨率:0.1℃。
  • 湿度测量(部分型号支持):

  • 测量范围:0%~100%。
  • 湿度响应时间:大于1秒。
  • 湿度测量误差:±2%。
  • 分辨率:0.8%。
  • 气压测量

  • 测量范围:300~1100hPa(百帕斯卡)。
  • 测量误差:±1hPa。
  • 分辨率:0.18Pa。
  • 相对精度:±0.12hPa(相当于±1米)。
  • 三、通信方式

    BMP280支持I2C和SPI两种通信方式:

  • I2C通信:通过SCL(时钟线)和SDA(数据线)进行数据传输,SDO用于设置传感器的I2C地址。
  • SPI通信:通过SCL(时钟线)、SDI(数据输入线,三线模式下为双向数据线)和SDO(数据输出线,三线模式下无用)进行数据传输,CSB用于片选。
  • 四、工作模式

    BMP280传感器有三种工作模式:

  • 睡眠模式:传感器不工作,功耗最低。
  • 触发模式:执行单次测量后,传感器进入睡眠状态,以节省资源。
  • 正常模式:传感器在活动测量周期和非活动待机周期之间自动循环。
  • 五、应用与特点

    BMP280传感器广泛应用于无人机定高、天气监控、增强GPS导航、室内导航、户外休闲和体育应用、天气预报、医疗保健(如肺活量测定)等领域。其特点包括:

    六、使用注意事项

  • 在使用BMP280传感器时,需要注意供电电压不能超过3.3V,以避免损坏传感器。
  • 在进行数据采集之前,需要对传感器进行初始化,包括读取补偿参数、设置工作模式、配置过采样参数等。
  • 在读取数据时,需要按照数据手册中的说明进行寄存器操作,以确保数据的正确性和稳定性。
  • 六、原理图及设计流程图

    七、程序代码

    #include "sys.h"
    #include "usart.h"
    #include "led.h"
    #include "timer.h"
    #include "ADC.h"
    #include "usart3.h"
    #include "key.h"
    #include "oled.h"
    #include "math.h"
    #include "dht11.h"
    #include "bmp280.h"
    #include "gizwits_product.h" 
    
    u32 STM32_xx0=0X4E4C4A;
    u32 STM32_xx1=0X364B1322;
    u32 STM32_xx2=0X132D13  ;
    
    #define FLASH_SAVE_ADDR 0x08010000
    
    u8 buff[30];//参数显示缓存数组
    u8 count;
    dataPoint_t currentDataPoint;//云端数据点
    u8 wifi_sta;//wifi连接状态标志
    u8 mode=0;//模式控制自动和手动
    u8 NTP_sta=0;//网诺时间获取状态
    u8 display_contrl=0;
    u8 curtain_flag=0;
    u8 last_curtain_flag=0;
    
    extern u8 DHT11_Temp,DHT11_Hum;		//温湿度
    u16 Pre;							//气压检测值
    u16 gz_value;						//光照检测值			
    u16 m2_value;						//烟雾检测值
    u16 m7_value;						//一氧化碳检测值
    u16 m135_value;						//空气质量检测值
    
    u16 A_DHT11_Temp=35;				//温度阈值   			 高于阈值时报警
    u16 A_DHT11_Hum=20;					//湿度阈值				 低于阈值时报警
    u16 A_pre=1500;							//气压阈值				 低于阈值时报警
    u16 A_gz_value=1000;				//光照强度阈值		 低于阈值时打开窗帘和照明灯
    u16 A_m2_value=4000;				//烟雾阈值				 高于阈值时报警
    u16 A_m7_value=4000;				//一氧化碳阈值  	 高于阈值时报警
    u16 A_m135_value=1500;			//空气质量阈值		 低于阈值时报警
    
    //协议初始化
    void Gizwits_Init(void)
    {	
        TIM3_Int_Init(9,7199);//1MS系统定时
        usart3_init(9600);//WIFI初始化
        memset((uint8_t*)&currentDataPoint, 0, sizeof(dataPoint_t));//设备状态结构体初始化
        gizwitsInit();//缓冲区初始化
    }
    
    //数据采集
    void userHandle(void)
    {
        currentDataPoint.valueLED=!LED0;
        currentDataPoint.valueCurtain=curtain_flag;
        currentDataPoint.valueTemp=DHT11_Temp;
        currentDataPoint.valueHum=DHT11_Hum;
        currentDataPoint.valuePre=Pre;
        currentDataPoint.valueGZ_Value=gz_value;
        currentDataPoint.valueMQ2_Value=m2_value;
        currentDataPoint.valueMQ7_Value=m7_value;
        currentDataPoint.valueMQ135_Value=m135_value;
    }
    
    void Get_Data(u16 count);//获取传感器数据
    void WIFI_Contection(u8 key);//WiFi连接控制
    void Canshu_Change(u8 key);//系统参数调节
    void Mode_Change(u8 key);//模式切换
    void BUJING_Cotrol(u8 mode,u16 time,u16 count);
    
    int main(void)
    {
        u8 t=0;
        int key_value;		//按键值
        uart_init(115200);	 		//串口初始化为115200
        delay_init();	    //延时函数初始化
        NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//设置中断优先级分组为组2:2位抢占优先级,2位响应优先级
        Adc1_Channe_Init();			//ADC通道初始化
        KEY_Init();					//按键引脚初始化
        bmp280Init();
        while(DHT11_Init());	
        LED_Init();		  			//初始化与LED连接的硬件接口
        OLED_Init();				//OLED初始化
        OLED_Clear();				//OLED清屏
        Gizwits_Init();		
        BEEP = 0;
    //	STMFLASH_Write(FLASH_SAVE_ADDR+10,&A_DHT11_Temp,2);	//开机读取温度阈值
    //	STMFLASH_Write(FLASH_SAVE_ADDR+12,&A_DHT11_Hum,2);	//开机读取湿度阈值
    //	STMFLASH_Write(FLASH_SAVE_ADDR+14,&A_pre,2);			//开机读取气压阈值
    //	STMFLASH_Write(FLASH_SAVE_ADDR+18,&A_gz_value,2);	//开机读取光照强度阈值
    //	STMFLASH_Write(FLASH_SAVE_ADDR+20,&A_m2_value,2);	//开机读取烟雾阈值
    //	STMFLASH_Write(FLASH_SAVE_ADDR+22,&A_m7_value,2);	//开机读取一氧化碳阈值
    //	STMFLASH_Write(FLASH_SAVE_ADDR+24,&A_m135_value,2);	//开机读取空气质量阈值
    	
    //	STMFLASH_Read(FLASH_SAVE_ADDR+10,&A_DHT11_Temp,2);	//开机读取温度阈值
    //	STMFLASH_Read(FLASH_SAVE_ADDR+12,&A_DHT11_Hum,2);	//开机读取湿度阈值
    //	STMFLASH_Read(FLASH_SAVE_ADDR+14,&A_pre,2);			//开机读取气压阈值
    //	STMFLASH_Read(FLASH_SAVE_ADDR+18,&A_gz_value,2);	//开机读取光照强度阈值
    //	STMFLASH_Read(FLASH_SAVE_ADDR+20,&A_m2_value,2);	//开机读取烟雾阈值
    //	STMFLASH_Read(FLASH_SAVE_ADDR+22,&A_m7_value,2);	//开机读取一氧化碳阈值
    //	STMFLASH_Read(FLASH_SAVE_ADDR+24,&A_m135_value,2);	//开机读取空气质量阈值
    
        while(1)
        {
            Get_Data(0);
            if(gz_value<=A_gz_value&&mode==0)
            {
                LED0=0;
                curtain_flag=0;
            }else if(gz_value>A_gz_value&&mode==0){
                LED0=1;
                curtain_flag=1;
            }
            if(last_curtain_flag!=curtain_flag&&mode==0)
            {
                BUJING_Cotrol(curtain_flag,3,270);
                last_curtain_flag = curtain_flag;
            }
            if(last_curtain_flag!=currentDataPoint.valueCurtain&&mode==1)
            {
                BUJING_Cotrol(currentDataPoint.valueCurtain,3,270);
                curtain_flag = currentDataPoint.valueCurtain;
                last_curtain_flag = currentDataPoint.valueCurtain;
            }	
            if(mode==1)
            {
                LED0=!currentDataPoint.valueLED;
            }
            if(DHT11_Temp>=A_DHT11_Temp||DHT11_Hum<=A_DHT11_Hum||Pre>=A_pre||m135_value<=A_m135_value||m2_value>=A_m2_value||m7_value>=A_m7_value)
            {
                //BEEP=!BEEP;
            }else BEEP = 0;
            
                    
    
            key_value = KEY_Scan(0);
            
            if(key_value==4)
            {
                display_contrl++;
            }
            if(display_contrl%2==0&&t>=10)
            {
                OLED_ShowCHinese(0,0,0);
                OLED_ShowCHinese(16,0,2);
                sprintf((char*)buff,":%2dC",DHT11_Temp);
                OLED_ShowString(32,0,buff,16);	//显示温度
                OLED_ShowCHinese(64,0,1);
                OLED_ShowCHinese(82,0,2);
                sprintf((char*)buff,":%2d%%",DHT11_Hum);
                OLED_ShowString(96,0,buff,16);//显示湿度	
                
                OLED_ShowCHinese(0,2,3);
                OLED_ShowCHinese(16,2,4);
                sprintf((char*)buff,":%2dhpa     ",Pre);
                OLED_ShowString(32,2,buff,16);//显示气压
                
                OLED_ShowCHinese(0,4,5);
                OLED_ShowCHinese(16,4,6);
                OLED_ShowCHinese(32,4,7);
                OLED_ShowCHinese(48,4,8);
                sprintf((char*)buff,":%4dppm",gz_value);
                OLED_ShowString(64,4,buff,16);//显示光照强度
                
                OLED_ShowCHinese(0,6,21);
                OLED_ShowCHinese(16,6,22);
                OLED_ShowCHinese(32,6,23);
                OLED_ShowCHinese(48,6,24);
                //sprintf((char*)buff,":%4dppm",m135_value);
                //OLED_ShowString(64,6,buff,16);//显示空气质量
                OLED_ShowString(64,6,":",16);
            }else if(display_contrl%2==1&&t>=10)
            {
                OLED_ShowCHinese(0,0,13);
                OLED_ShowCHinese(16,0,14);
                OLED_ShowCHinese(32,0,15);
                OLED_ShowCHinese(48,0,16);
                sprintf((char*)buff,":%4dppm",m2_value);
                OLED_ShowString(64,0,buff,16);//显示M2数据
                
                OLED_ShowCHinese(0,2,17);
                OLED_ShowCHinese(16,2,18);
                OLED_ShowCHinese(32,2,19);
                OLED_ShowCHinese(48,2,20);
                sprintf((char*)buff,":%4dppm",m7_value);
                OLED_ShowString(64,2,buff,16);//显示M7数据
                
                OLED_ShowCHinese(0,4,5);
                OLED_ShowCHinese(16,4,6);
                OLED_ShowCHinese(32,4,7);
                OLED_ShowCHinese(48,4,8);
                sprintf((char*)buff,":%4dppm",gz_value);
                OLED_ShowString(64,4,buff,16);//显示光照强度
                
                OLED_ShowCHinese(0,6,21);
                OLED_ShowCHinese(16,6,22);
                OLED_ShowCHinese(32,6,23);
                OLED_ShowCHinese(48,6,24);
    //            sprintf((char*)buff,":%4dppm",m135_value);
    //            OLED_ShowString(64,6,buff,16);//显示M135数据
                                               
            }
            if(t>10)
            {
              if(m135_value>100)
                {
                    OLED_ShowCHinese(80,6,23);//有人
                    OLED_ShowCHinese(96,6,24);
                    //报警
                    BEEP=!BEEP;                      
                }
                else
                {
                    OLED_ShowCHinese(80,6,25);//无人
                    OLED_ShowCHinese(96,6,24);
                    BEEP = 0;
                }
            }
    				
            userHandle();		//用户数据采集
            WIFI_Contection(key_value);//WiFi连接控制
            gizwitsHandle((dataPoint_t *)&currentDataPoint);//机智云协议处理
            
            Canshu_Change(key_value);
            
            t++;
            delay_ms(100);
        }
    }
     
    void WIFI_Contection(u8 key)//WiFi连接控制
    {
        if(key==2)
        {
            printf("WIFI进入AirLink连接模式\r\n");
            gizwitsSetMode(WIFI_AIRLINK_MODE);//Air-link模式接入
        }			
        if(key==3)
        {  
            
            printf("WIFI复位,请重新配置连接\r\n");
            gizwitsSetMode(WIFI_RESET_MODE);//WIFI复位
        }
    }
    
    void Canshu_Change(u8 key)
    {
        u8 obj=7;
        if(key==1)
        {
            BEEP=0;
            OLED_Clear();
            while(1)
            {
                key = KEY_Scan(0);
                if(key==1)
                {
                    obj++;
                    if(obj>=8)
                    {
                        obj=0;
                    }
                }
                sprintf((char *)buff,"Working md:%4d",mode);
                OLED_ShowString(8,0,buff,12);
                sprintf((char *)buff,"A_Temp    :%4d",A_DHT11_Temp);
                OLED_ShowString(8,1,buff,12);
                sprintf((char *)buff,"A_Hum     :%4d",A_DHT11_Hum);
                OLED_ShowString(8,2,buff,12);
                sprintf((char *)buff,"A_pre     :%4d",A_pre);
                OLED_ShowString(8,3,buff,12);
                sprintf((char *)buff,"A_gz_val  :%4d",A_gz_value);
                OLED_ShowString(8,4,buff,12);
                sprintf((char *)buff,"A_m2_val  :%4d",A_m2_value);
                OLED_ShowString(8,5,buff,12);
                sprintf((char *)buff,"A_m7_val  :%4d",A_m7_value);
                OLED_ShowString(8,6,buff,12);
                sprintf((char *)buff,"A_m135_val:%4d",A_m135_value);
                OLED_ShowString(8,7,buff,12);
                if(obj==0)
                {
                    OLED_ShowString(0,0," ",12);
                    OLED_ShowString(0,1,">",12);
                    OLED_ShowString(0,2," ",12);
                    OLED_ShowString(0,3," ",12);
                    OLED_ShowString(0,4," ",12);
                    OLED_ShowString(0,5," ",12);
                    OLED_ShowString(0,6," ",12);
                    OLED_ShowString(0,7," ",12);
                }
                if(obj==1)
                {
                    OLED_ShowString(0,0," ",12);
                    OLED_ShowString(0,1," ",12);
                    OLED_ShowString(0,2,">",12);
                    OLED_ShowString(0,3," ",12);
                    OLED_ShowString(0,4," ",12);
                    OLED_ShowString(0,5," ",12);
                    OLED_ShowString(0,6," ",12);
                    OLED_ShowString(0,7," ",12);
                }
                if(obj==2)
                {
                    OLED_ShowString(0,0," ",12);
                    OLED_ShowString(0,1," ",12);
                    OLED_ShowString(0,2," ",12);
                    OLED_ShowString(0,3,">",12);
                    OLED_ShowString(0,4," ",12);
                    OLED_ShowString(0,5," ",12);
                    OLED_ShowString(0,6," ",12);
                    OLED_ShowString(0,7," ",12);
                }
                if(obj==3)
                {
                    OLED_ShowString(0,0," ",12);
                    OLED_ShowString(0,1," ",12);
                    OLED_ShowString(0,2," ",12);
                    OLED_ShowString(0,3," ",12);
                    OLED_ShowString(0,4,">",12);
                    OLED_ShowString(0,5," ",12);
                    OLED_ShowString(0,6," ",12);
                    OLED_ShowString(0,7," ",12);
                }
                if(obj==4)
                {
                    OLED_ShowString(0,0," ",12);
                    OLED_ShowString(0,1," ",12);
                    OLED_ShowString(0,2," ",12);
                    OLED_ShowString(0,3," ",12);
                    OLED_ShowString(0,4," ",12);
                    OLED_ShowString(0,5,">",12);
                    OLED_ShowString(0,6," ",12);
                    OLED_ShowString(0,7," ",12);
                }
                if(obj==5)
                {
                    OLED_ShowString(0,0," ",12);
                    OLED_ShowString(0,1," ",12);
                    OLED_ShowString(0,2," ",12);
                    OLED_ShowString(0,3," ",12);
                    OLED_ShowString(0,4," ",12);
                    OLED_ShowString(0,5," ",12);
                    OLED_ShowString(0,6,">",12);
                    OLED_ShowString(0,7," ",12);
                }
                if(obj==6)
                {
                    OLED_ShowString(0,0," ",12);
                    OLED_ShowString(0,1," ",12);
                    OLED_ShowString(0,2," ",12);
                    OLED_ShowString(0,3," ",12);
                    OLED_ShowString(0,4," ",12);
                    OLED_ShowString(0,5," ",12);
                    OLED_ShowString(0,6," ",12);
                    OLED_ShowString(0,7,">",12);
                }
                if(obj==7)
                {
                    OLED_ShowString(0,0,">",12);
                    OLED_ShowString(0,1," ",12);
                    OLED_ShowString(0,2," ",12);
                    OLED_ShowString(0,3," ",12);
                    OLED_ShowString(0,4," ",12);
                    OLED_ShowString(0,5," ",12);
                    OLED_ShowString(0,6," ",12);
                    OLED_ShowString(0,7," ",12);
                }
                if(obj==0)
                {
                    if(key==3)
                    {
                        A_DHT11_Temp+=1;
                    }
                    if(key==2)
                    {
                        A_DHT11_Temp-=1;
                    }
                }
                if(obj==1)
                {
                    if(key==3)
                    {
                        A_DHT11_Hum+=1;
                    }
                    if(key==2)
                    {
                        A_DHT11_Hum-=1;
                    }
                }
                if(obj==2)
                {
                    if(key==3)
                    {
                        A_pre+=20;
                    }
                    if(key==2)
                    {
                        A_pre-=20;
                    }
                }
                if(obj==3)
                {
                    if(key==3)
                    {
                        A_gz_value+=50;
                    }
                    if(key==2)
                    {
                        A_gz_value-=50;
                    }
                }
                if(obj==4)
                {
                    if(key==3)
                    {
                        A_m2_value+=50;
                    }
                    if(key==2)
                    {
                        A_m2_value-=50;
                    }
                }
                if(obj==5)
                {
                    if(key==3)
                    {
                        A_m7_value+=50;
                    }
                    if(key==2)
                    {
                        A_m7_value-=50;
                    }
                }
                if(obj==6)
                {
                    if(key==3)
                    {
                        A_m135_value+=50;
                    }
                    if(key==2)
                    {
                        A_m135_value-=50;
                    }
                }
                if(obj==7)
                {
                    if(key==3)
                    {
                        mode+=1;
                    }
                    if(key==2)
                    {
                        mode-=1;
                    }
                    if(mode >= 2) mode = 0;
                }
                if(key==4)
                {
        //				STMFLASH_Write(FLASH_SAVE_ADDR+10,&A_DHT11_Temp,2);	//开机读取温度阈值
        //				STMFLASH_Write(FLASH_SAVE_ADDR+12,&A_DHT11_Hum,2);	//开机读取湿度阈值
        //				STMFLASH_Write(FLASH_SAVE_ADDR+14,&A_pre,2);			//开机读取气压阈值
        //				STMFLASH_Write(FLASH_SAVE_ADDR+18,&A_gz_value,2);	//开机读取光照强度阈值
        //				STMFLASH_Write(FLASH_SAVE_ADDR+20,&A_m2_value,2);	//开机读取烟雾阈值
        //				STMFLASH_Write(FLASH_SAVE_ADDR+22,&A_m7_value,2);	//开机读取一氧化碳阈值
        //				STMFLASH_Write(FLASH_SAVE_ADDR+24,&A_m135_value,2);	//开机读取空气质量阈值
                    OLED_Clear();
                    break;
                }
            
            }
        }
    }
    
    void Get_Data(u16 count)//获取传感器数据
    {
        static float bmp280_press,bmp280;				//气压
    
        DHT11_Read_Data(&DHT11_Temp,&DHT11_Hum);
    
        bmp280GetData(&bmp280_press,&bmp280,&bmp280);
        Pre = bmp280_press;
    
        gz_value   = 4096 - get_Adc_Value(0x04);
    
        m2_value   = get_Adc_Value(0x07);
    
        m7_value   = get_Adc_Value(0x05);
    
        m135_value = 4096 - get_Adc_Value(0x06);
    }
    //void Mode_Change(u8 key)
    //{
    //	if(key==2)
    //	{
    //		mode++;
    //		if(mode>=2) mode = 0;
    //	}
    //	if(mode==0) OLED_ShowString(0,0,"MODE:Auto",12); //HM
    //	if(mode==1) OLED_ShowString(0,0,"MODE:H_M_",12); //HM
    //}
    
    void BUJING_Cotrol(u8 mode,u16 time,u16 count)
        {
        if(mode==0)
        {
            while(count--)
            {
                BUJ1=1; BUJ2=0; BUJ3=0;BUJ4=0;
                delay_ms(time);
                BUJ1=0; BUJ2=1; BUJ3=0;BUJ4=0;
                delay_ms(time);
                BUJ1=0; BUJ2=0; BUJ3=1;BUJ4=0;
                delay_ms(time);
                BUJ1=0; BUJ2=0; BUJ3=0;BUJ4=1;
                delay_ms(time);
            }
        }
        if(mode==1)
        {
            while(count--)
            {
                BUJ1=0; BUJ2=0; BUJ3=0;BUJ4=1;
                delay_ms(time);
                BUJ1=0; BUJ2=0; BUJ3=1;BUJ4=0;
                delay_ms(time);
                BUJ1=0; BUJ2=1; BUJ3=0;BUJ4=0;
                delay_ms(time);
                BUJ1=1; BUJ2=0; BUJ3=0;BUJ4=0;
                delay_ms(time);
            }
        }
    }
    

    八、实物图片

    九、资料内容清单

    百度网盘资料下载链接https://pan.baidu.com/s/1kp80vuKJtQlG6itJnDAO9g?pwd=9nen

    作者:铭创电子设计

    物联沃分享整理
    物联沃-IOTWORD物联网 » stm32单片机毕业设计——物联网机智云智能家居系统源代码程序+原理图+ESP8266wifi模块+dht11+MQ-2MQ-7MQ-135BMP280气压传感器+sg90舵机+机智云手机APP

    发表回复