IOT

اسٹون TFT LCD اور ESP32 پر مبنی ذہین رسائی کنٹرول

مختصر تعارف

ٹیکنالوجی کی ترقی کے ساتھ سمارٹ ہوم زیادہ سے زیادہ عام ہوتا جا رہا ہے، اس مضمون میں ذہین رسائی کنٹرول پروجیکٹ کے حفاظتی پہلوؤں پر توجہ دی جائے گی۔

یہ مضمون استعمال کرتا ہے۔ پتھر کی ٹچ اسکرین ریلے اور MFRC522 ماڈیول کو کنٹرول کرنے کے لیے MCU کو کمانڈ بھیجنے کے لیے۔

کارڈ ریڈنگ کا اصول: RFID-RC522 ماڈیول چلا کر، شناختی کارڈ کے قریب شناختی کارڈ کی شناخت کریں، اور پھر اس بات کا تعین کریں کہ آیا ID لفظ typical کے ڈیٹا بیس میں موجود ہے، ID لفظ کی مخصوص قدر ہے، اگر اس کے ذریعے تصدیق کا وجود ، اور پھر متعلقہ نام پرنٹ کریں، اور پھر برقی مقناطیسی تالا کو اسی طرح چلائیں۔

مطلوبہ مواد

فنکشن کا احساس ہوا۔

  1. کارڈ رجسٹریشن.
  2. صارف نام اور پاس ورڈ رجسٹریشن۔
  3. الیکٹرانک لاک کو غیر مقفل کرنے کے لیے کارڈ سوائپ کریں۔
  4. الیکٹرانک لاک کو غیر مقفل کرنے کے لیے صارف کا نام اور پاس ورڈ۔

اہم ہارڈ ویئر کی تفصیل

آریفآئڈی ماڈیول

اس ماڈیول کو براہ راست مختلف ریڈر ماڈیولز میں لوڈ کیا جا سکتا ہے۔ یہ صرف چند تاروں کے ساتھ SPI انٹرفیس کے ذریعے 3.3V کے وولٹیج کا استعمال کرتا ہے۔ سی پی یو مدر بورڈ کے ساتھ براہ راست جڑا ہوا، ماڈیول فاصلاتی کارڈ ریڈر کے طور پر ایک مستحکم اور قابل اعتماد انداز میں کام کر سکتا ہے۔

STONE TFT LCD اور ESP32 IOT PlatoBlockchain ڈیٹا انٹیلی جنس پر مبنی ذہین رسائی کنٹرول۔ عمودی تلاش۔ عی
اسٹون TFT LCD اور ESP32 پر مبنی ذہین رسائی کنٹرول

STWI070WT-01 کو TFT مانیٹر اور ٹچ کنٹرولر کے طور پر تصور کیا گیا ہے۔ اس میں پروسیسر، کنٹرول پروگرام، ڈرائیور، فلیش میموری، RS232/RS422/RS485/TTL/LAN پورٹ، Wi-Fi/Bluetooth، ٹچ اسکرین، پاور سپلائی وغیرہ شامل ہیں، لہذا یہ طاقتور اور آسان پر مبنی ایک مکمل ڈسپلے سسٹم ہے۔ آپریٹنگ سسٹم، جسے کسی بھی MCU کے ذریعے کنٹرول کیا جا سکتا ہے۔

STONE TFT LCD اور ESP32 IOT PlatoBlockchain ڈیٹا انٹیلی جنس پر مبنی ذہین رسائی کنٹرول۔ عمودی تلاش۔ عی
اسٹون TFT LCD اور ESP32 پر مبنی ذہین رسائی کنٹرول

GUI ڈیزائن

STONE TFT LCD اور ESP32 IOT PlatoBlockchain ڈیٹا انٹیلی جنس پر مبنی ذہین رسائی کنٹرول۔ عمودی تلاش۔ عی
اسٹون TFT LCD اور ESP32 پر مبنی ذہین رسائی کنٹرول

کوڈ شیئرنگ

