基于物联网的智能家居安全防护系统设计

资料下载地址:基于物联网的智能家居安全防护系统仿真(仿真+代码)

目录

一、功能介绍

二、仿真图

三、程序

一、功能介绍

1.单片机和app、OneNet云平台通过wifi进行通信

2.马达模拟家里的用电设备,可通过按键开关

3.可检测用电量,并显示在显示屏、app

4.可检测空气质量,并显示在显示屏、app

5.可检测烟雾浓度,并显示在显示屏、app

6.可检测是否有人闯入,并显示在显示屏、app

7.检测到烟雾浓度、空气质量超标时,蜂鸣器报警,并上报到app上,且自动打开风扇(马达)

8.可通过语音和app控制风扇开关

9.app上可设置烟雾浓度和空气质量报警阈值

二、仿真图

三、程序

cs 复制代码
#include "key.h"
#include "main.h"
#include "string.h"
#include "oled.h"

_DEF_KEY KeyType = {0xff};
_DEF_KEY_SHA KeySha[12] = {0};
unsigned char xing = 0;
unsigned char password[10] = {"123456" };//默认密码
unsigned char keydata[10 ] = {0};//
uint8_t counts;//按键输入次数
uint8_t errcounts;
extern uint16_t  Current_Voltage;
extern uint16_t  Current_Voltage2;
extern uint16_t  Current_Voltage3;
extern uint8_t shidu ;
extern uint8_t wendu ;
char lines = 0;
char check = 0;
_DEF_KEY_VALUE Sys_Key;
_DEF_PARA_VALUE Sys_Para =
{
    35, 15,
    35, 15,
    35, 15,
    35, 15,
};
_DEF_PARA_VALUE_STR Sys_Para_Str =
{
    "35", "15",
    "35", "15",
    "35", "15",
    "35", "15",
};

void Motor_Init(void)
{
    GPIO_InitTypeDef GPIO_InitStructure;
    __HAL_RCC_GPIOA_CLK_ENABLE();
    __HAL_RCC_GPIOB_CLK_ENABLE();
    GPIO_InitStructure.Pin = GPIO_PIN_4 | GPIO_PIN_5 | GPIO_PIN_6 | GPIO_PIN_7 | GPIO_PIN_8;
    GPIO_InitStructure.Mode = GPIO_MODE_OUTPUT_PP;
    GPIO_InitStructure.Pull = GPIO_PULLUP;
    HAL_GPIO_Init(GPIOA, &GPIO_InitStructure);
    HAL_GPIO_WritePin(GPIOA, GPIO_PIN_4 | GPIO_PIN_5 | GPIO_PIN_6 | GPIO_PIN_7 | GPIO_PIN_8, GPIO_PIN_SET);
    GPIO_InitStructure.Pin = GPIO_PIN_3;
    GPIO_InitStructure.Mode = GPIO_MODE_INPUT;
    GPIO_InitStructure.Pull = GPIO_PULLUP;
    HAL_GPIO_Init(GPIOB, &GPIO_InitStructure);

}
void Key_GPIO_Config(void)

