背景
某学校对新建的实验楼有门禁管理需求,因此我们项目组借助KOB门锁(某宝销量较高的电吸锁和电插锁品牌),搭建了前端(微信小程序和网页),服务器(java服务器和mqtt服务器),单片机(基于stm32,用于控制电插锁),实现了一套完整的门禁管理系统。
项目背景
学校有自己的局域网、服务器和交换机,为了安全和可控的保证,要求必须把我们的服务器和设备都搭建在学校内网里。因此我们的单片机必须通过网口接入交换机,和服务器连接。
项目需求
- who? 知道开门的人是谁
- when? 知道开门的时间,以及开门的持续时间
- where? 知道开的是哪个门,房间号是多少
- how? 知道开门的原因
具体实现
- 单片机:使用stm32f103,和w5500,实现了基于以太网接入的设备,通过mqtt协议,完成对电插锁的控制;通过继电器,实现对教室电路的开关控制
- 服务器:使用java和emqx,通过定时器,实现了定时开关门锁;通过账户和权限系统,实现了每个账户名下拥有部分或全部门锁的权限,以及控制门锁开关。
- 前端:具体功能包括,注册登录、开关门锁、定时开关门锁、申请某个门锁的控制权、临时申请某个门锁的控制权。
- mqtt的主题设计,为了便于后期项目推广和复制,主题设计为
/地区/学校名称/大楼名称/房间号/sub
/地区/学校名称/大楼名称/房间号/pub
其中pub主题用于向服务器推送门锁状态,
sub主题用于接收来自服务器的开关锁指令
流程
首先是连接方式:
前端(websocket)<--------->(websocket)服务器(mqtt)<--------->(mqtt)控制设备<--------->(继电器)门锁
其次是通讯流程,
1.控制设备每间隔10秒发送一次心跳包,心跳包内容为门锁状态。
2.服务器每次接收到心跳包,转发至前端展示。
3.前端查看状态,发送开门关门指令
4.控制设备接收到开门关门指令,执行指令,并立即发送门锁状态
硬件设计
1.w5500,封装了tcp/ip协议,同时支持多种网络配置方式,本项目由于设备数量大,选择了DHCP方式,自动配置ip地址,
2.KOB门锁,主要有4根线,电源线12v,接地GND,控制线(高电平开门,低电平关门),状态检测线(检测到高电平说明门未闭合,低电平说明门闭合)。
3.继电器,用小电压控制大电压开关的一种元器件。从而实现用单片机的GPIO控制门锁开关和教师电源通断。
4.lcd屏幕2.4寸,为了绑定设备信息(楼层,房间号、MQTT主题、唯一设备名称)通过二维码源码,生成设备信息,用于微信小程序自动绑定设备,从而在服务器保存信息。
未完待续。。。