IOT

স্টোন TFT LCD এবং ESP32 এর উপর ভিত্তি করে বুদ্ধিমান অ্যাক্সেস নিয়ন্ত্রণ

সংক্ষিপ্ত ভূমিকা

স্মার্ট হোম প্রযুক্তির বিকাশের সাথে আরও বেশি সাধারণ হয়ে উঠছে, এই নিবন্ধটি বুদ্ধিমান অ্যাক্সেস কন্ট্রোল প্রকল্পের সুরক্ষা দিকগুলিতে ফোকাস করবে।

এই নিবন্ধটি ব্যবহার করে STONE এর টাচ স্ক্রিন রিলে এবং MFRC522 মডিউল নিয়ন্ত্রণ করতে MCU এ কমান্ড পাঠাতে।

কার্ড পড়ার নীতি: RFID-RC522 মডিউল ড্রাইভ করে, আইডি কার্ডের কাছাকাছি আইডি কার্ড আইডি সনাক্ত করুন, এবং তারপর আইডি টিপিক্যাল শব্দের ডাটাবেসে বিদ্যমান কিনা তা নির্ধারণ করুন, আইডি শব্দের সাধারণ মান, যদি এর মাধ্যমে যাচাইয়ের অস্তিত্ব , এবং তারপর সংশ্লিষ্ট নাম মুদ্রণ করুন, এবং তারপর একই ভাবে ইলেক্ট্রোম্যাগনেটিক লক চালান।

প্রয়োজনীয় উপকরণ

উপলব্ধি ফাংশন

  1. কার্ড নিবন্ধন।
  2. ব্যবহারকারীর নাম এবং পাসওয়ার্ড নিবন্ধন।
  3. ইলেকট্রনিক লক আনলক করতে কার্ড সোয়াইপ করুন।
  4. ইলেকট্রনিক লক আনলক করতে ব্যবহারকারীর নাম এবং পাসওয়ার্ড।

প্রধান হার্ডওয়্যার বিবরণ

আরএফআইডি মডিউল

এই মডিউলটি সরাসরি বিভিন্ন পাঠক মডিউলে লোড করা যেতে পারে। এটি শুধুমাত্র কয়েকটি তারের সাথে SPI ইন্টারফেসের মাধ্যমে 3.3V এর ভোল্টেজ ব্যবহার করে। একটি CPU মাদারবোর্ডের সাথে সরাসরি সংযুক্ত, মডিউলটি একটি দূরত্ব কার্ড রিডার হিসাবে একটি স্থিতিশীল এবং নির্ভরযোগ্য পদ্ধতিতে কাজ করতে পারে।

STONE TFT LCD এবং ESP32 IOT PlatoBlockchain ডেটা ইন্টেলিজেন্সের উপর ভিত্তি করে বুদ্ধিমান অ্যাক্সেস নিয়ন্ত্রণ। উল্লম্ব অনুসন্ধান. আ.
স্টোন TFT LCD এবং ESP32 এর উপর ভিত্তি করে বুদ্ধিমান অ্যাক্সেস নিয়ন্ত্রণ

STWI070WT-01 টিএফটি মনিটর এবং টাচ কন্ট্রোলার হিসাবে কল্পনা করা হয়েছে। এতে রয়েছে প্রসেসর, কন্ট্রোল প্রোগ্রাম, ড্রাইভার, ফ্ল্যাশ মেমরি, 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 আমদানি করুন

আমদানির সময়

আমদানি _থ্রেড

os import uname থেকে

মেশিন আমদানি পিন থেকে, 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]

সম্পাদনা1_cmd = [16,112]

সম্পাদনা2_cmd = [16,113]

সম্পাদনা3_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)

যদি stat == rdr.OK:

(stat, raw_uid) = rdr.anticol()

যদি stat == rdr.OK:

মুদ্রণ ("নতুন কার্ড সনাক্ত করা হয়েছে")

