STM32项目分享:智能家居安防系统

目录

一、前言

二、项目简介

1.功能详解

2.主要器件

三、原理图设计

四、PCB硬件设计

1.PCB图

2.PCB板及元器件图

五、程序设计

六、实验效果

七、资料内容

项目分享


一、前言

项目成品图片:

哔哩哔哩视频链接:

https://www.bilibili.com/video/BV1Y64y1P7ti/?share_source=copy_web&vd_source=097fdeaf6b6ecfed8a9ff7119c32faf2

(资料分享见文末)

二、项目简介

1.功能详解

基于STM32的智能家居安防系统

功能如下:

  1. 密码锁:通过1×4键盘输入开机密码
  2. 采集温湿度:系统通过DHT11模块采集温湿度
  3. 煤气泄漏报警:通过MQ-7一氧化碳传感器判断室内危险气体是否超标
  4. 火灾报警:通过火焰传感器判断室内是否着火
  5. 门磁防盗报警:通过门磁开关判断室内是否有人闯入
  6. 远程照明控制:系统可远程控制LED灯开关
  7. 实时时钟显示:实时时间(年月日周时分秒)显示
  8. OLED显示:显示温湿度、时间、日期、报警信息等等
  9. 蜂鸣器报警:危险情况下本地蜂鸣器触发报警
  10. WIFI通信:使用ESP8266等进行WiFi远程通信
  11. APP功能:手机APP包括功能有修改系统时间、显示当前温湿度信息、显示危险情况报警信息、控制照明灯开关

2.主要器件

  • STM32F103C8T6最小系统板
  • DHT11温湿度传感器
  • OLED显示屏(7针SPI协议)
  • WiFi模块(ESP8266-01s)
  • MQ-7一氧化碳传感器
  • 门磁模块
  • 1×4矩阵键盘
  • DS1302时钟模块
  • 火焰传感器
  • 蜂鸣器
  • LED灯

三、原理图设计

四、PCB硬件设计

1.PCB图

2.PCB板及元器件图

五、程序设计

