嵌入式毕设分享 stm32 RFID员工打卡门禁系统(源码+硬件+论文)


0 前言

🔥
这两年开始毕业设计和毕业答辩的要求和难度不断提升,传统的毕设题目缺少创新和亮点,往往达不到毕业答辩的要求,这两年不断有学弟学妹告诉学长自己做的项目系统达不到老师的要求。

为了大家能够顺利以及最少的精力通过毕设,学长分享优质毕业设计项目,今天要分享的是

🚩 毕业设计 stm32 RFID员工打卡门禁系统(源码+硬件+论文)

🥇学长这里给一个题目综合评分(每项满分5分)

  • 难度系数:3分
  • 工作量:3分
  • 创新点:4分

🧿 项目分享:见文末!

在这里插入图片描述

在这里插入图片描述

实物演示效果:

毕业设计 stm32 RFID员工打卡门禁系统

1 主要功能

拟采以单片机为主控模块,围绕无线射频模块和无线传输模块、OLED显示模块、继电器模块实现考勤系统的考勤打卡、人员管理、考勤统计、无线通信功能等功能。
(1)射频识别。根据考勤要求,选择合理的射频工作频率,电子标签、读写器,保证选择的器件可以满足考勤系统要求的标准和协议。并在硬件的基础上设置合理的软件,使其能实现员工信息识别的功能。
(2)员工数据库设计。设计员工数据库,对公司人员新增、员工信息的删除等功能进行实现。数据库中还应该记录每个员工打卡的具体信息。
(3)RFID考勤系统的总体调试。结合前两部分功能,实现对RFID考勤系统的调试,使其能正常实现考勤的基本功能。

在这里插入图片描述

2 硬件设计(原理图)

3 核心软件设计

在这里插入图片描述

关键代码

先将上位机程序初始化,对实时时间进行获取,具体代码如下:

def get_time():
    t = time.time()  # 获得当前时间的时间戳
    timeArray = time.localtime(t) 
    day = timeArray.tm_mday
    time_str = time.strftime('%Y-%m-%d %H:%M:%S', timeArray)  # 转换时间格式
    return time_str 

再将上位机所在PC端连接对应的WiFI,在连接成功之后,上位机模块在该局域网内请求连接ESP-01S模块IP,连接成功后进行下一步操作,主要连接代码如下:

ddef start_reception():
    global tcp_client_socket
    global prase_data
    tcp_client_socket = socket(AF_INET, SOCK_STREAM)
    server_ip = entry_ip.get()
    server_port = int(port.get())  # TCP socket端口
    # 链接服务器
    tcp_client_socket.connect((server_ip, server_port))
    # 发送密钥,建成连接

上位机通过TCP通信接收下位机上传的打卡信息,通过调用数据库,将上传卡号与数据库内卡号进行对比,判断是否打卡成功。若卡号存在,则打卡成功,在上位机界面的数据日志中显示"name:" + people_name + “已打卡\n” +“card_number:” + id + “\n” + “\n”,并将打卡信息传入数据库,向下位机下发打卡成功信号以及打卡数据;若卡号不存在,则打卡失败,在上位机界面的数据日志中显示"未知身份,拒绝访问" +“\n” + “card_number:” + card_id + “\n” + “\n”,并向下位机下发打卡失败的指令。具体代码如下:

def add_card_record(card_id):
    flag = check_id(card_id)
    //判断卡号
    if(flag >= 0):
        print(all_person_data)
        new_txt = (all_person_data[flag]).split(",")
        people_name = new_txt[0]#######
        id = new_txt[1]
        all_person_data[flag] = new_txt[0] +","+ new_txt[1] + ",1" +","+get_time() + "\n"
        with open("persons.txt","w") as f:
           f.writelines(all_person_data)
        f.close()
        entry_5.insert(END, get_time() + '   RECV DATA =====>' + '\n')
        entry_5.insert(END, "name:" + people_name + "   已打卡\n" +"card_number:" + id + "\n" + "\n")
        send_data = "###"+people_name
        tcp_client_socket.send(send_data.encode("gbk"))
        entry_5.see(END)
    else:
        entry_5.insert(END, get_time() + '   RECV DATA =====>' + '\n')
        entry_5.insert(END, "未知身份,拒绝访问" +
                       "\n" + "card_number:" + card_id + "\n" + "\n")
        send_data = "###"+"unknown"
        tcp_client_socket.send(send_data.encode("gbk"))
