Anika Laughary Inserito: 14 settembre 2021 Segnala Inserito: 14 settembre 2021 Breve introduzione La casa intelligente sta diventando sempre più comune con lo sviluppo della tecnologia, questo articolo si concentrerà sugli aspetti di sicurezza del progetto di controllo dell'accesso intelligente. Questo articolo utilizza il touch screen di STONE per inviare comandi alla MCU per controllare il relè e il modulo MFRC522.Il principio della lettura della carta: guidando il modulo RFID-RC522, identificare l'ID della carta d'identità vicino alla carta d'identità, e quindi determinare se l'ID esiste nel database della parola tipica, ID è il valore tipico della parola, se l'esistenza della verifica attraverso, e quindi stampare il nome corrispondente, e poi guidare la serratura elettromagnetica nello stesso modo. Materiali richiesti ESP32 Serratura elettronica KOB Relè Display a pannello tattile STWI070WT-01 Modulo MFRC522 Funzione realizzata 1. registrazione della carta. 2. registrazione del nome utente e della password. 3. strisciamento della carta per sbloccare la serratura elettronica. 4. Nome utente e password per sbloccare la serratura elettronica. Schema di connessione Progettazione GUI codice 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
Messaggi consigliati
Crea un account o accedi per commentare
Devi essere un utente per poter lasciare un commento
Crea un account
Registrati per un nuovo account nella nostra comunità. è facile!
Registra un nuovo accountAccedi
Hai già un account? Accedi qui.
Accedi ora