cpp 复制代码
int main(void)
{
  HAL_Init();
  SystemClock_Config();
  HAL_Delay(90);
  MX_GPIO_Init();
  MX_USART1_UART_Init();//串口1初始化
  OLED_Init();//oled初始化  
  OLED_Clear(); //清屏
  DHT_Init();
  ds1302_init();//RTC初始化
  DS1302_WriteTime();		
  buzz_init();//蜂鸣器
  ir_init();//火焰
  mq2_init();//煤气
  butt_init();//按键
  fan_init();//风扇
  for(int i=0;i<10;i++)
  {
      LEDON;
      HAL_Delay(100);
      LEDOFF;
      delay_us(1000);
  }
  showbegin();//开机动画
  delay_us(10);
  while (1)
  {
	  if(HAL_GPIO_ReadPin(GPIOB,GPIO_PIN_0) == 0 || HAL_GPIO_ReadPin(GPIOB,GPIO_PIN_1) == 0 || HAL_GPIO_ReadPin(GPIOB,GPIO_PIN_15) == 1)//进入警报模式
	  {
		  if(jingbflag)
		  {
		      jingbao =1;//警报开启
		      if(HAL_GPIO_ReadPin(GPIOB,GPIO_PIN_0) == 0)//火灾警报
		      {
			      huo = 22;//火焰状态着火
		          HAL_GPIO_WritePin(GPIOA,GPIO_PIN_7,GPIO_PIN_SET);
		          OLED_Clear();
		          OLED_ShowCHinese(47,0,10);
		          OLED_ShowCHinese(64,0,11);		  
		          OLED_ShowCHinese(0,2,21);
		          OLED_ShowCHinese(17,2,22);
		          OLED_ShowCHinese(34,2,23);  
		          showhuo();//显示火灾图片
		      }
		      else//火焰状态正常
		      {
			      huo = 11;
		      }
			  if(HAL_GPIO_ReadPin(GPIOB,GPIO_PIN_1) == 0)//煤气报警
		      {
			      mei = 22;
			      HAL_GPIO_WritePin(GPIOA,GPIO_PIN_7,GPIO_PIN_SET);
                  HAL_GPIO_WritePin(GPIOB,GPIO_PIN_8,GPIO_PIN_SET);
		          OLED_Clear();
			      OLED_ShowCHinese(24,0,10);//显示文字
			      OLED_ShowCHinese(41,0,11);
		          OLED_ShowCHinese(0,2,49);
			      OLED_ShowCHinese(17,2,50);//
			      OLED_ShowCHinese(34,2,51);//
			      OLED_ShowCHinese(51,2,52);//
			      showmei();//显示泄漏图片
		      }
		      else
		      {
			      mei = 11;
		      }
		      if(HAL_GPIO_ReadPin(GPIOB,GPIO_PIN_15) == 1)//防盗警报
		      {
			      ren =22;
			      HAL_GPIO_WritePin(GPIOA,GPIO_PIN_7,GPIO_PIN_SET);
		  	      OLED_Clear();
			      OLED_ShowCHinese(24,0,10);
			      OLED_ShowCHinese(41,0,11);//显示汉字
			      OLED_ShowCHinese(0,2,12);
			      OLED_ShowCHinese(17,2,13);//
			      OLED_ShowCHinese(34,2,14);//
			      OLED_ShowCHinese(51,2,15);//
		          showman();//显示防盗图片
		      }
		      else
		      {
			      ren =11;
		      }
	      }
	  }
	  else//正常模式
	  {
		  huo = 11;
		  mei = 11;
		  ren = 11;
		  if(jingbao == 1)
		  {
			  OLED_Clear();
			  jingbao = 0;//警报解除
		  }
		  HAL_GPIO_WritePin(GPIOA,GPIO_PIN_7,GPIO_PIN_RESET);
          HAL_GPIO_WritePin(GPIOB,GPIO_PIN_8,GPIO_PIN_RESET);
		  DHT_ReadData();
          OLED_ShowCHinese(0,6,7);//显示温度汉字
		  OLED_ShowCHinese(15,6,8);
		  OLED_ShowChar(28,6,':');
		  OLED_ShowCHinese(68,6,9);//显示湿度汉字
		  OLED_ShowCHinese(83,6,8);
		  OLED_ShowChar(96,6,':');
	  	  OLED_ShowNum(35,6,DHT_data[2],2,16);//显示温度数值
		  OLED_ShowCHinese(50,6,48);
		  OLED_ShowChar(57,6,'C');
		  OLED_ShowNum(104,6,DHT_data[0],2,16);//显示湿度数值
          OLED_ShowChar(121,6,'%');
          showtime(); 
      }
      int num = search(rxdata,18,'Z');
      if(num!=-1)
      {
          rxok = 1;
          int begin = 0;
          for(int i=0;i<18;i++)
          {
              if(num<18)
              {
                  rx_normal_data[i]=rxdata[num++];
              }
              else
              {
                  rx_normal_data[i]=rxdata[begin++];
              }
          }
      }
      sprintf(senddata,"%d-%d-%d-%d-%d",DHT_data[2],DHT_data[0],huo,mei,ren);//将温度数值。湿度数值。火灾状态、煤气、防盗、整合到数组
      AL_UART_Transmit_IT(&huart1,"AT+CIPSEND=0,14\r\n",sizeof("AT+CIPSEND=0,14\r\n"));//发送初始化
      HAL_Delay(300);
      HAL_UART_Transmit_IT(&huart1,senddata,14);//启动发送向手机发送数据
      HAL_Delay(500);
  }

六、实验效果

七、资料内容

项目分享

相关推荐
智者知已应修善业40 分钟前
【51单片机用数码管显示流水灯的种类是按钮控制数码管加一和流水灯】2022-6-14
c语言·经验分享·笔记·单片机·嵌入式硬件·51单片机
智商偏低7 小时前
单片机之helloworld
单片机·嵌入式硬件
青牛科技-Allen8 小时前
GC3910S:一款高性能双通道直流电机驱动芯片
stm32·单片机·嵌入式硬件·机器人·医疗器械·水泵、
白鱼不小白10 小时前
stm32 USART串口协议与外设(程序)——江协教程踩坑经验分享
stm32·单片机·嵌入式硬件
S,D11 小时前
MCU引脚的漏电流、灌电流、拉电流区别是什么
驱动开发·stm32·单片机·嵌入式硬件·mcu·物联网·硬件工程
芯岭技术14 小时前
PY32F002A单片机 低成本控制器解决方案,提供多种封装
单片机·嵌入式硬件
youmdt14 小时前
Arduino IDE ESP8266连接0.96寸SSD1306 IIC单色屏显示北京时间
单片机·嵌入式硬件
嘿·嘘14 小时前
第七章 STM32内部FLASH读写
stm32·单片机·嵌入式硬件
Meraki.Zhang15 小时前
【STM32实践篇】:I2C驱动编写
stm32·单片机·iic·驱动·i2c
几个几个n17 小时前
STM32-第二节-GPIO输入(按键,传感器)
单片机·嵌入式硬件