Toggle navigation
首页
问答
文章
积分商城
专家
专区
更多专区...
文档中心
返回主站
搜索
提问
会员
中心
登录
注册
AB32VG1
开发板测评
DIY
基于AB32VG1的智慧门禁系统
发布于 2021-05-12 23:18:34 浏览:1028
订阅该版
[tocm] # 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卡中存放了四个文件,如下图所示: ![image-20210511232000502.png](https://oss-club.rt-thread.org/uploads/20210512/67c79213a5630732abde927e033f25f1.png) 在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调试过程 整体硬件图如下所示: ![QQ图片20210512215001.jpg](https://oss-club.rt-thread.org/uploads/20210512/8ec5f540396b42b5d7fecbc27189df0b.jpg) 在设计的时候想着接个舵机来模拟一下开门的动作,可能电流太大把核心烧掉了,联系了RT-Thread淘宝客服,赠送了我两个,顺丰第二天就到了,到了我就马上焊上去,还好焊上去没出意外,十分感谢官方。 ![image-20210511234958958.png](https://oss-club.rt-thread.org/uploads/20210512/68e8d36c9eab2cef85ab5fe5e51ae56c.png) ![image-20210512214407450.png](https://oss-club.rt-thread.org/uploads/20210512/152c970754ee543d4737f8e531ee7fd4.png) RT-Thread的Finish终端可以进行权限验证,输入密码正确才能使用,刚好可以拿来用 ![image-20210512215629990.png](https://oss-club.rt-thread.org/uploads/20210512/4e30dd03908f40a3d59b76cad5161bb5.png) 终端一共设计了10条命令: ![image-20210512215705929.png](https://oss-club.rt-thread.org/uploads/20210512/825a10650a17d433a784df1fd42cc72e.png) 下面举几个例子说明具体的功能,全部的例子请看视频介绍: - 查询卡号是否为管理员卡 ![image-20210512215951008.png](https://oss-club.rt-thread.org/uploads/20210512/dc25b5a9d271a01e5232145b37d0b5a8.png) - 设置、读取开门时间 ![image-20210512220042636.png](https://oss-club.rt-thread.org/uploads/20210512/40620e2d4f7ca8f3644aed0fc9e4e8f6.png) - 增加、删除普通卡 ![image-20210512220212291.png](https://oss-club.rt-thread.org/uploads/20210512/a210fb18099368077b7ca0b39d6b7b73.png) - 读取刷卡记录 ![image-20210512220911173.png](https://oss-club.rt-thread.org/uploads/20210512/24e6727a83d4531edc30a9ef0616e646.png) # 3.心得体会 本人第一次接触RISC-V内核的芯片,AB32VG1确实给我带来了惊艳的感觉,而且在RT-Thread的支持下,根本不需要对芯片太多了解就能够上手。这个DIY项目前前后后也花费了我不少的时间,大部分时间还是花在了底层驱动上面,可能是刚开始,驱动不够完善。我本来想法是把门禁系统通过NBIOT连华为云的,华为云之前做过一点东西刚好可以用上,但是没想到串口UART1、UART2可以发送,无法接收数据,研究了两天的驱动发现底层没有实现中断回调功能,和朱工讨论了一下提交了一个PR([fix bluetrum uart1 and uart2 cannot recv data](https://github.com/RT-Thread/rt-thread/pull/4632/commits))。一开始写了两天的串口代码,后来发现只要数据量一大,程序就会死机,这没法子,我只能把连云的部分砍掉了,只能在终端实现其他功能。总的来说,AB32VG1这款芯片还是相当不错的,驱动还需完善,开源的部分还是有点少,期待蓝牙可以开源。 # 4.代码及视频展示地址 [gitee代码链接](https://gitee.com/yaoyufan/DoorLock.git)(可能上传不完整,无法编译) [蓝奏云代码链接](https://wwa.lanzoui.com/i3708w94u4j) [视频链接](https://www.bilibili.com/video/BV1e54113742/) 视频声音有点小,大家见谅! 最后非常感谢RT-Thread以及中科蓝讯给我这此机会,感谢朱工热情的解答,我才能把项目做完!
3
条评论
默认排序
按发布时间排序
登录
注册新账号
关于作者
yaoyufan
这家伙很懒,什么也没写!
文章
1
回答
4
被采纳
0
关注TA
发私信
相关文章
1
riscv32-elf-xmaker 工具的目的
2
AB32VG1 的 RTC 内部怎么知道自己是第一次上电的呢?
3
AB32VG1 蓝牙功能
4
AB32VG1 片上 flash 的库能否发布出来
5
【中科蓝汛AB32VG1】开发板是否支持USB HOST
6
有基于RT-Thread 和 AB32VG1 的蓝牙示例吗?
7
AB32VG1_RTC时钟
8
AB32 串口2.是哪个管脚
9
AB32VG1开发板的三路LPWM使用
10
使用RT-thread新建AB32VG1工程编译时报错
推荐文章
1
RT-Thread应用项目汇总
2
玩转RT-Thread系列教程
3
国产MCU移植系列教程汇总,欢迎查看!
4
机器人操作系统 (ROS2) 和 RT-Thread 通信
5
五分钟玩转RT-Thread新社区
6
【技术三千问】之《玩转ART-Pi》,看这篇就够了!干货汇总
7
关于STM32H7开发板上使用SDIO接口驱动SD卡挂载文件系统的问题总结
8
STM32的“GPU”——DMA2D实例详解
9
RT-Thread隐藏的宝藏之completion
10
【ART-PI】RT-Thread 开启RTC 与 Alarm组件
热门标签
RT-Thread Studio
串口
Env
LWIP
SPI
AT
Bootloader
Hardfault
CAN总线
FinSH
ART-Pi
USB
DMA
文件系统
RT-Thread
SCons
RT-Thread Nano
线程
MQTT
STM32
RTC
FAL
rt-smart
ESP8266
I2C_IIC
WIZnet_W5500
UART
ota在线升级
PWM
cubemx
freemodbus
flash
packages_软件包
BSP
潘多拉开发板_Pandora
定时器
ADC
GD32
flashDB
socket
中断
Debug
编译报错
SFUD
msh
rt_mq_消息队列_msg_queue
keil_MDK
ulog
MicroPython
C++_cpp
本月问答贡献
出出啊
1517
个答案
342
次被采纳
小小李sunny
1443
个答案
289
次被采纳
张世争
805
个答案
174
次被采纳
crystal266
547
个答案
161
次被采纳
whj467467222
1222
个答案
148
次被采纳
本月文章贡献
出出啊
1
篇文章
4
次点赞
小小李sunny
1
篇文章
1
次点赞
张世争
1
篇文章
1
次点赞
crystal266
2
篇文章
2
次点赞
whj467467222
2
篇文章
1
次点赞
回到
顶部
发布
问题
投诉
建议
回到
底部