Continue to Site

Welcome to EDAboard.com

Welcome to our site! EDAboard.com is an international Electronics Discussion Forum focused on EDA software, circuits, schematics, books, theory, papers, asic, pld, 8051, DSP, Network, RF, Analog Design, PCB, Service Manuals... and a whole lot more! To participate you need to register. Registration is free. Click here to register now.

Preparing an electronic lock project based on ESP32 and HMI

Status
Not open for further replies.

Justinli

Member level 4
Joined
Apr 29, 2021
Messages
76
Helped
0
Reputation
0
Reaction score
2
Trophy points
8
Activity points
413
I gave up the fingerprint unlocking because the capacitive screen could not realize the fingerprint recognition in the electronic lock project that I was conceiving before. Now I want to implement the card unlock and password unlock.
This project is based on ESP32 and the Stone display module.

Recently I've also been working on how to connect them in hardware and have started making a GUI.


1.png
 

Thankfully I have successfully completed the project.
I'm updating my project here.

Required materials
  • ESP32
  • KOB electronic lock
  • Relay
  • Stone STWI070WT-01 touch screen
  • 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

connection.jpg


GUI design

GUI design.png


Video demo

--- Updated ---

Part of the codeshare

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()
 

Status
Not open for further replies.

Part and Inventory Search

Welcome to EDABoard.com

Sponsor

Back
Top