{

    GPIO_InitTypeDef GPIO_InitStructure;


    KEY1_GPIO_CLK_ENABLE(); /*开启按键GPIO口的时钟*/
    GPIO_InitStructure.Pin = GPIO_PIN_0 | GPIO_PIN_1 | GPIO_PIN_2 | GPIO_PIN_3 | GPIO_PIN_4 | GPIO_PIN_5 | GPIO_PIN_6 | GPIO_PIN_7 | GPIO_PIN_8 | GPIO_PIN_9 | GPIO_PIN_10 | GPIO_PIN_11 | GPIO_PIN_12;
    GPIO_InitStructure.Mode = GPIO_MODE_IT_RISING;
    GPIO_InitStructure.Pull = GPIO_NOPULL;

    HAL_GPIO_Init(KEY1_GPIO_PORT, &GPIO_InitStructure);
    HAL_NVIC_SetPriority(EXTI0_IRQn, 0, 0);
    HAL_NVIC_EnableIRQ(EXTI0_IRQn);    /* 使能中断 */

    HAL_NVIC_SetPriority(EXTI1_IRQn, 0, 0);
    HAL_NVIC_EnableIRQ(EXTI1_IRQn);    /* 使能中断 */

    HAL_NVIC_SetPriority(EXTI2_IRQn, 0, 0);
    HAL_NVIC_EnableIRQ(EXTI2_IRQn);    /* 使能中断 */

    HAL_NVIC_SetPriority(EXTI3_IRQn, 0, 0);
    HAL_NVIC_EnableIRQ(EXTI3_IRQn);    /* 使能中断 */

    HAL_NVIC_SetPriority(EXTI4_IRQn, 0, 0);
    HAL_NVIC_EnableIRQ(EXTI4_IRQn);    /* 使能中断 */

    HAL_NVIC_SetPriority(EXTI9_5_IRQn, 0, 0);
    HAL_NVIC_EnableIRQ(EXTI9_5_IRQn);    /* 使能中断 */

    HAL_NVIC_SetPriority(EXTI15_10_IRQn, 0, 0);
    HAL_NVIC_EnableIRQ(EXTI15_10_IRQn);    /* 使能中断 */

}

unsigned char Key_Scan(void)
{

    if(KeySha[1].KeyTimeCnt > const_key_time) //按键去抖
    {
        //设置键
        KeySha[1].KeyStartFlag = 0;
        KeySha[1].KeyTimeCnt = 0;
        Sys_Key.KeySet += 2;
        Sys_Key.KeySet1Flag = 1;

        if(Sys_Key.KeySet == 6)
            Sys_Key.KeySet = 0;

    }

    if(KeySha[2].KeyTimeCnt > const_key_time) //按键去抖
    {
        //参数加
        KeySha[2].KeyStartFlag = 0;
        KeySha[2].KeyTimeCnt = 0;

//        if(Sys_Key.KeySet == 1)
//        {
//            Sys_Para.tempH++;

//            if(Sys_Para.tempH >= 95)
//                Sys_Para.tempH = 95;
//        }
//        else if(Sys_Key.KeySet == 2)
//        {
//            Sys_Para.tempL++;

//            if(Sys_Para.tempL >= 30)
//                Sys_Para.tempL = 30;
//        }
         if(Sys_Key.KeySet == 2)
        {
            Sys_Para.PressH++;

            if(Sys_Para.PressH >= 95)
                Sys_Para.PressH = 95;
        }
//        else if(Sys_Key.KeySet == 4)
//        {
//            Sys_Para.PressL++;

//            if(Sys_Para.PressL >= 30)
//                Sys_Para.PressL = 30;
//        }
        else if(Sys_Key.KeySet == 4)
        {
            Sys_Para.GasH++;

            if(Sys_Para.GasH >= 95)
                Sys_Para.GasH = 95;
        }
//        else if(Sys_Key.KeySet == 6)
//        {
//            Sys_Para.GasL++;

//            if(Sys_Para.GasL >= 30)
//                Sys_Para.GasL = 30;
//        }
//        else if(Sys_Key.KeySet == 7)
//        {
//            Sys_Para.humiH++;

//            if(Sys_Para.humiH >= 95)
//                Sys_Para.humiH = 95;
//        }
//        else if(Sys_Key.KeySet == 8)
//        {
//            Sys_Para.humiL++;

//            if(Sys_Para.humiL >= 30)
//                Sys_Para.humiL = 30;
//        }
    }

    if(KeySha[3].KeyTimeCnt > const_key_time) //按键去抖
    {
        //参数减
        KeySha[3].KeyStartFlag = 0;
        KeySha[3].KeyTimeCnt = 0;

//        if(Sys_Key.KeySet == 1)
//        {
//            Sys_Para.tempH--;

//            if(Sys_Para.tempH <= 35)
//                Sys_Para.tempH = 35;
//        }
//        else if(Sys_Key.KeySet == 2)
//        {
//            Sys_Para.tempL--;

//            if(Sys_Para.tempL <= 5)
//                Sys_Para.tempL = 5;
//        }
         if(Sys_Key.KeySet == 2)
        {
            Sys_Para.PressH--;

            if(Sys_Para.PressH <= 35)
                Sys_Para.PressH = 35;
        }
//        else if(Sys_Key.KeySet == 4)
//        {
//            Sys_Para.PressL--;

//            if(Sys_Para.PressL <= 5)
//                Sys_Para.PressL = 5;
//        }
        else if(Sys_Key.KeySet == 4)
        {
            Sys_Para.GasH--;

            if(Sys_Para.GasH <= 35)
                Sys_Para.GasH = 35;
        }
//        else if(Sys_Key.KeySet == 6)
//        {
//            Sys_Para.GasL--;

//            if(Sys_Para.GasL <= 5)
//                Sys_Para.GasL = 5;
//        }
//        else if(Sys_Key.KeySet == 7)
//        {
//            Sys_Para.humiH--;

//            if(Sys_Para.humiH <= 35)
//                Sys_Para.humiH = 35;
//        }
//        else if(Sys_Key.KeySet == 8)
//        {
//            Sys_Para.humiL--;

//            if(Sys_Para.humiL <= 5)
//                Sys_Para.humiL = 5;
//        }

    }
	if(KeySha[4].KeyTimeCnt > const_key_time) //按键去抖
    {
        //参数减
        KeySha[4].KeyStartFlag = 0;
        KeySha[4].KeyTimeCnt = 0;
		if(check == 0)
		{
			check = 1;
		}
		else
			check = 0;
	}


}

