Ardelle Froeliger Posted September 23, 2021 Share Posted September 23, 2021 Required materials ESP32 KOB electronic lock Relay STONE STWI070WT-01 display MFRC522 module Realized function 1. card registration. 2. username and password registration. 3. card swipe to unlock the electronic lock. 4. User name and password to unlock the electronic lock. Connection diagram GUI design Code import mfrc522 import time import _thread from os import uname from machine import Pin, UART #from pyb import UART #import machine suos = Pin(32,Pin.OUT) uart2 = UART(2, baudrate=115200, rx=16,tx=17,timeout=10) ESP32_HSPI_CLOCK = 14 ESP32_HSPI_SLAVE_SELECT = 15 ESP32_HSPI_MISO = 12 ESP32_HSPI_MOSI = 13 ESP32_MFRC522_RST = 5 rx3 = [] rx_name = [] user_id_flag = False password_flag = False temp_id = '' temp_mima = '' personnel_id = {'zbw':[236,230,169,47],'lbw':[19,165,93,4]} personnel_ps = {'zbw':'zbw3366','lbw':'lbwnb'} admin_password = ('yyds') button_cmd = [16,1] edit1_cmd = [16,112] edit2_cmd = [16,113] edit3_cmd = [16,114] if uname()[0] == 'esp32': rdr = mfrc522.MFRC522(ESP32_HSPI_CLOCK, ESP32_HSPI_MOSI, ESP32_HSPI_MISO, ESP32_MFRC522_RST, ESP32_HSPI_SLAVE_SELECT) def do_write(): try: (stat, tag_type) = rdr.request(rdr.REQIDL) if stat == rdr.OK: (stat, raw_uid) = rdr.anticoll() if stat == rdr.OK: print("New card detected") print(" - tag type: 0x%02x" % tag_type) print(" - uid : 0x%02x%02x%02x%02x" % (raw_uid[0], raw_uid[1], raw_uid[2], raw_uid[3])) print("") if rdr.select_tag(raw_uid) == rdr.OK: key = [0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF] if rdr.auth(rdr.AUTHENT1A, 8, key, raw_uid) == rdr.OK: stat = rdr.write(8, b"\x00\x53\x00\x54\x00\x4F\x00\x4E\x00\x45\x0a\x0b\x0c\x0d\x0e\x0f") rdr.stop_crypto1() if stat == rdr.OK: print("Data written to card") else: print("Failed to write data to card") else: print("Authentication error") else: print("Failed to select tag") except KeyboardInterrupt: print("write error") def do_read(): while True: try: (stat, tag_type) = rdr.request(rdr.REQIDL) if stat == rdr.OK: (stat, raw_uid) = rdr.anticoll() if stat == rdr.OK: print("New card detected") print(" - tag type: 0x%02x" % tag_type) print(" - uid : 0x%02x%02x%02x%02x" % (raw_uid[0], raw_uid[1], raw_uid[2], raw_uid[3])) print (raw_uid[0], raw_uid[1], raw_uid[2], raw_uid[3]) print("") if rdr.select_tag(raw_uid) == rdr.OK: key = [0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF] if rdr.auth(rdr.AUTHENT1A, 8, key, raw_uid) == rdr.OK: print("Address 8 data: %s" % rdr.read(8)) for ps in personnel_id: if raw_uid[0:4:1] == personnel_id.get(ps): suos.value(1) print(ps) uart_write(ps, *raw_uid[0:4:1]) time.sleep(3) uart2.sendbreak() break rdr.stop_crypto1() time.sleep(3) suos.value(0) else: print("Authentication error") else: print("Failed to select tag") if uart2.any()>1: rx2 = [] data_name2 = '' bin_data = uart2.read(40) uart2.sendbreak() rx1 = list(bin_data) for item in rx1: rx2.append(chr(item)) print(rx2) if rx1[3:5:1] == button_cmd: data_name_len = rx1[6] - 1 data_name = rx2[7:data_name_len+7:1] data_name2 = ''.join(data_name) print(data_name2) if data_name2 == 'back3': return except KeyboardInterrupt: print("read error") def do_read2 (idd): print(idd) while True: try: (stat, tag_type) = rdr.request(rdr.REQIDL) if stat == rdr.OK: (stat, raw_uid) = rdr.anticoll() if stat == rdr.OK: print("New card detected") print(" - tag type: 0x%02x" % tag_type) print(" - uid : 0x%02x%02x%02x%02x" % (raw_uid[0], raw_uid[1], raw_uid[2], raw_uid[3])) print (raw_uid[0], raw_uid[1], raw_uid[2], raw_uid[3]) print("") if rdr.select_tag(raw_uid) == rdr.OK: key = [0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF] if rdr.auth(rdr.AUTHENT1A, 8, key, raw_uid) == rdr.OK: print("Address 8 data: %s" % rdr.read(8)) personnel_id[idd] = raw_uid[0:4:1] uart_write3(*raw_uid[0:4:1]) rdr.stop_crypto1() else: print("Authentication error") else: print("Failed to select tag") if uart2.any()>1: rx2 = [] data_name2 = '' bin_data = uart2.read(40) uart2.sendbreak() rx1 = list(bin_data) for item in rx1: rx2.append(chr(item)) if rx1[3:5:1] == button_cmd: data_name_len = rx1[6] - 1 data_name = rx2[7:data_name_len+7:1] data_name2 = ''.join(data_name) print(data_name2) if data_name2 == 'back1': return except KeyboardInterrupt: print("read error") def uart_write(text, *ids): # print(text, *ids) uart2.write('ST<{"cmd_code":"set_text","type":"label","widget":"cardname1","text":"'+str(text)+'"}>ET') uart2.write('ST<{"cmd_code":"set_text","type":"label","widget":"cardid1","text":"'+str(ids)+'"}>ET') uart2.write('ST<{"cmd_code":"set_visible","type":"widget","widget":"lock1","visible":true}>ET') time.sleep(3) uart2.write('ST<{"cmd_code":"set_text","type":"label","widget":"cardname1","text":"''"}>ET') uart2.write('ST<{"cmd_code":"set_text","type":"label","widget":"cardid1","text":"''"}>ET') uart2.write('ST<{"cmd_code":"set_visible","type":"widget","widget":"lock1","visible":false}>ET') def uart_write2(text,text2): uart2.write('ST<{"cmd_code":"set_text","type":"label","widget":"cardid","text":"'+text+'"}>ET') time.sleep(3) uart2.write('ST<{"cmd_code":"set_text","type":"label","widget":"cardid","text":"'+text2+'"}>ET') uart2.write('ST<{"cmd_code":"set_text","type":"label","widget":"edit2","text":"''"}>ET') def uart_write3(*id2): uart2.write('ST<{"cmd_code":"set_text","type":"label","widget":"cardid","text":"'+str(id2)+'"}>ET') time.sleep(3) uart2.write('ST<{"cmd_code":"set_text","type":"label","widget":"cardid","text":"''"}>ET') def uart_write4(text,text2): uart2.write('ST<{"cmd_code":"set_text","type":"label","widget":"login","text":"'+text+'"}>ET') time.sleep(1) uart2.write('ST<{"cmd_code":"set_text","type":"label","widget":"login","text":"'+text2+'"}>ET') time.sleep(1) uart2.write('ST<{"cmd_code":"set_text","type":"label","widget":"edit3","text":"''"}>ET') uart2.write('ST<{"cmd_code":"set_text","type":"label","widget":"edit4","text":"''"}>ET') uart2.write('ST<{"cmd_code":"set_text","type":"label","widget":"edit7","text":"''"}>ET') def uart_write5(): uart2.write('ST<{"cmd_code":"set_text","type":"label","widget":"cardid","text":"'+str(id2)+'"}>ET') time.sleep(3) uart2.write('ST<{"cmd_code":"set_text","type":"label","widget":"cardid","text":"''"}>ET') def card_zhuce(): while True: if uart2.any(): user_id = '' password = '' rx2 = [] rx_num = 0 bin_data = uart2.read(40) uart2.sendbreak() rx1 = list(bin_data) for item in rx1: rx2.append(chr(item)) rx_num += 1 data_end = rx_num-5 data_id_st = rx2[8:13:1] data_id_st2 = ''.join(data_id_st) print(data_id_st2) if data_id_st2 == 'edit1': data_id_st3 = rx2[15:data_end:1] data_id_st4 = ''.join(data_id_st3) print(data_id_st4) if data_id_st4 != '': name = True elif data_id_st2 == 'edit2': data_id_st5 = rx2[15:data_end:1] data_id_st6 = ''.join(data_id_st5) if data_id_st6 == admin_password: admin = True uart_write2('Verification passed!','Please place the card!') do_read2(data_id_st4) return def mima_zuce(): temp_id3 = '' temp_mima3 = '' while True: if uart2.any(): user_id = '' password = '' rx2 = [] rx_num = 0 # data_end = 0 bin_data = uart2.read(40) uart2.sendbreak() rx1 = list(bin_data) for item in rx1: rx2.append(chr(item)) rx_num += 1 # if (rx2[rx_num] == 'T') and (rx2[rx_num-1] == 'E') and (rx2[rx_num-2] == '>'): # break data_end = rx_num-5 data_id_st = rx2[8:13:1] data_id_st2 = ''.join(data_id_st) print(data_id_st2) if rx1[3:5:1] == button_cmd: data_name_len = rx1[6] - 1 data_name = rx2[7:data_name_len+7:1] data_name2 = ''.join(data_name) print(data_name2) if data_name2 == 'back2': return if data_id_st2 == 'edit3': data_id_st3 = rx2[15:data_end:1] data_id_st4 = ''.join(data_id_st3) print(data_id_st4) user_id_flag = True temp_id3 = data_id_st4 # personnel_ps[temp_id] = raw_uid[0:4:1] elif data_id_st2 == 'edit4': data_id_st5 = rx2[15:data_end:1] data_id_st6 = ''.join(data_id_st5) print(data_id_st6) # if personnel_ps.get(temp_id) == data_id_st6: password_flag = True temp_mima3 = data_id_st6 # personnel_ps[temp_id] = password_flag # print(rx2,user_id_flag,password_flag) elif data_id_st2 == 'edit7': data_id_st5 = rx2[15:data_end:1] data_id_st6 = ''.join(data_id_st5) if (data_id_st6 == admin_password) and (password_flag == True) and (user_id_flag == True): admin = True personnel_ps[temp_id3] = temp_mima3 password_flag = False user_id_flag = False uart_write4('Verification passed!','login was successful!') def password_loin(): temp_id2 = '' temp_mima = '' while True: if uart2.any(): user_id = '' password = '' rx2 = [] rx_num = 0 # data_end = 0 bin_data = uart2.read(40) uart2.sendbreak() rx1 = list(bin_data) for item in rx1: rx2.append(chr(item)) rx_num += 1 # if (rx2[rx_num] == 'T') and (rx2[rx_num-1] == 'E') and (rx2[rx_num-2] == '>'): # break data_end = rx_num-5 data_id_st = rx2[8:13:1] data_id_st2 = ''.join(data_id_st) print(data_id_st2) if rx1[3:5:1] == button_cmd: data_name_len = rx1[6] - 1 data_name = rx2[7:data_name_len+7:1] data_name2 = ''.join(data_name) print(data_name2) if data_name2 == 'back4': return if data_id_st2 == 'edit5': data_id_st3 = rx2[15:data_end:1] data_id_st4 = ''.join(data_id_st3) print(data_id_st4) if data_id_st4 in personnel_ps: user_id_flag = True temp_id2 = data_id_st4 elif data_id_st2 == 'edit6': data_id_st5 = rx2[15:data_end:1] data_id_st6 = ''.join(data_id_st5) print(data_id_st6) print(temp_id2) print(personnel_ps) if personnel_ps.get(temp_id2) == data_id_st6: password_flag = True # print(rx2,user_id_flag,password_flag) print(user_id_flag,password_flag) if (password_flag == True) and (user_id_flag == True): uart_write(temp_id2,temp_id2) password_flag = False user_id_flag = False suos.value(1) uart2.write('ST<{"cmd_code":"set_visible","type":"widget","widget":"lock2","visible":true}>ET') uart2.write('ST<{"cmd_code":"set_text","type":"label","widget":"edit5","text":"''"}>ET') uart2.write('ST<{"cmd_code":"set_text","type":"label","widget":"edit6","text":"''"}>ET') time.sleep(3) # uart_write('student','') suos.value(0) uart2.write('ST<{"cmd_code":"set_visible","type":"widget","widget":"lock2","visible":false}>ET') uart2.sendbreak() while True: if uart2.any()>1: rx2 = [] data_name2 = '' bin_data = uart2.read(40) # time.sleep(1) uart2.sendbreak() # time.sleep(1) rx1 = list(bin_data) for item in rx1: rx2.append(chr(item)) print(rx2) if rx1[3:5:1] == button_cmd: data_name_len = rx1[6] - 1 data_name = rx2[7:data_name_len+7:1] data_name2 = ''.join(data_name) print(data_name2) if data_name2 == 'card1': card_zhuce() elif data_name2 == 'password1': mima_zuce() elif data_name2 == 'card2': do_read() elif data_name2 == 'password2': password_loin() Video demo Link to comment Share on other sites More sharing options...
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now