当前位置: 首页 > news >正文

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

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

目录

一、功能介绍

二、仿真图

 三、程序

一、功能介绍


1.单片机和app、OneNet云平台通过wifi进行通信
2.马达模拟家里的用电设备,可通过按键开关
3.可检测用电量,并显示在显示屏、app
4.可检测空气质量,并显示在显示屏、app
5.可检测烟雾浓度,并显示在显示屏、app
6.可检测是否有人闯入,并显示在显示屏、app
7.检测到烟雾浓度、空气质量超标时,蜂鸣器报警,并上报到app上,且自动打开风扇(马达)
8.可通过语音和app控制风扇开关
9.app上可设置烟雾浓度和空气质量报警阈值

二、仿真图

 三、程序

#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;}elsecheck = 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();}}

相关文章:

  • WebUI可视化:第5章:WebUI高级功能开发
  • react 常用钩子 hooks 总结
  • WordPress AI 原创文章自动生成插件 24小时全自动生成SEO原创文章 | 多语言支持 | 智能配图与排版
  • Docker安装(Ubuntu22版)
  • 【Java学习日记26】:方法的重载
  • yum包管理器
  • 面试中被问到mybatis与jdbc有什么区别怎么办
  • aws(学习笔记第三十九课) iot-msk-pipeline
  • 设备接入与APP(应用程序)接入华为云iotDA平台的路径元素有哪些不同?
  • ThreadLocal详解与实战指南
  • 深入浅出Sentinel:分布式系统的流量防卫兵
  • 【uniapp】vue2 搜索文字高亮显示
  • MongoDB Shard Cluster
  • 科技赋能建筑新未来:中建海龙模块化建筑产品入选中国建筑首批产业化推广产品
  • Kafka和flume整合
  • HOW - 如何模拟实现 gpt 展示答案的交互效果
  • Python判断语句-语法:if,if else,if elif else,嵌套,if else语句扁平式写法,案例
  • android jatpack Compose 多数据源依赖处理:从状态管理到精准更新的架构设计
  • kafka整合flume与DStream转换
  • #苍穹外卖# day 10-11
  • 巴基斯坦最近“比较烦”:遣返阿富汗人或致地区局势更加动荡
  • 三亚亚龙湾3.4公里岸线近岸海域使用权挂牌出让,起始价近九千万
  • 马上评丨老师要求犯错学生当众道歉,不该成被告
  • 习近平同肯尼亚总统鲁托会谈
  • 龙头券商哪家强:中信去年营收领跑,中金净利下滑
  • 停止水资源共享、驱逐武官,印度对巴基斯坦宣布多项反制措施