IOT

Intelligens hozzáférés-vezérlés STONE TFT LCD és ESP32 alapú

Rövid bemutatkozás

Az intelligens otthon a technológia fejlődésével egyre gyakoribb, ez a cikk az intelligens beléptetőprojekt biztonsági szempontjaira összpontosít.

Ez a cikk használja STONE érintőképernyője parancsokat küldeni az MCU-nak a relé és az MFRC522 modul vezérléséhez.

A kártyaolvasás elve: az RFID-RC522 modul vezetésével azonosítsa a személyi igazolvány azonosítóját az igazolványhoz közel, majd határozza meg, hogy az azonosító létezik-e az adatbázisban a tipikus szó adatbázisában, az ID a szó tipikus értéke, ha az ellenőrzés megléte , majd nyomtassa ki a megfelelő nevet, majd ugyanígy hajtsa be az elektromágneses zárat.

Szükséges anyagok

Megvalósult funkció

  1. kártya regisztráció.
  2. felhasználónév és jelszó regisztráció.
  3. kártyahúzással az elektronikus zár feloldásához.
  4. Felhasználónév és jelszó az elektronikus zár feloldásához.

A fő hardver leírása

RFID modul

Ez a modul közvetlenül betölthető különböző olvasómodulokba. 3.3 V feszültséget használ az SPI interfészen keresztül, mindössze néhány vezetékkel. A CPU-alaplaphoz közvetlenül csatlakoztatva a modul stabilan és megbízhatóan működhet távolsági kártyaolvasóként.

Intelligent access control based on STONE TFT LCD and ESP32 IOT PlatoBlockchain Data Intelligence. Vertical Search. Ai.
Intelligens hozzáférés-vezérlés STONE TFT LCD és ESP32 alapú

Az STWI070WT-01 TFT-monitorként és érintőképernyős vezérlőként készült. Tartalmaz processzort, vezérlőprogramot, illesztőprogramot, flash memóriát, RS232/RS422/RS485/TTL/LAN portot, Wi-Fi-t/Bluetooth-ot, érintőképernyőt, tápegységet stb., így ez egy teljes kijelzőrendszer, amely a nagy teljesítményen és az egyszerűségen alapul. operációs rendszer, amely bármely MCU-val vezérelhető.

Intelligent access control based on STONE TFT LCD and ESP32 IOT PlatoBlockchain Data Intelligence. Vertical Search. Ai.
Intelligens hozzáférés-vezérlés STONE TFT LCD és ESP32 alapú

GUI tervezés

Intelligent access control based on STONE TFT LCD and ESP32 IOT PlatoBlockchain Data Intelligence. Vertical Search. Ai.
Intelligens hozzáférés-vezérlés STONE TFT LCD és ESP32 alapú

Kód Megosztás

Intelligent access control based on STONE TFT LCD and ESP32 IOT PlatoBlockchain Data Intelligence. Vertical Search. Ai.
Intelligens hozzáférés-vezérlés STONE TFT LCD és ESP32 alapú

import mfrc522

import idő

import _szál

az os import uname

gépi importból Pin, UART

#a pyb import UART-ból

#import gép

suos = Pin(32,Pin.OUT)

uart2 = UART(2, baudráta=115200, rx=16,tx=17,időtúllépés=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 = Hamis

password_flag = Hamis

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 XNUMX]

edit2_cmd = [16,113 XNUMX]

edit3_cmd = [16,114 XNUMX]

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

próbálja ki:

(stat, tag_type) = rdr.request(rdr.REQIDL)

if stat == rdr.OK:

(stat, nyers_uid) = rdr.anticoll()

if stat == rdr.OK:

print ("Új kártya észlelve")

print(” – címke típusa: 0x%02x” % tag_type)

print(” – uid : 0x%02x%02x%02x%02x” % (nyers_uid[0], nyers_uid[1], nyers_uid[2], nyers_uid[3]))

nyomtatás("")

if rdr.select_tag(raw_uid) == rdr.OK:

kulcs = [0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF]

