Forum Rule: Always post complete source code & details to reproduce any issue!
Results 1 to 2 of 2

Thread: Intelligent access control based on ESP32 and LCD

  1. #1
    Junior Member
    Join Date
    Apr 2021
    Posts
    9

    Intelligent access control based on ESP32 and LCD

    Required materials



    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

    Click image for larger version. 

Name:	connection.jpg 
Views:	22 
Size:	46.9 KB 
ID:	25980

    GUI design

    Click image for larger version. 

Name:	GUI design.png 
Views:	19 
Size:	71.6 KB 
ID:	25981

    code sharing

    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\x  0c\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


  2. #2
    Member
    Join Date
    Aug 2018
    Location
    Brisbane, Australia
    Posts
    79
    Very nice. But does this have anything to do with teensy?

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •