IOT

Intelligente toegangscontrole op basis van STONE TFT LCD en ESP32

Korte introductie

Smart home komt steeds vaker voor met de ontwikkeling van technologie, dit artikel zal zich richten op de beveiligingsaspecten van het intelligente toegangscontroleproject.

Dit artikel gebruikt Het aanraakscherm van STONE om commando's naar de MCU te sturen om het relais en de MFRC522-module te besturen.

Het principe van kaartlezen: door de RFID-RC522-module te besturen, identificeert u de ID-kaart-ID dicht bij de ID-kaart en bepaalt u vervolgens of de ID bestaat in de database van het woord typisch, ID is de typische waarde van het woord, als het bestaan ​​van de verificatie door , en druk vervolgens de bijbehorende naam af en bestuur vervolgens het elektromagnetische slot op dezelfde manier.

Benodigde materialen

Gerealiseerde functie

  1. kaart registratie.
  2. gebruikersnaam en wachtwoord registratie.
  3. kaartveeg om het elektronische slot te ontgrendelen.
  4. Gebruikersnaam en wachtwoord om het elektronische slot te ontgrendelen.

De belangrijkste hardware Beschrijving:

RFID-module

Deze module kan direct in verschillende leesmodules worden geladen. Het maakt gebruik van een spanning van 3.3 V, via de SPI-interface met slechts een paar draden. Direct verbonden met een CPU-moederbord, kan de module op een stabiele en betrouwbare manier werken als kaartlezer op afstand.

Intelligente toegangscontrole op basis van STONE TFT LCD en ESP32 IOT PlatoBlockchain Data Intelligence. Verticaal zoeken. Ai.
Intelligente toegangscontrole op basis van STONE TFT LCD en ESP32

De STWI070WT-01 is ontworpen als TFT-monitor & Touch-controller. Het omvat processor, besturingsprogramma, stuurprogramma, flash-geheugen, RS232/RS422/RS485/TTL/LAN-poort, Wi-Fi/Bluetooth, touchscreen, voeding enz., dus het is een heel weergavesysteem gebaseerd op de krachtige en gemakkelijke besturingssysteem, dat kan worden bestuurd door elke MCU.

Intelligente toegangscontrole op basis van STONE TFT LCD en ESP32 IOT PlatoBlockchain Data Intelligence. Verticaal zoeken. Ai.
Intelligente toegangscontrole op basis van STONE TFT LCD en ESP32

GUI-ontwerp

Intelligente toegangscontrole op basis van STONE TFT LCD en ESP32 IOT PlatoBlockchain Data Intelligence. Verticaal zoeken. Ai.
Intelligente toegangscontrole op basis van STONE TFT LCD en ESP32

Code delen

Intelligente toegangscontrole op basis van STONE TFT LCD en ESP32 IOT PlatoBlockchain Data Intelligence. Verticaal zoeken. Ai.
Intelligente toegangscontrole op basis van STONE TFT LCD en ESP32

mfrc522 importeren

import tijd

importeer _thread

van os import uname

van machine-importpin, UART

#van pyb import UART

#importmachine

suos = Pin(32,Pin.UIT)

uart2 = UART(2, baudrate=115200, rx=16,tx=17,time-out=10)

ESP32_HSPI_CLOCK = 14

ESP32_HSPI_SLAVE_SELECT = 15

ESP32_HSPI_MISO = 12

ESP32_HSPI_MOSI = 13

ESP32_MFRC522_RST = 5

rx3 = []

rx_naam = []

user_id_flag = Onwaar

password_flag = Onwaar

tijdelijke_id = ”

temp_mima = ”

personeels-id = {'zbw':[236,230,169,47],'lbw':[19,165,93,4]}