if rdr.auth(rdr.AUTHENT1A, 8, kulcs, 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:

nyomtatás (“Kártyára írt adatok”)

más:

print ("Nem sikerült az adatokat a kártyára írni")

más:

nyomtatás ("Hitelesítési hiba")

más:

print ("Nem sikerült kiválasztani a címkét")

kivéve a KeyboardInterrupt:

nyomtatás ("írási hiba")

def do_read():

míg True:

próbálja ki:

(stat, tag_type) = rdr.request(rdr.REQIDL)

if stat == rdr.OK:

(stat, nyers_uid) = rdr.anticoll()

if stat == rdr.OK:

print ("Új kártya észlelve")

print(” – címke típusa: 0x%02x” % tag_type)

print(” – uid : 0x%02x%02x%02x%02x” % (nyers_uid[0], nyers_uid[1], nyers_uid[2], nyers_uid[3]))

nyomtatás (nyers_uid[0], nyers_uid[1], nyers_uid[2], nyers_uid[3])

nyomtatás("")

if rdr.select_tag(raw_uid) == rdr.OK:

kulcs = [0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF]

if rdr.auth(rdr.AUTHENT1A, 8, kulcs, raw_uid) == rdr.OK:

print(“8. cím adata: %s” % rdr.read(8))

ps számára a personal_id-ben:

if raw_uid[0:4:1] == personal_id.get(ps):

suos.value(1)

nyomtatás (ps)

uart_write(ps, *raw_uid[0:4:1])

time.sleep (3)

uart2.sendbreak()

szünet

rdr.stop_crypto1()

time.sleep (3)

suos.value(0)

más:

nyomtatás ("Hitelesítési hiba")

más:

print ("Nem sikerült kiválasztani a címkét")

ha uart2.any()>1:

rx2 = []

data_name2 = ”

bin_data = uart2.read(40)

uart2.sendbreak()

rx1 = lista(bin_data)

az rx1-ben lévő tételhez:

rx2.append(chr(elem))

nyomtatás (rx2)

if rx1[3:5:1] == gomb_cmd:

adat_név_len = rx1[6] – 1

adat_neve = rx2[7:adat_név_len+7:1]

adat_neve2 = .join(adat_neve)

print(adat_név2)

if data_name2 == 'back3':

visszatérés

kivéve a KeyboardInterrupt:

nyomtatás ("olvasási hiba")

def do_read2 (idd):

nyomtatás (idd)

míg True:

próbálja ki:

(stat, tag_type) = rdr.request(rdr.REQIDL)

if stat == rdr.OK:

(stat, nyers_uid) = rdr.anticoll()

if stat == rdr.OK:

print ("Új kártya észlelve")

print(” – címke típusa: 0x%02x” % tag_type)

print(” – uid : 0x%02x%02x%02x%02x” % (nyers_uid[0], nyers_uid[1], nyers_uid[2], nyers_uid[3]))

nyomtatás (nyers_uid[0], nyers_uid[1], nyers_uid[2], nyers_uid[3])

nyomtatás("")

if rdr.select_tag(raw_uid) == rdr.OK:

kulcs = [0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF]

if rdr.auth(rdr.AUTHENT1A, 8, kulcs, raw_uid) == rdr.OK:

print(“8. cím adata: %s” % rdr.read(8))

személyzeti_azonosító[idd] = nyers_uid[0:4:1]

uart_write3(*raw_uid[0:4:1])

rdr.stop_crypto1()

más:

nyomtatás ("Hitelesítési hiba")

más:

print ("Nem sikerült kiválasztani a címkét")

ha uart2.any()>1:

rx2 = []

data_name2 = ”

bin_data = uart2.read(40)

uart2.sendbreak()

rx1 = lista(bin_data)

az rx1-ben lévő tételhez:

rx2.append(chr(elem))

if rx1[3:5:1] == gomb_cmd:

adat_név_len = rx1[6] – 1

adat_neve = rx2[7:adat_név_len+7:1]

adat_neve2 = .join(adat_neve)

print(adat_név2)

if data_name2 == 'back1':

visszatérés

kivéve a KeyboardInterrupt:

nyomtatás ("olvasási hiba")

def uart_write(text, *ids):

# nyomtatás (szöveg, *azonosítók)

uart2.write('ST<{"cmd_code":"set_text","type":"label","widget":"kártyanév1",szöveg":"'+str(text)+'"}>ET' )

uart2.write('ST<{"cmd_code":"set_text","type":"label","widget":"cardid1","text":"'+str(ids)+'"}>ET' )

uart2.write('ST<{"cmd_code":"látható_készlet","type":"widget","widget":"lock1","látható":true}>ET')

time.sleep (3)

uart2.write('ST<{"cmd_code":"set_text","type":"label","widget":"kártyanév1",szöveg":"""}>ET')

uart2.write('ST<{"cmd_code":"set_text","type":"label","widget":"cardid1",text":"""}>ET')

uart2.write('ST<{"cmd_code":"látható_készlet","type":"widget","widget":"lock1","látható":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":"bejelentkezés","text":"'+text+'"}>ET')

time.sleep (1)

uart2.write('ST<{"cmd_code":"set_text","type":"label","widget":"bejelentkezés","szöveg":"'+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():

míg True:

ha uart2.any():

user_id = ”

jelszó = ”

rx2 = []

rx_szám = 0

bin_data = uart2.read(40)

uart2.sendbreak()

rx1 = lista(bin_data)

az rx1-ben lévő tételhez:

rx2.append(chr(elem))

rx_szám += 1

adat_vége = rx_szám-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 != ”:

név = Igaz

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 = Igaz

uart_write2('Az ellenőrzés sikeres!','Kérjük, helyezze be a kártyát!')

do_read2(data_id_st4)

visszatérés

def mima_zuce():

temp_id3 = ”

temp_mima3 = ”

míg True:

ha uart2.any():

user_id = ”

jelszó = ”

rx2 = []

rx_szám = 0

# adat_vége = 0

bin_data = uart2.read(40)

uart2.sendbreak()

rx1 = lista(bin_data)

az rx1-ben lévő tételhez:

rx2.append(chr(elem))

rx_szám += 1

# if (rx2[rx_num] == 'T') és (rx2[rx_num-1] == 'E') és (rx2[rx_num-2] == '>'):

# szünet

adat_vége = rx_szám-5

data_id_st = rx2[8:13:1]

data_id_st2 = .join(data_id_st)

print(data_id_st2)

if rx1[3:5:1] == gomb_cmd:

adat_név_len = rx1[6] – 1

adat_neve = rx2[7:adat_név_len+7:1]

adat_neve2 = .join(adat_neve)

print(adat_név2)

if data_name2 == 'back2':

visszatérés

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 = Igaz

temp_id3 = data_id_st4

# személyzeti_psz[temp_id] = nyers_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 = Igaz

temp_mima3 = data_id_st6

# personnel_ps[temp_id] = jelszó_jelző

# print(rx2,felhasználói_azonosító-zászló,jelszó-zászló)

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) és (password_flag == True) és (user_id_flag == True):

admin = Igaz

személyzeti_ps[temp_id3] = temp_mima3

password_flag = Hamis

user_id_flag = Hamis

uart_write4('Az ellenőrzés sikeres!','A bejelentkezés sikeres volt!')

def password_loin():

temp_id2 = ”

temp_mima = ”

míg True:

ha uart2.any():

user_id = ”

jelszó = ”

rx2 = []

rx_szám = 0

# adat_vége = 0

bin_data = uart2.read(40)

uart2.sendbreak()

rx1 = lista(bin_data)

az rx1-ben lévő tételhez:

rx2.append(chr(elem))

rx_szám += 1

# if (rx2[rx_num] == 'T') és (rx2[rx_num-1] == 'E') és (rx2[rx_num-2] == '>'):

# szünet

adat_vége = rx_szám-5

data_id_st = rx2[8:13:1]

data_id_st2 = .join(data_id_st)

print(data_id_st2)

if rx1[3:5:1] == gomb_cmd:

adat_név_len = rx1[6] – 1

adat_neve = rx2[7:adat_név_len+7:1]

adat_neve2 = .join(adat_neve)

print(adat_név2)

if data_name2 == 'back4':

visszatérés

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 a personal_ps-ben:

user_id_flag = Igaz

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 = Igaz

# print(rx2,felhasználói_azonosító-zászló,jelszó-zászló)

print(felhasználói_azonosító_zászló,jelszó_zászló)

if (password_flag == True) és (user_id_flag == True):

uart_write(temp_id2,temp_id2)

password_flag = Hamis

user_id_flag = Hamis

suos.value(1)

uart2.write('ST<{"cmd_code":"látható_készlet","type":"widget","widget":"lock2","látható":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('tanuló',")

suos.value(0)

uart2.write('ST<{"cmd_code":"látható_készlet","type":"widget","widget":"lock2","látható":false}>ET')

uart2.sendbreak()

míg True:

ha uart2.any()>1:

rx2 = []

data_name2 = ”

bin_data = uart2.read(40)

# idő.alvás(1)

uart2.sendbreak()

# idő.alvás(1)

rx1 = lista(bin_data)

az rx1-ben lévő tételhez:

rx2.append(chr(elem))

nyomtatás (rx2)

if rx1[3:5:1] == gomb_cmd:

adat_név_len = rx1[6] – 1

adat_neve = rx2[7:adat_név_len+7:1]

adat_neve2 = .join(adat_neve)

print(adat_név2)

if data_name2 == 'kártya1':

card_zhuce()

elif data_name2 == 'password1':

mima_zuce()

elif data_name2 == 'kártya2':

do_read()

elif data_name2 == 'password2':

password_loin()

MFRC522.py

gépi importból Pin, SPI

az os import uname

MFRC522 osztály:

OK = 0

NOTAGERR = 1

ERR = 2

REQIDL = 0x26

REQALL = 0x52

AUTHENT1A = 0x60

AUTHENT1B = 0x61

def __init__(self, sck, mosi, miso, rst, cs):

self.sck = Pin(sck, Pin.OUT)

self.mosi = Pin(mosi, Pin.OUT)

self.miso = Pin(miso)

self.rst = Pin(rst, Pin.OUT)

self.cs = Pin(cs, Pin.OUT)

self.rst.value(0)

self.cs.value(1)

board = uname()[0]

if board == 'WiPy' or board == 'LoPy' or board == 'FiPy':

self.spi = SPI(0)

self.spi.init(SPI.MASTER, baudrate=1000000, pins=(self.sck, self.mosi, self.miso))

elif board == ‘esp32’:

self.spi = SPI(baudráta=100000, polaritás=0, fázis=0, sck=self.sck, mosi=self.mosi, miso=self.miso)

self.spi.init()

más:

RuntimeError ("Nem támogatott platform") emelése

self.rst.value(1)

self.init()

def _wreg(self, reg, val):

self.cs.value(0)

self.spi.write(b'%c' % int(0xff & ((reg << 1) & 0x7e)))

self.spi.write(b'%c' % int(0xff & val))

self.cs.value(1)

def _rreg(self, reg):

self.cs.value(0)

self.spi.write(b'%c' % int(0xff & (((reg << 1) & 0x7e) | 0x80)))

val = self.spi.read(1)

self.cs.value(1)

return val[0]

def _sflags(self, reg, mask):

self._wreg(reg, self._rreg(reg) | maszk)

def _cflags(self, reg, mask):

self._wreg(reg, self._rreg(reg) & (~maszk))

def _tocard(self, cmd, send):

recv = []

bit = irq_en = vár_irq = n = 0

stat = self.ERR

ha cmd == 0x0E:

irq_en = 0x12

vár_irq = 0x10

elif cmd == 0x0C:

irq_en = 0x77

vár_irq = 0x30

self._wreg(0x02, irq_en | 0x80)

self._cflags(0x04, 0x80)

self._sflags(0x0A, 0x80)

self._wreg(0x01, 0x00)

c in send esetén:

self._wreg(0x09, c)

self._wreg(0x01, cmd)

ha cmd == 0x0C:

self._sflags(0x0D, 0x80)

i = 2000

míg True:

n = self._rreg(0x04)

i -= 1

ha ~((i != 0) és ~(n & 0x01) és ~(n & wait_irq)):

szünet

self._cflags(0x0D, 0x80)

ha én:

if (self._rreg(0x06) & 0x1B) == 0x00:

stat = self.OK

ha n & irq_en & 0x01:

stat = self.NOTAGERR

elif cmd == 0x0C:

n = self._rreg(0x0A)

lbits = self._rreg(0x0C) & 0x07

ha lbit != 0:

bit = (n – 1) * 8 + lbit

más:

bit = n * 8

ha n == 0:

n = 1

elif n > 16:

n = 16

_ esetén az(n) tartományban:

recv.append(self._rreg(0x09))

más:

stat = self.ERR

return stat, recv, bits

def _crc(self, data):

self._cflags(0x05, 0x04)

self._sflags(0x0A, 0x80)

c adatban:

self._wreg(0x09, c)

self._wreg(0x01, 0x03)

i = 0xFF

míg True:

n = self._rreg(0x05)

i -= 1

ha nem ((i != 0) és nem (n & 0x04)):

szünet

return [self._rreg(0x22), self._rreg(0x21)]

def init(self):

self.reset()

self._wreg(0x2A, 0x8D)

self._wreg(0x2B, 0x3E)

self._wreg(0x2D, ​​30)

self._wreg(0x2C, 0)

self._wreg(0x15, 0x40)

self._wreg(0x11, 0x3D)

self.antenna_on()

def reset(ön):

self._wreg(0x01, 0x0F)

def antenna_on(self, on=True):

ha be és ~(self._rreg(0x14) & 0x03):

self._sflags(0x14, 0x03)

más:

self._cflags(0x14, 0x03)

def kérés (ön, mód):

self._wreg(0x0D, 0x07)

(stat, recv, bits) = self._tocard(0x0C, [mode])

if (stat != self.OK) | (bitek != 0x10):

stat = self.ERR

return stat, bits

def anticoll (self):

ser_chk = 0

ser = [0x93, 0x20]

self._wreg(0x0D, 0x00)

(stat, recv, bits) = self._tocard(0x0C, ser)

if stat == self.OK:

ha len(recv) == 5:

i (4) tartományban:

ser_chk = ser_chk ^ recv[i]

if ser_chk != recv[4]:

stat = self.ERR

más:

stat = self.ERR

return stat, recv

def select_tag(self, ser):

buf = [0x93, 0x70] + ser[:5]

buf += self._crc(buf)

(stat, recv, bits) = self._tocard(0x0C, buf)

return self.OK if (stat == self.OK) és (bits == 0x18) else self.ERR

def auth(self, mode, addr, sect, ser):

return self._tocard(0x0E, [mode, addr] + sect + ser[:4])[0]

def stop_crypto1(self):

self._cflags(0x08, 0x08)

def read(self, addr):

adatok = [0x30, cím]

adatok += self._crc(data)

(stat, recv, _) = self._tocard(0x0C, data)

return recv if stat == self.OK else None

def write(self, addr, data):

buf = [0xA0, cím]

buf += self._crc(buf)

(stat, recv, bits) = self._tocard(0x0C, buf)

ha nem (stat == self.OK) vagy nem (bit == 4) vagy nem ((recv[0] & 0x0F) == 0x0A):

stat = self.ERR

más:

buf = []

i (16) tartományban:

buf.append(data[i])

buf += self._crc(buf)

(stat, recv, bits) = self._tocard(0x0C, buf)

ha nem (stat == self.OK) vagy nem (bit == 4) vagy nem ((recv[0] & 0x0F) == 0x0A):

stat = self.ERR

vissza stat

Forrás: Plato Data Intelligence