STONE TFT LCD اور ESP32 IOT PlatoBlockchain ڈیٹا انٹیلی جنس پر مبنی ذہین رسائی کنٹرول۔ عمودی تلاش۔ عی
اسٹون TFT LCD اور ESP32 پر مبنی ذہین رسائی کنٹرول

mfrc522 درآمد کریں۔

درآمد کا وقت

درآمد _thread

OS درآمد نام سے

مشین سے درآمد پن، UART

# pyb درآمد UART سے

#مشین درآمد کریں۔

suos = پن(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 = ”

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]

اگر 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)

اگر اسٹیٹ == rdr.OK:

(stat, raw_uid) = rdr.anticoll()

اگر اسٹیٹ == rdr.OK:

پرنٹ ("نئے کارڈ کا پتہ چلا")

پرنٹ (" - ٹیگ کی قسم: 0x%02x" % tag_type)

پرنٹ کریں

پرنٹ کریں("")

اگر 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()

اگر اسٹیٹ == rdr.OK:

پرنٹ ("کارڈ پر لکھا گیا ڈیٹا")

اور:

پرنٹ ("کارڈ پر ڈیٹا لکھنے میں ناکام")

اور:

پرنٹ ("تصدیق کی خرابی")

اور:

پرنٹ ("ٹیگ منتخب کرنے میں ناکام")

سوائے کلیدی تختہ:

پرنٹ ("لکھنے کی غلطی")

def do_read():

جبکہ سچ:

کوشش کریں:

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

اگر اسٹیٹ == rdr.OK:

(stat, raw_uid) = rdr.anticoll()

اگر اسٹیٹ == rdr.OK:

پرنٹ ("نئے کارڈ کا پتہ چلا")

پرنٹ (" - ٹیگ کی قسم: 0x%02x" % tag_type)

پرنٹ کریں