entry_5.see(END) 

信息录入子程序设计
在上位机程序中,可以通过将信息录入对数据库进行增加操作。上位机数据库信息录入子程序如图4-3所示。
上位机通过调用数据库与接收的下位机传送数据进行对比。在打卡时,上位机将上传卡号与数据库内卡号进行对比,如果存在该卡号,则在上位机界面的数据日志中显示“该卡号已存在\n\n”;若不存在该卡号,则进行信息录入。点击“信息录入”按钮,如果信息输入不完全,则在上位机界面的数据日志中显示“错误:输入姓名或卡号为空!!!\n\n”;如果输入正确,在数据库内进行写入操作,再在上位机界面的数据日志中显示“log_name + “,” + log_id + “,0” + “,0” + “\n””。具体代码如下:

def add_null_id():
    log_name = Name.get().replace(" ", "")##输入名字
    print(log_name)
    log_id = (card_number.get()).replace(" ", "")#输入卡号
    print(log_id)
    if (log_id!= '') and (log_name != ''):####卡号和名字
        flag = check_id(log_id)
        if(flag >= 0):##检查id是否重复
            entry_5.insert(END, get_time() + '   SAVE DATA =====>' + '\n')
            entry_5.insert(END, "该卡号已存在\n\n")  
            entry_5.see(END) 
        else:
            with open("persons.txt", 'a+') as f:
                f.write(log_name + "," + log_id + ",0" + ",0" + "\n")####输入名字和卡号
            f.close()
            entry_5.insert(END, get_time() + '   SAVE DATA =====>' + '\n')
            entry_5.insert(END, log_name + ": "+log_id+"  已录入\n\n")
            entry_5.see(END)
    else:
        entry_5.insert(END, get_time() + '   SAVE DATA =====>' + '\n')
        entry_5.insert(END, "错误:输入姓名或卡号为空!!!\n\n")
        entry_5.see(END)

信息删除子程序设计
在上位机程序中,可以通过“按卡号删除”对数据库进行删除操作。信息删除子程序如图4-4所示。
点击“按卡号删除”按钮,将下位机上传的卡号与数据库内卡号进行对比,如果存在该卡号,在数据内进行对该卡号信息进行删除操作,在上位机界面的数据日志中显示“卡号:" + card_id + “已删除\n”+ "\n”;若不存在该卡号,则在上位机界面的数据日志中显示“卡号不存在\n\n”。具体代码如下:

def del_record():
    card_id = (entry_del.get()).replace(" ",'')
    flag = check_id(card_id)
    if(flag >= 0):
        all_person_data.pop(flag)
        with open("persons.txt","w") as f:#############
           f.writelines(all_person_data)
        f.close()
        entry_5.insert(END, get_time() + '   DEL DATA =====>' + '\n')
        entry_5.insert(END, "卡号:" + card_id + "   已删除\n"+ "\n")
    else:
        entry_5.insert(END, get_time() + '   DEL DATA =====>' + '\n')
        entry_5.insert(END, "卡号不存在\n\n")
    entry_5.see(END)

4 实现效果

在这里插入图片描述

在这里插入图片描述

实物演示效果:

毕业设计 stm32 RFID员工打卡门禁系统

5 最后

包含内容

在这里插入图片描述
详细论文:
在这里插入图片描述