void DisPlay_Para(void)
{

//	sprintf(Sys_Para_Str.tempH,"%d ",Sys_Para.tempH);//转化为字符串
//	sprintf(Sys_Para_Str.tempL,"%d ",Sys_Para.tempL);//转化为字符串
//	OLED_ShowString(30,0,Sys_Para_Str.tempH);//:oled显示温度值
//	OLED_ShowString(85,0,Sys_Para_Str.tempL);//:oled显示温度值
//	OLED_ShowString(0,0,"TH:");//:
//	OLED_ShowString(55,0,"TL:");//:


    sprintf(Sys_Para_Str.PressH, "%d ", Sys_Para.PressH); //转化为字符串
    sprintf(Sys_Para_Str.PressL, "%d ", Sys_Para.PressL); //转化为字符串
    //OLED_ShowString(30, 0, Sys_Para_Str.PressH); //:oled显示温度值
    OLED_ShowString(85, 0, Sys_Para_Str.PressH); //:oled显示温度值
   // OLED_ShowString(0, 0, "PH:"); //:
    OLED_ShowString(55, 0, "PH:"); //:


    sprintf(Sys_Para_Str.GasH, "%d ", Sys_Para.GasH); //转化为字符串
    sprintf(Sys_Para_Str.GasL, "%d ", Sys_Para.GasL); //转化为字符串
    //OLED_ShowString(30, 2, Sys_Para_Str.GasH); //:oled显示温度值
    OLED_ShowString(85, 2, Sys_Para_Str.GasH); //:oled显示温度值
    //OLED_ShowString(0, 2, "FH:"); //:
    OLED_ShowString(55, 2, "FH:"); //:

//	sprintf(Sys_Para_Str.humiH,"%d ",Sys_Para.humiH);//转化为字符串
//	sprintf(Sys_Para_Str.humiL,"%d ",Sys_Para.humiL);//转化为字符串
//	OLED_ShowString(30,6,Sys_Para_Str.humiH);//:oled显示温度值
//	OLED_ShowString(85,6,Sys_Para_Str.humiL);//:oled显示温度值
//	OLED_ShowString(0,6,"HH:");//:
//	OLED_ShowString(55,6,"HL:");//:

}

void Display_Para_on_off(void)
{
    if(Sys_Key.KeySet == 1)			OLED_ShowString(30, 0, "   ");
    else if(Sys_Key.KeySet == 2)    OLED_ShowString(85, 0, "   ");
    else if(Sys_Key.KeySet == 3)    OLED_ShowString(30, 2, "   ");
    else if(Sys_Key.KeySet == 4)    OLED_ShowString(85, 2, "   ");


}

