Σύντομη εισαγωγή
Το έξυπνο σπίτι γίνεται όλο και πιο κοινό με την ανάπτυξη της τεχνολογίας, αυτό το άρθρο θα επικεντρωθεί στις πτυχές ασφάλειας του έργου έξυπνου ελέγχου πρόσβασης.
Αυτό το άρθρο χρησιμοποιεί Η οθόνη αφής της STONE για αποστολή εντολών στο MCU για έλεγχο του ρελέ και της μονάδας MFRC522.
Η αρχή της ανάγνωσης καρτών: οδηγώντας τη μονάδα RFID-RC522, αναγνωρίστε το αναγνωριστικό της ταυτότητας κοντά στην ταυτότητα και, στη συνέχεια, προσδιορίστε εάν το αναγνωριστικό υπάρχει στη βάση δεδομένων της λέξης τυπικό, ID είναι η τυπική τιμή της λέξης, εάν η ύπαρξη της επαλήθευσης μέσω , και στη συνέχεια εκτυπώστε το αντίστοιχο όνομα και, στη συνέχεια, οδηγήστε την ηλεκτρομαγνητική κλειδαριά με τον ίδιο τρόπο.
Απαιτούμενα υλικά
- ESP32
- Ηλεκτρονική κλειδαριά KOB
- Αναμετάδοση
- Οθόνη αφής STONE STWI070WT-01
- Μονάδα MFRC522
Πραγματοποιημένη λειτουργία
- εγγραφή κάρτας.
- εγγραφή ονόματος χρήστη και κωδικού πρόσβασης.
- σύρετε την κάρτα για να ξεκλειδώσετε την ηλεκτρονική κλειδαριά.
- Όνομα χρήστη και κωδικός πρόσβασης για να ξεκλειδώσετε την ηλεκτρονική κλειδαριά.
Περιγραφή του κύριου υλικού
Μονάδα RFID
Αυτή η ενότητα μπορεί να φορτωθεί απευθείας σε διάφορες μονάδες ανάγνωσης. Χρησιμοποιεί τάση 3.3 V, μέσω της διεπαφής SPI με λίγα μόνο καλώδια. Άμεσα συνδεδεμένη με μια μητρική πλακέτα CPU, η μονάδα μπορεί να λειτουργήσει με σταθερό και αξιόπιστο τρόπο ως συσκευή ανάγνωσης καρτών απόστασης.
Το STWI070WT-01 έχει σχεδιαστεί ως οθόνη TFT και ελεγκτής αφής. Περιλαμβάνει επεξεργαστή, πρόγραμμα ελέγχου, πρόγραμμα οδήγησης, μνήμη flash, θύρα RS232/RS422/RS485/TTL/LAN, Wi-Fi/Bluetooth, οθόνη αφής, τροφοδοτικό κ.λπ., επομένως είναι ένα ολόκληρο σύστημα οθόνης που βασίζεται στο πανίσχυρο και εύκολο λειτουργικό σύστημα, το οποίο μπορεί να ελεγχθεί από Οποιοδήποτε MCU.
Σχεδιασμός GUI
Κοινή χρήση κώδικα
εισαγωγή mfrc522
χρόνος εισαγωγής
import _thread
από το os import uname
από Pin εισαγωγής μηχανής, UART
#from pyb εισαγωγή UART
#εισαγωγή μηχάνημα
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 = Λάθος
password_flag = Λάθος
temp_id = "
temp_mima = ”
personel_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():
δοκιμάστε:
(stat, tag_type) = rdr.request(rdr.REQIDL)
if stat == rdr.OK:
(stat, raw_uid) = rdr.anticoll()
if stat == rdr.OK:
εκτύπωση ("Εντοπίστηκε νέα κάρτα")
print(” – τύπος ετικέτας: 0x%02x” % tag_type)
print(” – uid : 0x%02x%02x%02x%02x” % (raw_uid[0], raw_uid[1], raw_uid[2], raw_uid[3]))
Τυπώνω("")
αν rdr.select_tag(raw_uid) == rdr.OK:
κλειδί = [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:
εκτύπωση ("Δεδομένα γραμμένα στην κάρτα")
αλλού:
εκτύπωση ("Αποτυχία εγγραφής δεδομένων στην κάρτα")
αλλού:
εκτύπωση ("Σφάλμα ελέγχου ταυτότητας")
αλλού:
εκτύπωση ("Αποτυχία επιλογής ετικέτας")
εκτός από το πληκτρολόγιο Διακοπή:
εκτύπωση ("σφάλμα εγγραφής")
def do_read():
ενώ True:
δοκιμάστε:
(stat, tag_type) = rdr.request(rdr.REQIDL)
if stat == rdr.OK:
(stat, raw_uid) = rdr.anticoll()
if stat == rdr.OK:
εκτύπωση ("Εντοπίστηκε νέα κάρτα")
print(” – τύπος ετικέτας: 0x%02x” % tag_type)
print(” – uid : 0x%02x%02x%02x%02x” % (raw_uid[0], raw_uid[1], raw_uid[2], raw_uid[3]))
εκτύπωση (raw_uid[0], raw_uid[1], raw_uid[2], raw_uid[3])
Τυπώνω("")
αν rdr.select_tag(raw_uid) == rdr.OK:
κλειδί = [0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF]
if rdr.auth(rdr.AUTHENT1A, 8, key, raw_uid) == rdr.OK:
print("Δεδομένα διεύθυνσης 8: %s" % rdr.read(8))
για ps στο personel_id:
if raw_uid[0:4:1] == personnel_id.get(ps):
suos.value(1)
εκτύπωση (ps)
uart_write(ps, *raw_uid[0:4:1])
time.sleep (3)
uart2.sendbreak()
σπάσει
rdr.stop_crypto1()
time.sleep (3)
suos.value(0)
αλλού:
εκτύπωση ("Σφάλμα ελέγχου ταυτότητας")
αλλού:
εκτύπωση ("Αποτυχία επιλογής ετικέτας")
if uart2.any()>1:
rx2 = []
data_name2 = "
bin_data = uart2.read(40)
uart2.sendbreak()
rx1 = λίστα(bin_data)
για το στοιχείο σε rx1:
rx2.append(chr(στοιχείο))
εκτύπωση (rx2)
εάν 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)
εκτύπωση(όνομα_δεδομένων2)
if data_name2 == 'back3':
απόδοση
εκτός από το πληκτρολόγιο Διακοπή:
εκτύπωση ("σφάλμα ανάγνωσης")
def do_read2 (idd):
εκτύπωση (idd)
ενώ True:
δοκιμάστε:
(stat, tag_type) = rdr.request(rdr.REQIDL)
if stat == rdr.OK:
(stat, raw_uid) = rdr.anticoll()
if stat == rdr.OK:
εκτύπωση ("Εντοπίστηκε νέα κάρτα")
print(” – τύπος ετικέτας: 0x%02x” % tag_type)
print(” – uid : 0x%02x%02x%02x%02x” % (raw_uid[0], raw_uid[1], raw_uid[2], raw_uid[3]))
εκτύπωση (raw_uid[0], raw_uid[1], raw_uid[2], raw_uid[3])
Τυπώνω("")
αν rdr.select_tag(raw_uid) == rdr.OK:
κλειδί = [0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF]
if rdr.auth(rdr.AUTHENT1A, 8, key, raw_uid) == rdr.OK:
print("Δεδομένα διεύθυνσης 8: %s" % rdr.read(8))
personel_id[idd] = raw_uid[0:4:1]
uart_write3(*raw_uid[0:4:1])
rdr.stop_crypto1()
αλλού:
εκτύπωση ("Σφάλμα ελέγχου ταυτότητας")
αλλού:
εκτύπωση ("Αποτυχία επιλογής ετικέτας")
if uart2.any()>1:
rx2 = []
data_name2 = "
bin_data = uart2.read(40)
uart2.sendbreak()
rx1 = λίστα(bin_data)
για το στοιχείο σε rx1:
rx2.append(chr(στοιχείο))
εάν 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)
εκτύπωση(όνομα_δεδομένων2)
if data_name2 == 'back1':
απόδοση
εκτός από το πληκτρολόγιο Διακοπή:
εκτύπωση ("σφάλμα ανάγνωσης")
def uart_write(κείμενο, *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 (κείμενο, κείμενο2):
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 (κείμενο, κείμενο2):
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():
ενώ True:
if uart2.any():
user_id = "
κωδικός = ”
rx2 = []
rx_num = 0
bin_data = uart2.read(40)
uart2.sendbreak()
rx1 = λίστα(bin_data)
για το στοιχείο σε rx1:
rx2.append(chr(στοιχείο))
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 != ”:
όνομα = Αληθινό
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 = Αληθινό
uart_write2('Η επαλήθευση πέρασε!','Παρακαλώ τοποθετήστε την κάρτα!')
do_read2(data_id_st4)
απόδοση
def mima_zuce():
temp_id3 = "
temp_mima3 = "
ενώ True:
if uart2.any():
user_id = "
κωδικός = ”
rx2 = []
rx_num = 0
# data_end = 0
bin_data = uart2.read(40)
uart2.sendbreak()
rx1 = λίστα(bin_data)
για το στοιχείο σε rx1:
rx2.append(chr(στοιχείο))
rx_num += 1
# if (rx2[rx_num] == 'T') και (rx2[rx_num-1] == 'E') και (rx2[rx_num-2] == '>'):
# Διακοπή
data_end = rx_num-5
data_id_st = rx2[8:13:1]
data_id_st2 = "join(data_id_st)
print(data_id_st2)
εάν 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)
εκτύπωση(όνομα_δεδομένων2)
if data_name2 == 'back2':
απόδοση
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 = Σωστό
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 = Σωστό
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)
εάν (data_id_st6 == admin_password) και (password_flag == True) και (user_id_flag == True):
admin = Αληθινό
personel_ps[temp_id3] = temp_mima3
password_flag = Λάθος
user_id_flag = Λάθος
uart_write4('Η επαλήθευση πέρασε!','η σύνδεση ήταν επιτυχής!')
Def password_loin():
temp_id2 = "
temp_mima = ”
ενώ True:
if uart2.any():
user_id = "
κωδικός = ”
rx2 = []
rx_num = 0
# data_end = 0
bin_data = uart2.read(40)
uart2.sendbreak()
rx1 = λίστα(bin_data)
για το στοιχείο σε rx1:
rx2.append(chr(στοιχείο))
rx_num += 1
# if (rx2[rx_num] == 'T') και (rx2[rx_num-1] == 'E') και (rx2[rx_num-2] == '>'):
# Διακοπή
data_end = rx_num-5
data_id_st = rx2[8:13:1]
data_id_st2 = "join(data_id_st)
print(data_id_st2)
εάν 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)
εκτύπωση(όνομα_δεδομένων2)
if data_name2 == 'back4':
απόδοση
if data_id_st2 == 'edit5':
data_id_st3 = rx2[15:data_end:1]
data_id_st4 = .join(data_id_st3)
print(data_id_st4)
εάν data_id_st4 στο personel_ps:
user_id_flag = Σωστό
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)
εκτύπωση(temp_id2)
εκτύπωση(personnel_ps)
εάν personnel_ps.get(temp_id2) == data_id_st6:
password_flag = Σωστό
# print(rx2,user_id_flag,password_flag)
print(user_id_flag,password_flag)
εάν (password_flag == True) και (user_id_flag == True):
uart_write(temp_id2,temp_id2)
password_flag = Λάθος
user_id_flag = Λάθος
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('φοιτητής',")
suos.value(0)
uart2.write('ST<{“cmd_code”:”set_visible”,”type”:”widget”,”widget”:”lock2″,”visible”:false}>ET”)
uart2.sendbreak()
ενώ True:
if uart2.any()>1:
rx2 = []
data_name2 = "
bin_data = uart2.read(40)
# time.sleep(1)
uart2.sendbreak()
# time.sleep(1)
rx1 = λίστα(bin_data)
για το στοιχείο σε rx1:
rx2.append(chr(στοιχείο))
εκτύπωση (rx2)
εάν 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)
εκτύπωση(όνομα_δεδομένων2)
εάν data_name2 == 'card1':
card_zhuce()
elif data_name2 == 'password1':
mima_zuce()
elif data_name2 == 'card2':
do_read()
elif data_name2 == 'password2':
password_loin()
MFRC522.py
από Pin εισαγωγής μηχανής, SPI
από το os import uname
κλάση MFRC522:
ΟΚ = 0
NOTAGERR = 1
ΣΦΑΛΜΑ = 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 = Καρφίτσωμα(miso)
self.rst = Καρφίτσωμα (πρώτο, Pin.OUT)
self.cs = Pin(cs, Pin.OUT)
self.rst.value(0)
self.cs.value(1)
πίνακας = uname()[0]
if board == 'WiPy' ή board == 'LoPy' ή 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(baudrate=100000, πολικότητα=0, φάση=0, sck=self.sck, mosi=self.mosi, miso=self.miso)
self.spi.init()
αλλού:
αύξηση RuntimeError ("Μη υποστηριζόμενη πλατφόρμα")
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)
επιστροφή val[0]
def _sflags (self, reg, mask):
self._wreg(reg, self._rreg(reg) | mask)
def _cflags(self, reg, mask):
self._wreg(reg, self._rreg(reg) & (~mask))
def _tocard(self, cmd, send):
recv = []
bits = irq_en = αναμονή_irq = n = 0
stat = εαυτό.ΣΦΑΛΜΑ
εάν cmd == 0x0E:
irq_en = 0x12
wait_irq = 0x10
elif cmd == 0x0C:
irq_en = 0x77
wait_irq = 0x30
self._wreg(0x02, irq_en | 0x80)
self._cflags(0x04, 0x80)
self._sflags(0x0A, 0x80)
self._wreg(0x01, 0x00)
για c σε αποστολή:
self._wreg(0x09, c)
self._wreg(0x01, cmd)
αν cmd == 0x0C:
self._sflags(0x0D, 0x80)
i = 2000
ενώ True:
n = self._rreg(0x04)
i - = 1
αν ~((i != 0) και ~(n & 0x01) και ~(n & wait_irq)):
σπάσει
self._cflags(0x0D, 0x80)
αν εγώ:
if (self._rreg(0x06) & 0x1B) == 0x00:
stat = εαυτός.ΟΚ
εάν n & irq_en & 0x01:
stat = εαυτός.NOTAGERR
elif cmd == 0x0C:
n = self._rreg(0x0A)
lbits = self._rreg(0x0C) & 0x07
αν λίβρες != 0:
bits = (n – 1) * 8 + lbit
αλλού:
bit = n * 8
αν n == 0:
n = 1
elif n > 16:
n = 16
για _ στο εύρος(n):
recv.append(self._rreg(0x09))
αλλού:
stat = εαυτό.ΣΦΑΛΜΑ
επιστροφή stat, recv, bits
def _crc(self, data):
self._cflags(0x05, 0x04)
self._sflags(0x0A, 0x80)
για c σε δεδομένα:
self._wreg(0x09, c)
self._wreg(0x01, 0x03)
i = 0xFF
ενώ True:
n = self._rreg(0x05)
i - = 1
αν όχι ((i != 0) και όχι (n & 0x04)):
σπάσει
επιστροφή [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(self):
self._wreg(0x01, 0x0F)
def antenna_on(self, on=True):
if on και ~(self._rreg(0x14) & 0x03):
self._sflags(0x14, 0x03)
αλλού:
self._cflags(0x14, 0x03)
def request (self, mode):
self._wreg(0x0D, 0x07)
(stat, recv, bits) = self._tocard(0x0C, [mode])
αν (stat != εαυτό.ΟΚ) | (bit != 0x10):
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:
αν len(recv) == 5:
για i στην περιοχή (4):
ser_chk = ser_chk ^ recv[i]
if ser_chk != recv[4]:
stat = εαυτό.ΣΦΑΛΜΑ
αλλού:
stat = εαυτό.ΣΦΑΛΜΑ
επιστροφή stat, recv
def select_tag(self, ser):
buf = [0x93, 0x70] + ser[:5]
buf += self._crc(buf)
(stat, recv, bits) = self._tocard(0x0C, buf)
επιστροφή self.OK εάν (stat == self.OK) και (bits == 0x18) αλλιώς self.ERR
def auth(self, mode, adr, sect, ser):
επιστροφή self._tocard(0x0E, [mode, addr] + sect + ser[:4])[0]
def stop_crypto1(self):
self._cflags(0x08, 0x08)
def read(self, adr):
δεδομένα = [0x30, adr]
data += self._crc(data)
(stat, recv, _) = self._tocard(0x0C, δεδομένα)
επιστροφή recv εάν stat == εαυτό.ΟΚ άλλο Κανένα
def write(self, adr, data):
buf = [0xA0, addr]
buf += self._crc(buf)
(stat, recv, bits) = self._tocard(0x0C, buf)
αν όχι (stat == self.OK) ή όχι (bit == 4) ή όχι ((recv[0] & 0x0F) == 0x0A):
stat = εαυτό.ΣΦΑΛΜΑ
αλλού:
buf = []
για i στην περιοχή (16):
buf.append(data[i])
buf += self._crc(buf)
(stat, recv, bits) = self._tocard(0x0C, buf)
αν όχι (stat == self.OK) ή όχι (bit == 4) ή όχι ((recv[0] & 0x0F) == 0x0A):
stat = εαυτό.ΣΦΑΛΜΑ
στατιστικά επιστροφής
Πηγή: Intelligence Data Intelligence