🧿 项目分享:见文末!

  • 14
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
基于RFID的门禁管理系统 串口通讯源程序: class SerialListener implements SerialPortEventListener { /** * 处理监控到的串口事件 */ public void serialEvent(SerialPortEvent serialPortEvent) { switch (serialPortEvent.getEventType()) { case SerialPortEvent.BI: // 10 通讯中断 ShowUtils.errorMessage("与串口设备通讯中断"); break; case SerialPortEvent.OE: // 7 溢位(溢出)错误 case SerialPortEvent.FE: // 9 帧错误 case SerialPortEvent.PE: // 8 奇偶校验错误 case SerialPortEvent.CD: // 6 载波检测 case SerialPortEvent.CTS: // 3 清除待发送数据 case SerialPortEvent.DSR: // 4 待发送数据准备好了 case SerialPortEvent.RI: // 5 振铃指示 case SerialPortEvent.OUTPUT_BUFFER_EMPTY: // 2 输出缓冲区已清空 break; case SerialPortEvent.DATA_AVAILABLE: // 1 串口存在可用数据 byte[] data = null; try { if (serialport == null) { ShowUtils.errorMessage("串口对象为空!监听失败!"); } else { // 读取串口数据 data = SerialPortManager.readFromPort(serialport); //dataView.append(ByteUtils.byteArrayToHexString(data,true) + "\r\n"); } } catch (Exception e) { ShowUtils.errorMessage(e.toString()); // 发生读取错误时显示错误信息后退出系统 System.exit(0); } break; } } } private void initData() { commList = SerialPortManager.findPort(); // 检查是否有可用串口,有则加入选项中 if (commList == null || commList.size() < 1) { ShowUtils.warningMessage("没有搜索到有效串口!");
伴随物联网技术中射频识别技术(Radio Frequency Identification,RFID)的不断飞速发展,其在能源保护与综合利用、车联网、智能交通、智能家居等领域都有了较为广泛的应用。基于RFID技术的自动识别与控制、智能联网行为分析等新兴学科也在不断发展。作为识别技术的中的最广泛的应用领域,智能门禁系统RFID技术兴起之后迎来了新挑战。随着社会的不断发展,诸多的智能化楼宇、企业及酒店均开始使用门禁管理系统,但是普遍存在联网软件操作效率低下,人机界面不友好以及模块间联网门禁数据存在不兼容情况,大大降低了门禁系统使用者的用户感知。因此,研究出一套数据兼容性、人机界面友好、软件管理方便的联网门禁管理系统具有十分重要的意义。 本文以智能家居中的智能联网门禁为切入点,结合计算机网络、传感器网络、数据感知与分析等领域知识,对企业RFID联网门禁系统进行了设计与实现,本文的主要工作如下: (1) 介绍并研究了在物联网背景下RFID技术的技术特点与优缺点。详细介绍了物联网技术的发展历程与体系架构,给出了RFID在物联网技术中的发展前景。 (2)给出对江苏上海聚瑞信息科技公司宾馆一卡通RFID联网门禁的需求分析与总体方案设计。基于RFID识别技术的基本原理以及标准组网架构,对现有大中型企业联网门禁的五方面内容(网络结构、路由规划、系统开发语言、数据库存储形式及射频识别技术)进行了需求的详细分析及确认,最后针对以上内容提出了本文设计的系统组网架构及工作模式。 (3) 设计并实现了基于RFID的宾馆一卡通门禁联网系统。在需求分析的基础上,对需求分析中上位机的软件体系设计以及模块设计进行了实现。对于上位机软件体系的设计,主要采用统一建模语言(Unified Modeling Language,UML)对RFID联网门禁系统上位机进行研究分析,并且通过给出该系统数据库模型映射关系的方式给出了数据库的详细设计流程与实现方案;对于模块设计,主要采用面向对象的方法来实现,包括系统数据库的实现、打卡/销卡、友好人机界面、用户权限的域划分等模块,并给出了该上位机的控制功能流程图。 (4)对所设计系统进行了系统测试以及结果分析。通过RFID特征数据进行检索的方式进行识别,分别测试了该系统的RFID特征数据的检索测试结果以及相应信息传导机制的结果。上海聚瑞信息科技公司宾馆的项目验收结果表明,本文设计的基于RFID的宾馆一卡通门禁联网系统数据感知能力稳定,在发布渠道多样化的情况下通道信息误码率较低,识别速度快,具有较高的安全系数。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值