মুদ্রণ (" - ট্যাগের ধরন: 0x%02x" % ট্যাগ_টাইপ)

মুদ্রণ(” – 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]

যদি rdr.auth(rdr.AUTHENT1A, 8, কী, 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()

যদি stat == rdr.OK:

মুদ্রণ ("কার্ডে লেখা ডেটা")

অন্য:

মুদ্রণ ("কার্ডে ডেটা লিখতে ব্যর্থ")

অন্য:

মুদ্রণ ("প্রমাণিকরণ ত্রুটি")

অন্য:

মুদ্রণ ("ট্যাগ নির্বাচন করতে ব্যর্থ")

কীবোর্ড অন্তঃসত্তা ব্যতীত:

মুদ্রণ ("লেখা ত্রুটি")

def do_read():

যদিও সত্য:

চেষ্টা করে দেখুন:

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

যদি stat == rdr.OK:

(stat, raw_uid) = rdr.anticol()

যদি stat == rdr.OK:

মুদ্রণ ("নতুন কার্ড সনাক্ত করা হয়েছে")

মুদ্রণ (" - ট্যাগের ধরন: 0x%02x" % ট্যাগ_টাইপ)

মুদ্রণ(" – 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]

যদি rdr.auth(rdr.AUTHENT1A, 8, কী, 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 = ”

বিন_ডেটা = 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)

যদি data_name2 == 'back3':

প্রত্যাবর্তন

কীবোর্ড অন্তঃসত্তা ব্যতীত:

মুদ্রণ ("পড়া ত্রুটি")

def do_read2 (idd):

মুদ্রণ(idd)

যদিও সত্য:

চেষ্টা করে দেখুন:

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

যদি stat == rdr.OK:

(stat, raw_uid) = rdr.anticol()

যদি stat == rdr.OK:

মুদ্রণ ("নতুন কার্ড সনাক্ত করা হয়েছে")

মুদ্রণ (" - ট্যাগের ধরন: 0x%02x" % ট্যাগ_টাইপ)

মুদ্রণ(" – 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]

যদি rdr.auth(rdr.AUTHENT1A, 8, কী, 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 = ”

বিন_ডেটা = 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)

যদি data_name2 == 'back1':

প্রত্যাবর্তন

কীবোর্ড অন্তঃসত্তা ব্যতীত:

মুদ্রণ ("পড়া ত্রুটি")

def uart_write(পাঠ্য, *আইডি):

# মুদ্রণ (টেক্সট, *আইডি)

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

বিন_ডেটা = uart2.read(40)

uart2.sendbreak()

rx1 = তালিকা(bin_data)

rx1 আইটেমের জন্য:

rx2.append(chr(আইটেম))

rx_num += 1

ডেটা_এন্ড = rx_num-5

data_id_st = rx2[8:13:1]

data_id_st2 = ”. join(data_id_st)

মুদ্রণ(data_id_st2)

যদি data_id_st2 == 'সম্পাদনা1':

data_id_st3 = rx2[15:data_end:1]

data_id_st4 = ”. join(data_id_st3)

মুদ্রণ(data_id_st4)

যদি 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 == অ্যাডমিন_পাসওয়ার্ড:

অ্যাডমিন = সত্য

uart_write2('যাচাইকরণ পাস!','অনুগ্রহ করে কার্ডটি রাখুন!')

do_read2(data_id_st4)

প্রত্যাবর্তন

def mima_zuce():

temp_id3 = ”

temp_mima3 = ”

যদিও সত্য:

যদি uart2.any():

user_id = ”

পাসওয়ার্ড = ”

rx2 = []

rx_num = 0

# ডেটা_শেষ = 0

বিন_ডেটা = uart2.read(40)

uart2.sendbreak()

rx1 = তালিকা(bin_data)

rx1 আইটেমের জন্য:

rx2.append(chr(আইটেম))

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)

মুদ্রণ(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)

যদি data_name2 == 'back2':

প্রত্যাবর্তন

যদি data_id_st2 == 'সম্পাদনা3':

data_id_st3 = rx2[15:data_end:1]

data_id_st4 = ”. join(data_id_st3)

মুদ্রণ(data_id_st4)

user_id_flag = সত্য

temp_id3 = data_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)

মুদ্রণ(data_id_st6)

# যদি personnel_ps.get(temp_id) == data_id_st6:

password_flag = সত্য

temp_mima3 = data_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

বিন_ডেটা = uart2.read(40)

uart2.sendbreak()

rx1 = তালিকা(bin_data)

rx1 আইটেমের জন্য:

rx2.append(chr(আইটেম))

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)

