1. 项目概述
这个基于STM32的RFID员工打卡门禁系统是我去年指导的一个毕业设计项目,它完美结合了嵌入式开发和物联网应用。系统采用STM32F103C8T6作为主控芯片,配合RC522 RFID模块实现员工身份识别,通过ESP-01S WiFi模块与上位机通信,最终在OLED显示屏上实时显示打卡信息。
提示:选择STM32F103C8T6是因为它性价比高,具有丰富的外设接口,完全能满足这个项目的需求。
我在设计这个系统时主要考虑了以下几个关键点:
- 低成本:整套硬件成本控制在100元以内
- 易用性:员工只需刷卡即可完成打卡
- 稳定性:经过72小时连续测试无故障
- 可扩展性:预留了添加指纹识别模块的接口
2. 硬件设计详解
2.1 核心硬件选型
主控芯片:STM32F103C8T6(蓝色pill开发板)
- 72MHz主频,20KB RAM,64KB Flash
- 支持SWD调试,开发环境友好
- 丰富的GPIO和外设接口
RFID模块:RC522
- 工作频率:13.56MHz
- 读写距离:3-5cm
- 支持ISO14443A协议
- 通过SPI接口与STM32通信
无线模块:ESP-01S
- 支持802.11 b/g/n协议
- 内置TCP/IP协议栈
- 通过AT指令控制
- 使用USART2与STM32通信
2.2 电路设计要点
电源部分:
- 采用AMS1117-3.3V稳压芯片
- 输入5V,输出3.3V给各模块供电
- 每个模块电源引脚添加0.1uF去耦电容
SPI接口连接:
code复制RC522 STM32
SCK -> PA5
MOSI -> PA7
MISO -> PA6
NSS -> PA4
RST -> PA1
注意:SPI时钟不要超过10MHz,否则可能导致RC522工作不稳定。
3. 软件系统设计
3.1 下位机程序设计
RFID读取流程:
- 初始化SPI和RC522
- 循环检测是否有卡片靠近
- 防冲突处理,获取卡片序列号
- 通过WiFi模块发送卡号到上位机
- 接收上位机返回的验证结果
- 在OLED显示打卡状态
关键代码片段:
c复制// RFID初始化
void RFID_Init(void)
{
SPI_Init();
PCD_Reset();
PCD_AntennaOn();
}
// 主循环
while(1)
{
status = PICC_IsNewCardPresent();
if(status == MI_OK)
{
status = PICC_ReadCardSerial();
if(status == MI_OK)
{
sprintf(cardID,"%02X%02X%02X%02X",
uid.uidByte[0],uid.uidByte[1],
uid.uidByte[2],uid.uidByte[3]);
ESP_SendData(cardID); // 发送卡号
}
}
delay_ms(100);
}
3.2 上位机系统设计
数据库设计:
采用简单的文本文件存储员工信息,每条记录包含:
- 员工姓名
- 卡号
- 打卡次数
- 最后打卡时间
示例记录格式:
code复制张三,5A3B7C8D,12,2023-05-20 08:30:15
李四,9E2F4A1B,8,2023-05-20 09:15:22
通信协议设计:
- 下位机->上位机:卡号(8字节HEX字符串)
- 上位机->下位机:###+员工姓名 或 ###unknown
4. 系统调试与优化
4.1 常见问题解决
问题1:RC522读卡距离不稳定
- 解决方法:调整天线匹配电路,在ANT1和ANT2引脚添加33pF电容
问题2:WiFi频繁断开
- 解决方法:增加心跳包机制,每30秒发送一次心跳
- 优化AT指令处理流程,增加超时重试
问题3:多卡同时靠近误识别
- 解决方法:软件增加防冲突处理,设置500ms的读卡间隔
4.2 性能优化技巧
- 降低SPI时钟频率到5MHz,提高RC522稳定性
- 使用DMA传输RFID数据,减少CPU占用
- OLED采用局部刷新代替全屏刷新
- 下位机添加数据缓存,网络中断时暂存打卡记录
5. 项目扩展方向
在实际部署后,可以考虑以下几个扩展方向:
- 数据可视化:使用PyQt5开发更友好的管理界面,增加考勤统计图表
- 多因子认证:增加指纹识别模块,实现卡+指纹双因素认证
- 云端同步:将数据同步到云服务器,支持多终端访问
- 考勤规则:添加迟到、早退、加班等规则判断
这个项目最让我满意的是它的稳定性,在实验室连续运行一个月没有出现任何故障。对于初学者来说,它涵盖了嵌入式开发的多个关键技术点:外设驱动、通信协议、人机交互等,是一个非常全面的练手项目。
硬件成本清单:
- STM32开发板:25元
- RC522模块:15元
- ESP-01S模块:12元
- OLED屏幕:18元
- 继电器模块:8元
- 其他配件:10元
总成本:88元