void ComPare_Para(void)
{
    if(
        Current_Voltage  >= Sys_Para.PressL && Current_Voltage  <= Sys_Para.PressH &&
        Current_Voltage2  >= Sys_Para.GasL && Current_Voltage2  <= Sys_Para.GasH



    )
    {
        HAL_GPIO_WritePin(GPIOB, GPIO_PIN_2, GPIO_PIN_SET);
        HAL_GPIO_WritePin(GPIOA, GPIO_PIN_4, GPIO_PIN_SET);

    }
    else if( Current_Voltage > Sys_Para.PressH || Current_Voltage2 > Sys_Para.GasH)
    {

        HAL_GPIO_WritePin(GPIOB, GPIO_PIN_2, GPIO_PIN_RESET);
        HAL_GPIO_WritePin(GPIOA, GPIO_PIN_4, GPIO_PIN_RESET);
    }



}
void match_password(void)
{

    ComPare_Para();

    if(Sys_Key.KeySet == 0)
    {
        if(Sys_Key.KeySet1Flag == 1)
        {
            OLED_Clear() ;
            Sys_Key.KeySet1Flag = 0;
        }

        DisPlay_Init();
        Get_Pressure_Gas_Value();

        if(check != 0)
        {
            OLED_ShowCHinese(25, 0, 3);	//有
            OLED_ShowCHinese(40, 0, 4); //人
            OLED_ShowCHinese(55, 0, 7);	//闯
            OLED_ShowCHinese(70, 0, 8); //入


        }
        else
        {

            OLED_ShowCHinese(25, 0, 14);	//无
            OLED_ShowCHinese(40, 0, 4); //人
            OLED_ShowCHinese(55, 0, 7);	//闯
            OLED_ShowCHinese(70, 0, 8); //入

        }

    }
    else
    {
        if(Sys_Key.KeySet == 2)
        {
            if(Sys_Key.KeySet1Flag == 1)
            {
                OLED_Clear() ;
                Sys_Key.KeySet1Flag = 0;
            }
        }

        Display_Para_on_off();
        DisPlay_Para();

    }

}
相关推荐
做萤石二次开发的哈哈2 小时前
海康便携球接入萤石蓝海AIoT一站式工作台:移动执法多端应用一站生成
物联网·海康威视·车牌识别·萤石开放平台·蓝海aiot一站式工作台·aiot开发·移动执法
华允物联-HUAIOT2 小时前
DTU真的不重要吗?工业路由器为何更胜一筹?
物联网·智能路由器·4g
数字新视界2 小时前
机房环境监测系统的架构优化与智能应用剖析
物联网·数据中心·动环监控·微模块机房·模块化机房
Oflycomm10 小时前
智能网联汽车渗透率攀升至38.4%,Wi-Fi 7 + 蓝牙6.0如何重塑车载无线连接?
物联网·plc·车联网·wifi7·智能网联汽车·蓝牙6.0
anew___15 小时前
从零搭建智能家居:智能插座+智能灯泡+温湿度联动,你需要做哪些准备?
智能家居
乐橙开放平台18 小时前
养老 SaaS 笔记:setMessageCallback 事件桥接 + msgType 映射 P0/P1,先 ACK 再分流值班流
笔记·物联网·音视频·智能家居
电子科技圈18 小时前
Semtech将于2026年国际物联网展(IOTE 2026)举办 LoRa®全球生态论坛
物联网·网络安全·健康医疗·制造·零售·iot·交通物流
码视野19 小时前
基于 Vue3 + Element Plus 的【基于物联网的智慧居家养老健康关怀与紧急医疗呼叫系统】设计与实现(附完整源码与PRD)
人工智能·物联网·vue3
旭华智能sunvua21 小时前
餐饮油烟物联网智能监测解决方案
物联网
深圳皮克智能技术有限公司21 小时前
AGIC x IOTE 2026 深圳物联网展 - 11B8
物联网·仓库拣货标签·电子墨水屏·电子货架标签·电子会议桌牌·电子标签·电子纸