মুদ্রণ(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)

যদি data_name2 == 'back4':

প্রত্যাবর্তন

যদি data_id_st2 == 'সম্পাদনা5':

data_id_st3 = rx2[15:data_end:1]

data_id_st4 = ”. join(data_id_st3)

মুদ্রণ(data_id_st4)

যদি personnel_ps এ data_id_st4:

user_id_flag = সত্য

temp_id2 = data_id_st4

elif data_id_st2 == 'সম্পাদনা6':

data_id_st5 = rx2[15:data_end:1]

data_id_st6 = ”. join(data_id_st5)

মুদ্রণ(data_id_st6)

মুদ্রণ(temp_id2)

মুদ্রণ(personnel_ps)

যদি personnel_ps.get(temp_id2) == data_id_st6:

password_flag = সত্য

# প্রিন্ট(rx2,user_id_flag,password_flag)

প্রিন্ট (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 = ”

বিন_ডেটা = uart2.read(40)

# সময় ঘুম (1)

uart2.sendbreak()

# সময় ঘুম (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 == 'কার্ড1':

কার্ড_ঝুস()

elif data_name2 == 'পাসওয়ার্ড1':

মিমা_জুস()

elif data_name2 == 'কার্ড2':

do_read()

elif data_name2 == 'পাসওয়ার্ড2':

password_loin()

MFRC522.py

মেশিন আমদানি পিন থেকে, SPI

os import uname থেকে

ক্লাস 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))

elif বোর্ড == 'esp32':

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

self.spi.init()

অন্য:

রানটাইম ত্রুটি বাড়ান ("অসমর্থিত প্ল্যাটফর্ম")

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(স্ব, রেগ, মাস্ক):

self._wreg(reg, self._rreg(reg) | মুখোশ)

def _cflags(স্ব, রেগ, মাস্ক):

self._wreg(reg, self._rreg(reg) এবং (~মাস্ক))

def _tocard(self, cmd, send):

recv = []

বিটস = irq_en = wait_irq = n = 0

stat = self.ERR

যদি 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)

সি পাঠানোর জন্য:

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, [মোড])

যদি (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)

যদি stat == self.OK:

যদি লেন(recv) == 5:

আমি পরিসরে (4):

ser_chk = ser_chk ^ recv[i]

যদি ser_chk != recv[4]:

stat = self.ERR

অন্য:

stat = self.ERR

রিটার্ন 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, addr, sect, ser):

স্বয়ং ফেরান।

def stop_crypto1(স্ব):

self._cflags(0x08, 0x08)

def read(self, addr):

ডেটা = [0x30, addr]

ডেটা += self._crc(ডেটা)

(stat, recv, _) = self._tocard(0x0C, ডেটা)

রিটার্ন recv if stat == self.ঠিক আছে অন্য কিছু নয়

def লিখুন (self, addr, data):

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

buf.append(ডেটা[i])

buf += self._crc(buf)

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

যদি না হয় (stat == self.OK) বা না (bits == 4) বা না ((recv[0] & 0x0F) == 0x0A):

stat = self.ERR

রিটার্ন স্ট্যাটাস

সূত্র: প্লেটো ডেটা ইন্টেলিজেন্স