پرنٹ (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:

پرنٹ ("ایڈریس 8 ڈیٹا: %s" % rdr.read(8))

personnel_id میں ps کے لیے:

اگر raw_uid[0:4:1] == personnel_id.get(ps):

suos.value(1)

پرنٹ (پی ایس)

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

ٹائم نیند (3)

uart2.sendbreak()

توڑ

rdr.stop_crypto1()

ٹائم نیند (3)

suos.value(0)

اور:

پرنٹ ("تصدیق کی خرابی")

اور:

پرنٹ ("ٹیگ منتخب کرنے میں ناکام")

اگر uart2.any()>1:

rx2 = []

data_name2 = ”

bin_data = uart2.read(40)

uart2.sendbreak()

rx1 = فہرست (بن_ڈیٹا)

rx1 میں آئٹم کے لیے:

rx2.append(chr(item))

پرنٹ (rx2)

اگر rx1 [3:5:1] == بٹن_cmd:

ڈیٹا_نام_لین = rx1[6] – 1

ڈیٹا_نام = rx2[7:data_name_len+7:1]

data_name2 = ”.join(data_name)

پرنٹ(ڈیٹا_نام2)

اگر data_name2 == 'back3':

واپسی

سوائے کلیدی تختہ:

پرنٹ ("پڑھنے کی غلطی")

def do_read2 (idd):

پرنٹ (idd)

جبکہ سچ:

کوشش کریں:

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

اگر اسٹیٹ == rdr.OK:

(stat, raw_uid) = rdr.anticoll()

اگر اسٹیٹ == rdr.OK:

پرنٹ ("نئے کارڈ کا پتہ چلا")

پرنٹ (" - ٹیگ کی قسم: 0x%02x" % tag_type)

پرنٹ کریں

پرنٹ (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:

پرنٹ ("ایڈریس 8 ڈیٹا: %s" % rdr.read(8))

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

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

rdr.stop_crypto1()

اور:

پرنٹ ("تصدیق کی خرابی")

اور:

پرنٹ ("ٹیگ منتخب کرنے میں ناکام")

اگر uart2.any()>1:

rx2 = []

data_name2 = ”

bin_data = uart2.read(40)

uart2.sendbreak()

rx1 = فہرست (بن_ڈیٹا)

rx1 میں آئٹم کے لیے:

rx2.append(chr(item))

اگر rx1 [3:5:1] == بٹن_cmd:

ڈیٹا_نام_لین = rx1[6] – 1

ڈیٹا_نام = rx2[7:data_name_len+7:1]

data_name2 = ”.join(data_name)

پرنٹ(ڈیٹا_نام2)

اگر 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')

ٹائم نیند (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')

ٹائم نیند (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' )

ٹائم نیند (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')

ٹائم نیند (1)

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

ٹائم نیند (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' )

ٹائم نیند (3)

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

def card_zhuce():

جبکہ سچ:

اگر uart2.any():

user_id = ”

پاس ورڈ = "

rx2 = []

rx_num = 0

bin_data = uart2.read(40)

uart2.sendbreak()

rx1 = فہرست (بن_ڈیٹا)

rx1 میں آئٹم کے لیے:

rx2.append(chr(item))

rx_num += 1

ڈیٹا_اینڈ = rx_num-5

data_id_st = rx2[8:13:1]

data_id_st2 = ”.join(data_id_st)

پرنٹ (ڈیٹا_آئی ڈی_st2)

اگر data_id_st2 == 'ترمیم 1':

data_id_st3 = rx2[15:data_end:1]

data_id_st4 = ”.join(data_id_st3)

پرنٹ (ڈیٹا_آئی ڈی_st4)

if data_id_st4 != ”:

نام = سچ

elif data_id_st2 == 'ترمیم2':

data_id_st5 = rx2[15:data_end:1]

data_id_st6 = ”.join(data_id_st5)

اگر data_id_st6 == admin_password:

ایڈمن = سچ

uart_write2('تصدیق گزر گئی!'،'براہ کرم کارڈ رکھیں!')

do_read2(data_id_st4)

واپسی

def mima_zuce():

temp_id3 = ”

temp_mima3 = ”

جبکہ سچ:

اگر uart2.any():

user_id = ”

پاس ورڈ = "

rx2 = []

rx_num = 0

# ڈیٹا_اینڈ = 0

bin_data = uart2.read(40)

uart2.sendbreak()

rx1 = فہرست (بن_ڈیٹا)

rx1 میں آئٹم کے لیے:

rx2.append(chr(item))

rx_num += 1

# اگر (rx2[rx_num] == 'T') اور (rx2[rx_num-1] == 'E') اور (rx2[rx_num-2] == '>'):

# وقفہ

ڈیٹا_اینڈ = rx_num-5

data_id_st = rx2[8:13:1]

data_id_st2 = ”.join(data_id_st)

پرنٹ (ڈیٹا_آئی ڈی_st2)

اگر rx1 [3:5:1] == بٹن_cmd:

ڈیٹا_نام_لین = rx1[6] – 1

ڈیٹا_نام = rx2[7:data_name_len+7:1]

data_name2 = ”.join(data_name)

پرنٹ(ڈیٹا_نام2)

اگر data_name2 == 'back2':

واپسی

اگر data_id_st2 == 'ترمیم 3':

data_id_st3 = rx2[15:data_end:1]

data_id_st4 = ”.join(data_id_st3)

پرنٹ (ڈیٹا_آئی ڈی_st4)

user_id_flag = سچ

temp_id3 = ڈیٹا_id_st4

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

elif data_id_st2 == 'ترمیم4':

data_id_st5 = rx2[15:data_end:1]

data_id_st6 = ”.join(data_id_st5)

پرنٹ (ڈیٹا_آئی ڈی_st6)

# if personnel_ps.get(temp_id) == data_id_st6:

password_flag = سچ

temp_mima3 = ڈیٹا_id_st6

# personnel_ps[temp_id] = پاس ورڈ_پرچم

# پرنٹ(rx2,user_id_flag,password_flag)

elif data_id_st2 == 'ترمیم7':

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

ایڈمن = سچ

personnel_ps[temp_id3] = temp_mima3

password_flag = غلط

user_id_flag = غلط

uart_write4('تصدیق گزر گئی!'،'لاگ ان کامیاب رہا!')

def password_loin():

temp_id2 = ”

temp_mima = ”

جبکہ سچ:

اگر uart2.any():

user_id = ”

پاس ورڈ = "

rx2 = []

rx_num = 0

# ڈیٹا_اینڈ = 0

bin_data = uart2.read(40)

uart2.sendbreak()

rx1 = فہرست (بن_ڈیٹا)

rx1 میں آئٹم کے لیے:

rx2.append(chr(item))

rx_num += 1

# اگر (rx2[rx_num] == 'T') اور (rx2[rx_num-1] == 'E') اور (rx2[rx_num-2] == '>'):

# وقفہ

ڈیٹا_اینڈ = rx_num-5

data_id_st = rx2[8:13:1]

data_id_st2 = ”.join(data_id_st)

پرنٹ (ڈیٹا_آئی ڈی_st2)

اگر rx1 [3:5:1] == بٹن_cmd:

ڈیٹا_نام_لین = rx1[6] – 1

ڈیٹا_نام = rx2[7:data_name_len+7:1]

data_name2 = ”.join(data_name)

پرنٹ(ڈیٹا_نام2)

اگر data_name2 == 'back4':

واپسی

اگر data_id_st2 == 'ترمیم 5':

data_id_st3 = rx2[15:data_end:1]

data_id_st4 = ”.join(data_id_st3)

پرنٹ (ڈیٹا_آئی ڈی_st4)

اگر personnel_ps میں ڈیٹا_id_st4:

user_id_flag = سچ

temp_id2 = ڈیٹا_id_st4

elif data_id_st2 == 'ترمیم6':

data_id_st5 = rx2[15:data_end:1]

data_id_st6 = ”.join(data_id_st5)

پرنٹ (ڈیٹا_آئی ڈی_st6)

پرنٹ (temp_id2)

پرنٹ (personnel_ps)

اگر personnel_ps.get(temp_id2) == data_id_st6:

password_flag = سچ

# پرنٹ(rx2,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')

ٹائم نیند (3)

# uart_write('طالب علم',")

suos.value(0)

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

uart2.sendbreak()

جبکہ سچ:

اگر uart2.any()>1:

rx2 = []

data_name2 = ”

bin_data = uart2.read(40)

# وقت۔ نیند(1)

uart2.sendbreak()

# وقت۔ نیند(1)

rx1 = فہرست (بن_ڈیٹا)

rx1 میں آئٹم کے لیے:

rx2.append(chr(item))

پرنٹ (rx2)

اگر rx1 [3:5:1] == بٹن_cmd:

ڈیٹا_نام_لین = rx1[6] – 1

ڈیٹا_نام = rx2[7:data_name_len+7:1]

data_name2 = ”.join(data_name)

پرنٹ(ڈیٹا_نام2)

اگر data_name2 == 'card1':

card_zhuce()

elif data_name2 == 'پاس ورڈ1':

mima_zuce()

elif data_name2 == 'کارڈ2':

do_read()

elif data_name2 == 'پاس ورڈ2':

password_loin()

MFRC522.py

مشین درآمد پن، SPI سے

OS درآمد نام سے

کلاس MFRC522:

ٹھیک ہے = 0

NOTAGERR = 1

ERR = 2

REQIDL = 0x26

REQALL = 0x52

AUTHENT1A = 0x60

AUTHENT1B = 0x61

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

self.sck = پن (sck، Pin.OUT)

self.mosi = پن (mosi، Pin.OUT)

self.miso = پن (miso)

self.rst = پن (rst، Pin.OUT)

self.cs = پن(cs، Pin.OUT)

self.rst.value(0)

self.cs.value(1)

بورڈ = uname()[0]

اگر بورڈ == 'WiPy' یا بورڈ == 'LoPy' یا بورڈ == 'FiPy':

self.spi = SPI(0)

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

ایلیف بورڈ == 'esp32':

self.spi = SPI(baudrate=100000, polarity=0, stage=0, sck=self.sck, mosi=self.mosi, miso=self.miso)

self.spi.init()

اور:

Raise Runtime Error ("غیر تعاون یافتہ پلیٹ فارم")

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)

واپسی ویل[0]

def _sflags (خود، reg، ماسک):

self._wreg(reg, self._rreg(reg) | ماسک)

def _cflags (خود، reg، ماسک):

self._wreg(reg, self._rreg(reg) اور (~ماسک))

def _tocard(self, cmd, send):

recv = []

بٹس = irq_en = انتظار_irq = n = 0

stat = self.ERR

اگر cmd == 0x0E:

irq_en = 0x12

انتظار_irq = 0x10

elif cmd == 0x0C:

irq_en = 0x77

انتظار_irq = 0x30

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

self._cflags(0x04, 0x80)

self._sflags(0x0A, 0x80)

self._wreg(0x01, 0x00)

سی بھیجنے کے لیے:

self._wreg(0x09, c)

self._wreg(0x01, cmd)

اگر cmd == 0x0C:

self._sflags(0x0D, 0x80)

میں = 2000

جبکہ سچ:

n = self._rreg(0x04)

i -= 1

اگر ~((i != 0) اور ~(n & 0x01) اور ~(n & wait_irq)):

توڑ

self._cflags(0x0D, 0x80)

اگر میں:

اگر (self._rreg(0x06) اور 0x1B) == 0x00:

stat = self.OK

اگر n & irq_en & 0x01:

stat = self.NOTAGERR

elif cmd == 0x0C:

n = self._rreg(0x0A)

lbits = self._rreg(0x0C) اور 0x07

اگر lbits != 0:

بٹس = (n – 1) * 8 + lbits

اور:

بٹس = n * 8

اگر n == 0:

N = 1

elif n > 16:

N = 16

رینج میں _ کے لیے(n):

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

اور:

stat = self.ERR

واپسی اسٹیٹ، recv، بٹس

def _crc (خود، ڈیٹا):

self._cflags(0x05, 0x04)

self._sflags(0x0A, 0x80)

ڈیٹا میں c کے لیے:

self._wreg(0x09, c)

self._wreg(0x01, 0x03)

i = 0xFF

جبکہ سچ:

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

ڈیف ری سیٹ (خود):

self._wreg(0x01, 0x0F)

def antenna_on(self, on=True):

اگر آن اور ~(self._rreg(0x14) اور 0x03):

self._sflags(0x14, 0x03)

اور:

self._cflags(0x14, 0x03)

def درخواست (خود، موڈ):

self._wreg(0x0D, 0x07)

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

اگر (stat != self.OK) | (بٹس != 0x10):

stat = self.ERR

واپسی اسٹیٹ، بٹس

def anticoll (self):

ser_chk = 0

ser = [0x93, 0x20]

self._wreg(0x0D, 0x00)

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

اگر اسٹیٹ == self.OK:

اگر len(recv) == 5:

میں رینج میں (4،XNUMX):

ser_chk = ser_chk ^ recv[i]

اگر ser_chk != recv[4]:

stat = self.ERR

اور:

stat = self.ERR

واپسی اسٹیٹ، recv

ڈیف سلیکٹ_ٹیگ (خود، سر):

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

buf += self._crc(buf)

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

واپسی self.OK if (stat == self.OK) اور (bits == 0x18) else self.ERR

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

واپسی self._tocard(0x0E, [mode, addr] + sect + ser[:4])[0]

def stop_crypto1(self):

self._cflags(0x08, 0x08)

def read (self, addr):

ڈیٹا = [0x30، addr]

ڈیٹا += self._crc(ڈیٹا)

(stat, recv, _) = self._tocard(0x0C، ڈیٹا)

recv واپس کریں اگر stat == self.OK ورنہ کوئی نہیں۔

def لکھیں (خود، ایڈر، ڈیٹا):

buf = [0xA0, addr]

buf += self._crc(buf)

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

اگر نہیں (stat == self.OK) یا نہیں (bits == 4) یا نہیں ((recv[0] & 0x0F) == 0x0A):

stat = self.ERR

اور:

buf = []

میں رینج میں (16،XNUMX):

buf.append(data[i])

buf += self._crc(buf)

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

اگر نہیں (stat == self.OK) یا نہیں (bits == 4) یا نہیں ((recv[0] & 0x0F) == 0x0A):

stat = self.ERR

واپسی اسٹیٹ

ماخذ: پلیٹو ڈیٹا انٹیلی جنس