0 前言
??
這兩年開始畢業(yè)設計和畢業(yè)答辯的要求和難度不斷提升,傳統(tǒng)的畢設題目缺少創(chuàng)新和亮點,往往達不到畢業(yè)答辯的要求,這兩年不斷有學弟學妹告訴學長自己做的項目系統(tǒng)達不到老師的要求。
為了大家能夠順利以及最少的精力通過畢設,學長分享優(yōu)質畢業(yè)設計項目,今天要分享的是
?? 畢業(yè)設計 stm32 RFID員工打卡門禁系統(tǒng)(源碼+硬件+論文)
??學長這里給一個題目綜合評分(每項滿分5分)
- 難度系數(shù):3分
- 工作量:3分
- 創(chuàng)新點:4分
?? 項目分享:見文末!文章來源地址http://www.zghlxwxcb.cn/news/detail-829568.html
實物演示效果:
畢業(yè)設計 stm32 RFID員工打卡門禁系統(tǒng)
1 主要功能
擬采以單片機為主控模塊,圍繞無線射頻模塊和無線傳輸模塊、OLED顯示模塊、繼電器模塊實現(xiàn)考勤系統(tǒng)的考勤打卡、人員管理、考勤統(tǒng)計、無線通信功能等功能。
(1)射頻識別。根據(jù)考勤要求,選擇合理的射頻工作頻率,電子標簽、讀寫器,保證選擇的器件可以滿足考勤系統(tǒng)要求的標準和協(xié)議。并在硬件的基礎上設置合理的軟件,使其能實現(xiàn)員工信息識別的功能。
(2)員工數(shù)據(jù)庫設計。設計員工數(shù)據(jù)庫,對公司人員新增、員工信息的刪除等功能進行實現(xiàn)。數(shù)據(jù)庫中還應該記錄每個員工打卡的具體信息。
(3)RFID考勤系統(tǒng)的總體調試。結合前兩部分功能,實現(xiàn)對RFID考勤系統(tǒng)的調試,使其能正常實現(xiàn)考勤的基本功能。
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,在連接成功之后,上位機模塊在該局域網(wǎng)內請求連接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))
# 發(fā)送密鑰,建成連接
上位機通過TCP通信接收下位機上傳的打卡信息,通過調用數(shù)據(jù)庫,將上傳卡號與數(shù)據(jù)庫內卡號進行對比,判斷是否打卡成功。若卡號存在,則打卡成功,在上位機界面的數(shù)據(jù)日志中顯示"name:" + people_name + “已打卡\n” +“card_number:” + id + “\n” + “\n”,并將打卡信息傳入數(shù)據(jù)庫,向下位機下發(fā)打卡成功信號以及打卡數(shù)據(jù);若卡號不存在,則打卡失敗,在上位機界面的數(shù)據(jù)日志中顯示"未知身份,拒絕訪問" +“\n” + “card_number:” + card_id + “\n” + “\n”,并向下位機下發(fā)打卡失敗的指令。具體代碼如下:
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)
信息錄入子程序設計
在上位機程序中,可以通過將信息錄入對數(shù)據(jù)庫進行增加操作。上位機數(shù)據(jù)庫信息錄入子程序如圖4-3所示。
上位機通過調用數(shù)據(jù)庫與接收的下位機傳送數(shù)據(jù)進行對比。在打卡時,上位機將上傳卡號與數(shù)據(jù)庫內卡號進行對比,如果存在該卡號,則在上位機界面的數(shù)據(jù)日志中顯示“該卡號已存在\n\n”;若不存在該卡號,則進行信息錄入。點擊“信息錄入”按鈕,如果信息輸入不完全,則在上位機界面的數(shù)據(jù)日志中顯示“錯誤:輸入姓名或卡號為空?。?!\n\n”;如果輸入正確,在數(shù)據(jù)庫內進行寫入操作,再在上位機界面的數(shù)據(jù)日志中顯示“l(fā)og_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)
信息刪除子程序設計
在上位機程序中,可以通過“按卡號刪除”對數(shù)據(jù)庫進行刪除操作。信息刪除子程序如圖4-4所示。
點擊“按卡號刪除”按鈕,將下位機上傳的卡號與數(shù)據(jù)庫內卡號進行對比,如果存在該卡號,在數(shù)據(jù)內進行對該卡號信息進行刪除操作,在上位機界面的數(shù)據(jù)日志中顯示“卡號:" + card_id + “已刪除\n”+ "\n”;若不存在該卡號,則在上位機界面的數(shù)據(jù)日志中顯示“卡號不存在\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 實現(xiàn)效果
實物演示效果:
畢業(yè)設計 stm32 RFID員工打卡門禁系統(tǒng)
5 最后
包含內容
詳細論文:文章來源:http://www.zghlxwxcb.cn/news/detail-829568.html
?? 項目分享:見文末!
到了這里,關于stm32畢設 stm32 RFID員工打卡門禁系統(tǒng)(源碼+硬件+論文)的文章就介紹完了。如果您還想了解更多內容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網(wǎng)!