基于STM32的指纹刷卡智能门禁系统设计(RC522 + AS608 + 蓝牙远程开锁 + 断电记忆)
一把机械锁,钥匙丢了要换锁、被复制了防不住、租客退租还得换芯。本文带来一套基于 STM32F103C8T6 的多方式智能门禁系统:刷卡(RC522)、指纹(AS608)、密码(矩阵键盘)三种本地开锁方式任选其一,手机蓝牙(JDY-31)还能远程开锁;密码输错蜂鸣器即刻报警;所有指纹、卡片、密码数据写入 AT24C02 EEPROM,断电也不丢失。住宅、办公室、公共场所的门禁管理需求,一套系统全兜住。
一、系统功能总览
| 功能模块 | 具体说明 |
|---|---|
| RFID 刷卡开锁 | RC522 识别 MIFARE 卡唯一序列号,验证权限后开锁 |
| 指纹开锁 | AS608 光学识别指纹,支持注册、验证、删除,最多存 1500 枚 |
| 密码开锁 | 4×4 矩阵键盘输入 6 位密码,正确开锁,错误蜂鸣报警 |
| 蓝牙远程开锁 | JDY-31 蓝牙连接手机 APP,随时远程控制门的开关 |
| 锁具驱动 | 步进电机模拟开锁动作,验证通过即执行 |
| 数据存储 | AT24C02 EEPROM 保存指纹、卡片与密码数据,断电不丢失 |
| 状态显示 | 显示屏实时显示系统状态与操作提示 |
| 密码管理 | 支持密码修改,新密码输入界面完成 6 位密码更换 |
二、核心模块选型对比
2.1 主控芯片:STM32F103C8T6 vs LPC1768
| 对比项 | 方案一:STM32F103C8T6 | 方案二:LPC1768 |
|---|---|---|
| 内核 | Cortex-M3 @72MHz | Cortex-M3 @120MHz |
| Flash/RAM | 64KB / 20KB | 512KB / 64KB |
| GPIO | 37 个,够用 | 70 个,本系统用不上 |
| 功耗 | 低功耗特性突出 | 功耗略高 |
| 价格 | 约 10 元 | 约 35 元 |
选择方案一(STM32F103C8T6)。门禁系统虽模块多,但均为轻量外设,C8T6 凭稳定性、低功耗与广泛的开发支持完全胜任,性价比远超性能过剩的 LPC1768。
2.2 刷卡模块:RC522 vs PN532
| 对比项 | 方案一:RC522 | 方案二:PN532 |
|---|---|---|
| 协议支持 | MIFARE 系列(ISO14443-A) | 多协议(含更远读写距离) |
| 接口 | SPI | I2C/SPI/UART 三选 |
| 读写距离 | 约 5cm,覆盖常规场景 | 可超 10cm |
| 成本与难度 | 低成本、易集成 | 更高更复杂 |
选择方案一(RC522)。门禁刷卡距离本就要求贴近读写,RC522 的性能完全覆盖标准场景,SPI 集成简单、成本优势明显。
2.3 指纹模块:AS608 vs FPM10A
| 对比项 | 方案一:AS608 | 方案二:FPM10A |
|---|---|---|
| 存储容量 | 最多 1500 枚指纹 | 同级 |
| 通信接口 | UART,集成简单 | UART |
| 防护设计 | 常规室内 | 防水防尘,适合户外 |
| 开发资料 | 文档与示例代码完善 | 相对较少 |
| 价格 | 约 60 元 | 约 120 元 |
选择方案一(AS608)。室内门禁对防水防尘无硬性要求,AS608 识别精度够高、1500 枚容量绰绰有余,完善的开发文档大幅缩短集成周期,价格还便宜一半。
2.4 密码输入:4×4 矩阵键盘 vs 电容触摸按键
| 对比项 | 方案一:矩阵键盘 | 方案二:电容触摸按键 |
|---|---|---|
| 结构 | 行列扫描,8 线接 16 键 | 电容感应,无机械触点 |
| 引脚占用 | 极少 | 每键一路或矩阵 |
| 寿命 | 机械触点,寿命长 | 无机械磨损,寿命极长 |
| 成本 | 极低,技术成熟 | 较高 |
选择方案一(4×4 矩阵键盘)。行列交叉扫描的结构把 16 个按键压缩到 8 个 GPIO,成本低、实现成熟,性价比项目的不二之选。
2.5 无线模块:JDY-31 蓝牙 vs NRF24L01
| 对比项 | 方案一:JDY-31(蓝牙4.0) | 方案二:NRF24L01 |
|---|---|---|
| 连接对象 | 手机直连,免网关 | 需配对端接收设备 |
| 功耗 | 低功耗,利于电池续航 | 功耗较低 |
| 通信范围 | 短距离,门禁场景足够 | 空旷 100 米以上 |
| 配置方式 | AT 指令,集成便捷 | 私有协议开发 |
选择方案一(JDY-31)。远程开锁的操作端就是用户手机,蓝牙点对点直连最直接;NRF24L01 还需额外布设接收端,本系统通信范围有限、功耗限制严格,JDY-31 是更优解。
三、系统接线总表
| 模块 | 引脚 | 连接 STM32 引脚 | 备注 |
|---|---|---|---|
| RC522 | SDA/SCK/MISO/MOSI | PA4/PA5/PA6/PA7 | SPI1,SDA 为片选 |
| RC522 | RST | PB0 | 模块复位,IRQ 悬空,3.3V 供电 |
| AS608 | TX/RX | PA10/PA9 | USART1 交叉相连,3.3V 供电 |
| JDY-31 | TXD/RXD | PA3/PA2 | USART2 交叉相连,3.3V 供电 |
| 4×4 矩阵键盘 | ROW0~ROW3 | PB8/PB9/PB10/PB11 | 行线输出扫描 |
| 4×4 矩阵键盘 | COL0~COL3 | PA0/PA1/PA8/PA12 | 列线输入读取 |
| 步进电机(模拟锁具) | IN1~IN4 | PB12/PB13/PB14/PB15 | 经驱动电路,四相八拍转动开锁 |
| OLED12864 | SCL/SDA | PB6/PB7 | I2C 总线显示状态 |
| AT24C02 | SDA/SCL | PB7/PB6 | 与 OLED 共享 I2C,A0~A2 接地,地址 0xA0/0xA1 |
| 蜂鸣器 | I/O | PB5 | 三极管驱动,密码错误报警 |
接线说明:AT24C02 与 OLED 挂载同一 I2C 总线,靠设备地址区分(EEPROM 写 0xA0、读 0xA1);RC522 与 AS608 分别占用 SPI1 与 USART1,各通信通道互不干扰。
四、系统软件设计
4.1 主程序流程
系统上电后依次初始化 GPIO、SPI、UART 与显示屏,进入主循环同时轮询指纹检测、矩阵键盘扫描、蓝牙开锁指令与 RFID 刷卡识别四路事件:检测到刷卡添加键即进入刷卡添加界面,成功读取卡信息后存入缓存区;按下指纹添加键进入指纹添加界面,可切换指纹编号,两次录入一致即保存;按下删除键可按编号删除指定指纹;未进入管理流程时持续判断密码输入,正确即开锁,密码修改键进入新密码输入界面完成 6 位新密码保存;输入错误立即触发蜂鸣器报警;收到手机 APP 蓝牙指令则远程解锁。主程序骨架如下:
int main(void)
{
System_Init(); // GPIO/SPI1/USART1~2/I2C 初始化
OLED_Init();
RC522_Init(); // 复位 + 寄存器配置 + 开天线
AS608_Init(); // 串口波特率设置
Read_Data_From_EEPROM(); // 断电恢复指纹/卡片/密码数据
while (1)
{
if (RFID_Card_Detected()) // 刷卡事件
if (Check_Card(card_uid)) // 权限验证
Unlock_Motor(); // 开锁并显示
if (AS608_Finger_Detected()) // 指纹事件
if (AS608_Match(&fid) == OK)
Unlock_Motor();
if (Key_Scan() == KEY_FUNC) // 管理键:添加/删除/改密
Manage_Flow();
if (Password_Input_OK()) // 密码开锁
Unlock_Motor();
else if (Password_Error())
Alarm_Beep(); // 错误报警
if (BT_Cmd_Received()) // 蓝牙远程指令
if (Check_BT_Cmd())
Unlock_Motor();
Save_Data_To_EEPROM(); // 数据同步存储
}
}
4.2 刷卡识别流程
RC522 复位后按 ISO14443-A 协议配置 CRC、计时器与模式寄存器并开启天线。检测到卡片后:发送寻卡命令解析卡片类型 → 防冲突处理获取唯一序列号并校验 → 选择特定卡片 → 密码验证确认访问权限 → 读指定存储块数据或写入数据,全程 CRC 校验保证完整性。序列号与 EEPROM 中的授权列表比对,命中即开锁。
4.3 指纹识别流程
系统初始化时设置指纹模块串口波特率。用户输入管理指令进入添加或验证模式:添加指纹分四步------按下手指读取图像生成特征模板 → 重复按压二次录入 → 生成指纹模板并按编号存储 → 任一步失败即重试;验证指纹时读取图像生成特征,比对通过则显示对应指纹 ID 并开锁,未匹配则提示未找到;读取失败超过 15 次自动超时退出,防止无限等待。
4.4 键盘输入流程
矩阵键盘按"初始化---扫描---处理"三段工作:行线配置为输出并全部置高防止误触发;扫描时逐行拉低、其余保持高电平,读取列线状态,某列检测到低电平即可结合当前行号定位按键;加入软件去抖动确保稳定,扫描完毕行线恢复高电平进入下一周期。按键值映射为数字 0~9 与功能键,支撑 6 位密码输入与管理操作。
4.5 数据存储与远程开锁流程
AT24C02 以 I2C 协议读写,A0~A2 接地时设备地址为 0xA0(写)/0xA1(读)。指纹编号、卡片序列号与密码数据按页写入 EEPROM,每次管理操作后同步更新,断电重启时系统从 EEPROM 恢复全部授权数据。JDY-31 经 AT 指令完成串口透传配置,手机 APP 发送的开锁指令经蓝牙到达 STM32,验证指令合法性后执行开锁并回传状态。
五、系统实现与测试
5.1 硬件焊接与调试
优先焊接短引脚元件,确保焊点光滑无短路虚焊;上电后检查供电与指示灯,逐一测试 RFID 识别、矩阵键盘响应与指纹读取,各模块性能正常。
5.2 软件调试
程序在 Keil 中编译,经 ST-Link 下载并利用断点、单步调试实时监控运行,重点解决模块间数据传输与逻辑问题,优化响应速度。
5.3 功能测试
| 测试项 | 测试方法 | 系统动作 | 结果 |
|---|---|---|---|
| 刷卡开锁 | 授权卡贴近读卡区 | 识别迅速,验证后开锁并显示 | 通过 |
| 未授权卡 | 非授权卡贴近 | 拒绝开锁 | 通过 |
| 指纹开锁 | 录入指纹后按压验证 | 快速比对,准确开锁 | 通过 |
| 指纹管理 | 添加/删除指纹操作 | 双次录入一致保存,按编号删除有效 | 通过 |
| 按键开锁 | 输入正确/错误密码 | 正确开锁,错误触发蜂鸣报警 | 通过 |
| 远程开锁 | 手机 APP 发送指令 | 蓝牙响应迅速,远程开锁成功 | 通过 |
| 断电记忆 | 断电重启后验证 | 指纹/卡片/密码数据完整保留 | 通过 |
六、总结
本文实现了一套以 STM32F103C8T6 为核心的多方式智能门禁系统:RC522 刷卡、AS608 指纹、矩阵键盘密码三路本地认证加 JDY-31 蓝牙远程开锁,四种开门方式覆盖全场景;密码错误报警、授权列表比对构成双重安全防线;AT24C02 让所有授权数据断电无忧。测试表明系统功能稳定、响应迅速,在安全性、低功耗与便捷性上均有良好表现。后续可扩展 WiFi 上云远程管理、开门记录云端查询与人脸识别,向智慧社区级门禁方案持续演进。