personeel_ps = {'zbw':'zbw3366′,'lbw':'lbwnb'}

admin_password = ('yyds')

knop_cmd = [16,1]

bewerken1_cmd = [16,112]

bewerken2_cmd = [16,113]

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

Probeer het volgende:

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

als stat == rdr.OK:

(stat, raw_uid) = rdr.anticoll()

als stat == rdr.OK:

print ("Nieuwe kaart gedetecteerd")

print(” – tagtype: 0x%02x” % tag_type)

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

afdrukken("")

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

toets = [0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF]

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

als stat == rdr.OK:

print ("Gegevens geschreven naar kaart")

anders:

print ("Kan gegevens niet naar kaart schrijven")

anders:

print ("Verificatiefout")

anders:

print ("Kan tag niet selecteren")

behalve KeyboardInterrupt:

print(“schrijffout”)

def do_read():

terwijl waar:

Probeer het volgende:

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

als stat == rdr.OK:

(stat, raw_uid) = rdr.anticoll()

als stat == rdr.OK:

print ("Nieuwe kaart gedetecteerd")

print(” – tagtype: 0x%02x” % tag_type)

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

afdrukken (raw_uid[0], raw_uid[1], raw_uid[2], raw_uid[3])

afdrukken("")

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

toets = [0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF]

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

print(“Adres 8 data: %s” % rdr.read(8))

voor ps in person_id:

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

suos.waarde(1)

afdrukken (ps)

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

time.sleep (3)

uart2.sendbreak()

breken

rdr.stop_crypto1()

time.sleep (3)

suos.waarde(0)

anders:

print ("Verificatiefout")

anders:

print ("Kan tag niet selecteren")

als uart2.any()>1:

rx2 = []

data_name2 = ”

bin_data = uart2.lezen(40)

uart2.sendbreak()

rx1 = lijst (bin_data)

voor item in rx1:

rx2.append(chr(item))

afdrukken(rx2)

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

if data_name2 == 'back3':

terugkeer

behalve KeyboardInterrupt:

print(“leesfout”)

def do_read2 (idd):

afdrukken (idd)

terwijl waar:

Probeer het volgende:

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

als stat == rdr.OK:

(stat, raw_uid) = rdr.anticoll()

als stat == rdr.OK:

print ("Nieuwe kaart gedetecteerd")

print(” – tagtype: 0x%02x” % tag_type)

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

afdrukken (raw_uid[0], raw_uid[1], raw_uid[2], raw_uid[3])

afdrukken("")

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

toets = [0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF]

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

print(“Adres 8 data: %s” % rdr.read(8))

personeel_id[idd] = raw_uid[0:4:1]

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

rdr.stop_crypto1()

anders:

print ("Verificatiefout")

anders:

print ("Kan tag niet selecteren")

als uart2.any()>1:

rx2 = []

data_name2 = ”

bin_data = uart2.lezen(40)

uart2.sendbreak()

rx1 = lijst (bin_data)

voor item in rx1:

rx2.append(chr(item))

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

if data_name2 == 'back1':

terugkeer

behalve KeyboardInterrupt:

print(“leesfout”)

def uart_write(tekst, *ids):

# print(tekst, *id's)

uart2.write('ST<{“cmd_code”:”set_text”,”type”:”label”,”widget”:”kaartnaam1″,”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”:”kaartnaam1″,”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(tekst,tekst2):

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

standaard 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(tekst,tekst2):

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

terwijl waar:

als uart2.any():

gebruiker_id = ”

wachtwoord = ”

rx2 = []

rx_getal = 0

bin_data = uart2.lezen(40)

uart2.sendbreak()

rx1 = lijst (bin_data)

voor item in rx1:

rx2.append(chr(item))

rx_getal += 1

data_end = rx_getal-5

data_id_st = rx2[8:13:1]

data_id_st2 = .join(data_id_st)

print(data_id_st2)

if data_id_st2 == 'bewerken1':

data_id_st3 = rx2[15:data_end:1]

data_id_st4 = .join(data_id_st3)

print(data_id_st4)

als data_id_st4 != ”:

naam = True

elif data_id_st2 == 'bewerken2':

data_id_st5 = rx2[15:data_end:1]

data_id_st6 = .join(data_id_st5)

if data_id_st6 == admin_wachtwoord:

beheerder = waar

uart_write2('Verificatie geslaagd!','Plaats de kaart alstublieft!')

do_read2(data_id_st4)

terugkeer

def mima_zuce():

tijdelijke_id3 = ”

temp_mima3 = ”

terwijl waar:

als uart2.any():

gebruiker_id = ”

wachtwoord = ”

rx2 = []

rx_getal = 0

# data_end = 0

bin_data = uart2.lezen(40)

uart2.sendbreak()

rx1 = lijst (bin_data)

voor item in rx1:

rx2.append(chr(item))

rx_getal += 1

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

# pauze

data_end = rx_getal-5

data_id_st = rx2[8:13:1]

data_id_st2 = .join(data_id_st)

print(data_id_st2)

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

if data_name2 == 'back2':

terugkeer

if data_id_st2 == 'bewerken3':

data_id_st3 = rx2[15:data_end:1]

data_id_st4 = .join(data_id_st3)

print(data_id_st4)

user_id_flag = Waar

temp_id3 = data_id_st4

# staff_ps[temp_id] = raw_uid[0:4:1]

elif data_id_st2 == 'bewerken4':

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:

wachtwoord_vlag = Waar

temp_mima3 = data_id_st6

#personeel_ps[temp_id] = wachtwoord_vlag

# print(rx2,user_id_flag,password_flag)

elif data_id_st2 == 'bewerken7':

data_id_st5 = rx2[15:data_end:1]

data_id_st6 = .join(data_id_st5)

if (data_id_st6 == admin_password) en (password_flag == True) en (user_id_flag == True):

beheerder = waar

personeel_ps[temp_id3] = temp_mima3

password_flag = Onwaar

user_id_flag = Onwaar

uart_write4('Verificatie geslaagd!','aanmelding is gelukt!')

def wachtwoord_loin():

tijdelijke_id2 = ”

temp_mima = ”

terwijl waar:

als uart2.any():

gebruiker_id = ”

wachtwoord = ”

rx2 = []

rx_getal = 0

# data_end = 0

bin_data = uart2.lezen(40)

uart2.sendbreak()

rx1 = lijst (bin_data)

voor item in rx1:

rx2.append(chr(item))

rx_getal += 1

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

# pauze

data_end = rx_getal-5

data_id_st = rx2[8:13:1]

data_id_st2 = .join(data_id_st)

print(data_id_st2)

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

if data_name2 == 'back4':

terugkeer

if data_id_st2 == 'bewerken5':

data_id_st3 = rx2[15:data_end:1]

data_id_st4 = .join(data_id_st3)

print(data_id_st4)

if data_id_st4 in person_ps:

user_id_flag = Waar

temp_id2 = data_id_st4

elif data_id_st2 == 'bewerken6':

data_id_st5 = rx2[15:data_end:1]

data_id_st6 = .join(data_id_st5)

print(data_id_st6)

afdrukken(temp_id2)

print(personeel_ps)

if person_ps.get(temp_id2) == data_id_st6:

wachtwoord_vlag = Waar

# print(rx2,user_id_flag,password_flag)

print(gebruikersnaam_vlag,wachtwoord_vlag)

if (password_flag == True) en (user_id_flag == True):

uart_write(temp_id2,temp_id2)

password_flag = Onwaar

user_id_flag = Onwaar

suos.waarde(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.waarde(0)

uart2.write('ST<{“cmd_code”:”set_visible”,”type”:”widget”,”widget”:”lock2″,”visible”:false}>ET')

uart2.sendbreak()

terwijl waar:

als uart2.any()>1:

rx2 = []

data_name2 = ”

bin_data = uart2.lezen(40)

# tijd.slaap(1)

uart2.sendbreak()

# tijd.slaap(1)

rx1 = lijst (bin_data)

voor item in rx1:

rx2.append(chr(item))

afdrukken(rx2)

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

if data_name2 == 'kaart1':

card_zhuce()

elif data_name2 == 'wachtwoord1':

mima_zuce()

elif data_name2 == 'kaart2':

doen_lezen()

elif data_name2 == 'wachtwoord2':

wachtwoord_loin()

MFRC522.py

van machine-import Pin, SPI

van os import uname

klasse MFRC522:

Oké = 0

NOTAGERR = 1

ERR = 2

REQIDL = 0x26

AANVRAAG = 0x52

AUTHENT1A = 0x60

AUTHENT1B = 0x61

def __init__(zelf, sck, mosi, miso, eerste, cs):

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

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

zelf.miso = Pin(miso)

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

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

zelf.eerste.waarde(0)

zelf.cs.waarde(1)

bord = uname()[0]

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

zelf.spi = SPI(0)

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

elif bord == 'esp32':

self.spi = SPI(baudrate=100000, polariteit=0, fase=0, sck=self.sck, mosi=self.mosi, miso=self.miso)

zelf.spi.init()

anders:

raise RuntimeError ("Niet-ondersteund platform")

zelf.eerste.waarde(1)

zelf.init()

def _wreg(zelf, reg, val):

zelf.cs.waarde(0)

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

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

zelf.cs.waarde(1)

def _rreg(zelf, reg):

zelf.cs.waarde(0)

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

val = zelf.spi.lezen(1)

zelf.cs.waarde(1)

retourwaarde[0]

def _sflags(zelf, reg, masker):

zelf._wreg(reg, zelf._rreg(reg) | masker)

def _cflags(zelf, reg, masker):

zelf._wreg(reg, zelf._rreg(reg) & (~mask))

def _tocard(zelf, cmd, verzenden):

recv = []

bits = irq_en = wacht_irq = n = 0

stat = zelf.ERR

als cmd == 0x0E:

irq_nl = 0x12

wacht_irq = 0x10

elif cmd == 0x0C:

irq_nl = 0x77

wacht_irq = 0x30

zelf._wreg(0x02, irq_nl | 0x80)

zelf._cflags(0x04, 0x80)

zelf._sflags(0x0A, 0x80)

zelf._wreg(0x01, 0x00)

voor c in stuur:

zelf._wreg(0x09, c)

zelf._wreg(0x01, cmd)

als cmd == 0x0C:

zelf._sflags(0x0D, 0x80)

i = 2000

terwijl waar:

n = zelf._rreg(0x04)

ik -= 1

if ~((i != 0) and ~(n & 0x01) and ~(n & wait_irq)):

breken

zelf._cflags(0x0D, 0x80)

als ik:

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

stat = zelf.OK

indien n & irq_en & 0x01:

stat = zelf.NOTAGERR

elif cmd == 0x0C:

n = zelf._rreg(0x0A)

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

als lbits != 0:

bits = (n – 1) * 8 + lbits

anders:

bits = n * 8

als n == 0:

n = 1

elif n > 16:

n = 16

voor _ in bereik (n):

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

anders:

stat = zelf.ERR

retourneer stat, recv, bits

def _crc(zelf, gegevens):

zelf._cflags(0x05, 0x04)

zelf._sflags(0x0A, 0x80)

voor c in gegevens:

zelf._wreg(0x09, c)

zelf._wreg(0x01, 0x03)

ik = 0xFF

terwijl waar:

n = zelf._rreg(0x05)

ik -= 1

zo niet ((i != 0) en niet (n & 0x04)):

breken

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

definieer (zelf):

zelf.reset()

zelf._wreg(0x2A, 0x8D)

zelf._wreg(0x2B, 0x3E)

zelf._wreg(0x2D, ​​30)

zelf._wreg(0x2C, 0)

zelf._wreg(0x15, 0x40)

zelf._wreg(0x11, 0x3D)

zelf.antenne_on()

def reset(zelf):

zelf._wreg(0x01, 0x0F)

def antenne_on(zelf, aan=True):

indien aan en ~(self._rreg(0x14) & 0x03):

zelf._sflags(0x14, 0x03)

anders:

zelf._cflags(0x14, 0x03)

def verzoek (zelf, modus):

zelf._wreg(0x0D, 0x07)

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

if (stat != zelf.OK) | (bits != 0x10):

stat = zelf.ERR

retour stat, bits

def anticoll(zelf):

ser_chk = 0

ser = [0x93, 0x20]

zelf._wreg(0x0D, 0x00)

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

if stat == zelf.OK:

als len(recv) == 5:

voor i in bereik (4):

ser_chk = ser_chk ^ recv[i]

als ser_chk != recv[4]:

stat = zelf.ERR

anders:

stat = zelf.ERR

retour stat, recv

def select_tag(zelf, ser):

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

buf += zelf._crc(buf)

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

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

def auth(zelf, modus, addr, sekte, ser):

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

def stop_crypto1(zelf):

zelf._cflags(0x08, 0x08)

def lezen(zelf, adres):

gegevens = [0x30, adres]

data += zelf._crc(data)

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

return recv if stat == self.OK else Geen

def schrijven (zelf, adres, gegevens):

buf = [0xA0, adres]

buf += zelf._crc(buf)

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

zo niet (stat == self.OK) of niet (bits == 4) of niet ((recv[0] & 0x0F) == 0x0A):

stat = zelf.ERR

anders:

buf = []

voor i in bereik (16):

buf.toevoegen(gegevens[i])

buf += zelf._crc(buf)

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

zo niet (stat == self.OK) of niet (bits == 4) of niet ((recv[0] & 0x0F) == 0x0A):

stat = zelf.ERR

retour stat

Bron: Plato Data Intelligence