# AB32VG1智慧门禁系统
**Repository Path**: yaoyufan/DoorLock
## Basic Information
- **Project Name**: AB32VG1智慧门禁系统
- **Description**: No description available
- **Primary Language**: Unknown
- **License**: Apache-2.0
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 5
- **Forks**: 2
- **Created**: 2021-05-12
- **Last Updated**: 2025-10-19
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
1. # 基于AB32VG1的智慧门禁系统
# 1.项目描述
因为自己之前接触过一些门禁系统的研究设计,所以在看到RT-Thread发布了中科蓝讯 AB32VG1 RISC-V开发板测评的活动之后,就想在这开发板上完成一些自己的想法。本DIY项目使用RC522射频模块来读取IC卡卡号,卡号分为管理员卡和普通卡,管理员卡无视时间限制通行,普通卡在合理时间内能够通行,通过对比SD卡中存储的卡号信息来验证卡号是否合法,然后在OLED屏上显示时间和卡号验证信息,能够在finish终端对门禁系统进行管理。
# 2.DIY过程
## 2.1硬件组成
LED灯 ----------------- 红灯表示卡号非法,绿灯表示卡号合法
RC522模块 ----------------- 用来读取IC卡卡号
OLED屏 ----------------- 显示时间和卡号验证信息
UART0串口 ------------------ finish终端,可以输入命令查看卡号记录等
RC522模块使用软件模拟SPI与AB32VG1进行通信,使用引脚:
SDA ---------- PF0
SCLK ---------- PE0
MOSI ---------- PF1
MISO ---------- PA5
OLED屏使用软件模拟I2C与AB32VG1进行通行,使用引脚:
SDA ---------- PE2
SCL ---------- PE3
## 2.2软件设计
软件中主要修改了RC522的驱动以及SSD1306驱动,其他都是在RT-Thread Settings中打开就能用,RC522的驱动是我从Hal库中移植过来的,想要借鉴的可以参考mfrc.c和mfrc.h。
整个程序流程是主要分为以下几个步骤:
1. UID卡号读取,读取卡号,将卡号通过邮箱发送给UID处理线程;
2. UID卡号处理,判断卡号与SD卡中存储的卡号是否符合,符合的话OLED屏幕显示YES并且亮绿灯,不符合显示NO并亮红灯;
3. OLED屏幕显示当前时间;
4. Finish终端可以进行门禁系统的管理,我主要设计了10个命令来进行管理,具体命令下面在说;
程序中创建了四个线程:UID卡号读取线程、UID处理线程、OLED显示线程和UID卡号验证信息线程,详细程序请看源程序。
```c
Mfrc_Thread = rt_thread_create("Mfrc_Thread", Mfrc_Thread_Entry, RT_NULL, 1024, 9, 20);//uid读取线程
if(Mfrc_Thread != RT_NULL) rt_thread_startup(Mfrc_Thread);
CardDeal_Thread = rt_thread_create("CardDeal_Thread", CardDeal_Thread_Entry, RT_NULL, 4096, 8, 20);//uid处理线程
if(CardDeal_Thread != RT_NULL) rt_thread_startup(CardDeal_Thread);
SSD1306_Thread = rt_thread_create("SSD1306_Thread", SSD1306_Thread_Entry, RT_NULL, 2048, 7, 20);//OLED显示线程
if(SSD1306_Thread != RT_NULL) rt_thread_startup(SSD1306_Thread);
```
作为一个门禁管理系统,肯定要能够存放卡号信息,以及刷卡记录等等,所以在本程序中使用了SD卡作为存储设备,在SD卡中存放了四个文件,如下图所示:

在Finish终端中设计了10个命令来进行门禁系统的管理:
1. date--------------------------------------设置时间以及显示时间
例:date 2021 05 11 23 33 30
2. search_is_common_card----------查询卡号是否普通卡
例:search_is_common_card 777ed460
3. search_is_manage_card------------查询卡号是否为管理员卡
例:search_is_manage_card 777ed460
4. read_opentime------------------------读取通行时间
例:read_opentime 08001600
5. set_opentime---------------------------设置通行时间
例:set_opentime 08001600
6. delete_manage_card----------------删除管理员卡号
例:delete_manage_card 777ed460
7. delete_common_card--------------删除普通卡
例:delete_common_card 777ed460
8. add_common_card----------------增加普通卡
例:add_common_card 777ed460
9. add_manage_card-----------------增加管理员卡
例:add_manage_card 777ed460
10. delete_all_card----------------------删除所有卡号
## 2.3调试过程
整体硬件图如下所示:
在设计的时候想着接个舵机来模拟一下开门的动作,可能电流太大把核心烧掉了,联系了RT-Thread淘宝客服,赠送了我两个,顺丰第二天就到了,到了我就马上焊上去,还好焊上去没出意外,十分感谢官方。
RT-Thread的Finish终端可以进行权限验证,输入密码正确才能使用,刚好可以拿来用

终端一共设计了10条命令

下面举几个例子说明具体的功能,全部的例子请看视频介绍:
- 查询卡号是否为管理员卡

- 设置、读取开门时间

- 增加、删除普通卡

- 读取刷卡记录
