# intelligent_lock **Repository Path**: cyytx/intelligent_lock ## Basic Information - **Project Name**: intelligent_lock - **Description**: 支持指纹、人脸、NFC、BLE、WiFi远程及按键密码开锁的智能锁 - **Primary Language**: C - **License**: Apache-2.0 - **Default Branch**: main - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 1 - **Forks**: 2 - **Created**: 2025-03-10 - **Last Updated**: 2025-07-30 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 智能门锁项目 ### 项目介绍: 本项目是一款支持人脸识别、指纹、NFC、BLE 和按键密码开锁的智能门锁,集成摄像头实时显示、红外唤醒、舵机控制及 LCD 交互界面,支持LVGL(GUI)用于设置密码和录入指纹等操作。支持SD卡和FATFS文件系统,可用于存储视频。通过 FreeRTOS 多任务调度提升系统响应速度与实时性。 **主要特性** - **多种开锁方式**:支持按键密码、指纹、人脸识别、NFC 卡/手机、BLE 透传、WiFi 远程指令(wifi未实现)。 - **实时显示**:当有人靠近时,会唤醒门锁,通过摄像头和LCD实时显示画面,解锁成功后立即显示开锁成功画面。 - **人性化交互**:通过LVGL实现UI页面,用于设置密码录入指纹等操作, - **技术栈**: STM32+FreeRTOS+LVGL+FATFS。 ### 实物图 本人主要是做嵌入式软件开发的,虽然硬件也还行,也能画原理图和PCB,但毕竟不是专业做硬件的,所以板子画的比较low,也就能实现功能,外形就不讲究了。 ![](assets/images/Pasted%20image%2020250513211553.png) ### 功能演示 本来是想通过视频演示的,不过github/gitee的readme.md**不支持视频文件**,只支持图片和GIF,所以下面主要通过GIF演示。另外由于github/gitee **对较大的gif文件的可能不渲染或者渲染慢**,所以下面**gif都是480p,12帧率、2倍速、256色** 所以画质会比较差。 #### 设置页面演示 设置页面通过**LVGL** 实现,通过**按键** 控制来切换不同设置页面,目前支持**按键密码,指纹识别,人脸识别** 的配置。 ![|555](assets/images/menu.gif) #### 按键密码设置演示 密码设置需要输入原密码正确,新密码才能设置。设置完成后有弹窗显示。 ![](assets/images/key.gif) #### 按键指纹NFC解锁演示 一个正常的解锁流程是**红外检测到人靠近》唤醒锁,锁状态变为待解锁 》锁各个模块唤醒》验证成功》驱动舵机解锁》显示开锁成功画面》关闭各个模块》锁状态变为IDLE.** 另外**按键,指纹可以靠中断触发,NFC靠轮询**,所以即使在红外不工作时,也可以通过这三种方式来解锁.**蓝牙,人脸识别需要红外触发唤醒** ![](assets/images/Pasted%20image%2020250514085718.png) 下面为测试演示,另外因为测试时,人一直站在锁前,红外一直处于触发状态,无法显示流程,所以下面演示中**以右下角的按键模拟红外触发** ![](assets/images/keyfingernfc.gif) #### BLE 开锁演示 检测到有人靠近后,会**唤醒锁,蓝牙开始广播**,通过手机蓝牙连接锁蓝牙后,通过**手机输入密码,通过蓝牙发送到智能锁**,智能锁接收后验证成功,会开锁. ![](assets/images/ble.gif) #### 人脸识别演示 由于是我的人脸识别模块买之前没有确认好安装方向,所以在画板时将**安装孔画反了** 导致人脸识别模块其实是**上下颠倒安装的**,而该模块只能识别正的人脸而不能识别反的人脸,所以我在人脸识别时,需要把板子给倒过来,当人脸出现在摄像头范围内时,如果是已经录入的人脸,则会迅速识别和解锁,另外我没有露脸的习惯,就给人脸加了马赛克。 ![](assets/images/face.gif) ### 硬件模块结构图 ![](assets/images/Pasted%20image%2020250304021235.png) ### 软件架构 软件基本上是使用 **APP-Service-Driver-HAL** 的结构。系统采用 **FreeRTOS** 作为核心实时操作系统,负责各并发任务的调度和通信。 **架构概述:** - **任务模型:** Application层的 **Lock_App** 及Service层的 **LVGL**, **LCD**, **camera**,**各验证模块,锁控制模块** 等核心功能均作为独立的FreeRTOS任务运行,实现了功能的并发处理** - **通信与同步:** - 架构以 **Lock_App** 任务为中心,**Lock_App** 及各Service任务之间主要通过**FreeRTOS的消息队列传、信号量、任务通知**进行数据传输,事件通知和状态同步。 - **Service任务之间原则上通过 Lock_App 统一调配,只和APP联系,不直接通过IPC互相之间联系**。 - **对于有大量数据传输或联系紧密的Service,互相直接可直接通过IPC联系**,如Camera预览数据到LCD或LVGL渲染到LCD可通过队列的方式进行直接数据交换. - **DMA与数据处理:** - Service层任务负责处理数据。**当使用DMA时,数据在Service层管理的缓冲区与HAL层控制的外设间直接传输**,当然控制走的还是service-driver-hal的方式。 ![](assets/images/Pasted%20image%2020250514162556.png)