基于STM32的智能宿舍
选题背景:
随着社会经济结构的不断变化和互联网的普及与发展,传统宿舍管理方式已经不能满足智能化管理的需求,在无人情况下难以对突发情况做出预警,更缺乏对多个宿舍进行统一管理的手段。人们对宿舍环境的舒适性、安全性、便捷性等提出了更高的要求,信息化、智能化成为高校宿舍管理系统的重要发展趋势。
意义:
将物联网技术与学生宿舍相结合,设计并实现智能宿舍系统,这对提高学生的在校生活质量具有很大的意义。所以我运用硬件和软件两大方面的技术来提升宿舍生活质量,通过手机或电脑平台进行操作,包括远程控制门锁开关,电灯,风扇,以及对宿舍环境监控的目的。科技化的宿舍会让学生们得到安心、舒适的生活。
需求分析:
1)传感器数据采集:温度、湿度、烟雾浓度、雨水浓度、是否有火等环境因素的实时监测功能。
2)安全警报模块:当有火灾发生或者烟雾浓度过高会,蜂鸣器会响应做警报提示。
3)指纹识别模块:通过录入不同指纹,当识别正确指纹时,宿舍门打开。
4)远程控制:可以在后台中远程控制宿舍门、风扇、灯等不同电器的开关。
5)宿舍服务模块:消息通知、调宿申请、报修服务。
6)水电费的查询与缴纳模块
7)后台管理:宿舍服务模块、用户管理模块、设备控制模块、安全警报模块、宿舍环境监测模块、水电费的查询与缴纳模块。
实现硬件截图:
实现软件截图:
后台管理系统实现截图:
KEIL5实现主函数:
//头文件
#include “led.h”
#include “delay.h”
#include “key.h”
#include “sys.h”
#include “usart.h”//串口TTL头文件
#include “esp8266.h”//WIFI模块头文件
#include “pbdata.h”//GPIO映射的头文件
#include “oled_iic.h”//显示屏头文件
#include “pwm.h”//PWM波驱动L298N电机模块头文件
#include “as608.h”
#include “timer.h”
#include “usart3.h”
#include “adc.h”
#include “dht11.h”
#include “lsens.h”
//网络协议层
#include “onenet.h”//MQTT协议头文件(WIFI数据上传协议)
//网络设备
#include “esp8266.h”
//c库
#include “string.h”
extern u8 flag;
u8 doorflag=0;
u8 humidityH; //湿度整数部分
u8 humidityL; //湿度小数部分
u8 temperatureH; //温度整数部分
u8 temperatureL; //温度小数部分
extern u16 smog;
u8 rain;
//灯的状态
// u8 LED0_FLAG;
// u8 LED1_FLAG;
//串口接收
u8 USART1_TX_BUF[USART_REC_LEN]; //串口1,发送缓存区
__align(4) u8 dtbuf[50]; //打印缓存器
void RCC_Configuration(void);
void GPIO_Configuration(void);
void NVIC_Configuration(void);
void USART_Configuration(void);
void Configuration_init(void)
{
extern const u8 BMP1[];
HZ= GB16_NUM();
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
RCC_Configuration(); //系统时钟初始化
NVIC_Configuration(); //设置NVIC中断分组2:2位抢占优先级,2位响应优先级
GPIO_Configuration();//端口初始化
delay_init(); //延时函数初始化
uart_init(9600);//串口1初始化
KEY_Init();
LED_Init();
uart2_init(115200);//串口2初始化
OLED_Init(); //OLED初始化
OLED_Clear();
usart3_init(57600);
pwm_init();
ADCX_Init();
DHT11_Init();//DHT11初始化
ESP8266_Init(); //初始化ESP8266
Lsens_Init();
}
DHT11_Data_TypeDef DHT11_Data;
int main(void)
{
unsigned char *dataPtr = NULL;
unsigned short timeCount = 0; //发送间隔变量
Configuration_init();
while(OneNet_DevLink()) //接入OneNET
delay_ms(500);
printf("接入onenet成功");
OLED_ShowCH(16,0,"指纹锁门禁系统");
OLED_ShowCH(16,2,"K1键添加指纹");
OLED_ShowCH(16,4,"K3键删除指纹");
OLED_ShowCH(16,6,"K5键验证指纹");
while(1)
{
if( Read_DHT11(&DHT11_Data)==SUCCESS) //“\”表示转向一下行
{
//主要用于数据上传使用
humidityH=DHT11_Data.humi_int; //湿度整数部分
temperatureH=DHT11_Data.temp_int; //温度整数部分
}
// TIM_SetCompare1(TIM3, 195);//开门
// TIM_SetCompare1(TIM3, 185);//关门
key_num=KEY_Scan(0);
if(key_num==1)
{
key_num=0;
OLED_Clear();
Add_FR();
}
if(key_num==3)
{
key_num=0;
GPIO_SetBits(GPIOE,GPIO_Pin_5);
OLED_Clear();
Del_FR();
}
if(key_num==5)
{
key_num=0;
OLED_Clear();
OLED_ShowCH(32,2,"请按手指");
press_FR();
}
if(smog>1600)
{
GPIO_SetBits(GPIOF,GPIO_Pin_2);//开风扇
}
else
{
GPIO_ResetBits(GPIOF,GPIO_Pin_2);//开风扇
}
if(++timeCount >= 100) //时间间隔5s
{
rain=Lsens_Get_Val();//获取雨水浓度
Get_ADC();
OneNet_SendData();//发送数据给onenet
timeCount = 0;
ESP8266_Clear();
printf("%d%d%d%d\r\n",smog,temperatureH,humidityH,rain);
}
dataPtr = ESP8266_GetIPD(0);//获取平台返回的数据
if(dataPtr != NULL)//如果返回数据不为空
OneNet_RevPro(dataPtr);//平台返回数据检测
}
}