目录
一、前言
项目成品图片:
哔哩哔哩视频链接:
(资料分享见文末)
二、项目简介
1.功能详解
基于STM32的智能家居安防系统
功能如下:
- 密码锁:通过1×4键盘输入开机密码
- 采集温湿度:系统通过DHT11模块采集温湿度
- 煤气泄漏报警:通过MQ-7一氧化碳传感器判断室内危险气体是否超标
- 火灾报警:通过火焰传感器判断室内是否着火
- 门磁防盗报警:通过门磁开关判断室内是否有人闯入
- 远程照明控制:系统可远程控制LED灯开关
- 实时时钟显示:实时时间(年月日周时分秒)显示
- OLED显示:显示温湿度、时间、日期、报警信息等等
- 蜂鸣器报警:危险情况下本地蜂鸣器触发报警
- WIFI通信:使用ESP8266等进行WiFi远程通信
- 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);
}
六、实验效果
七、资料内容