সংক্ষিপ্ত ভূমিকা
স্মার্ট হোম প্রযুক্তির বিকাশের সাথে আরও বেশি সাধারণ হয়ে উঠছে, এই নিবন্ধটি বুদ্ধিমান অ্যাক্সেস কন্ট্রোল প্রকল্পের সুরক্ষা দিকগুলিতে ফোকাস করবে।
এই নিবন্ধটি ব্যবহার করে STONE এর টাচ স্ক্রিন রিলে এবং MFRC522 মডিউল নিয়ন্ত্রণ করতে MCU এ কমান্ড পাঠাতে।
কার্ড পড়ার নীতি: RFID-RC522 মডিউল ড্রাইভ করে, আইডি কার্ডের কাছাকাছি আইডি কার্ড আইডি সনাক্ত করুন, এবং তারপর আইডি টিপিক্যাল শব্দের ডাটাবেসে বিদ্যমান কিনা তা নির্ধারণ করুন, আইডি শব্দের সাধারণ মান, যদি এর মাধ্যমে যাচাইয়ের অস্তিত্ব , এবং তারপর সংশ্লিষ্ট নাম মুদ্রণ করুন, এবং তারপর একই ভাবে ইলেক্ট্রোম্যাগনেটিক লক চালান।
প্রয়োজনীয় উপকরণ
- ESP32
- KOB ইলেকট্রনিক লক
- রিলেই
- স্টোন STWI070WT-01 টাচ প্যানেল ডিসপ্লে
- MFRC522 মডিউল
উপলব্ধি ফাংশন
- কার্ড নিবন্ধন।
- ব্যবহারকারীর নাম এবং পাসওয়ার্ড নিবন্ধন।
- ইলেকট্রনিক লক আনলক করতে কার্ড সোয়াইপ করুন।
- ইলেকট্রনিক লক আনলক করতে ব্যবহারকারীর নাম এবং পাসওয়ার্ড।
প্রধান হার্ডওয়্যার বিবরণ
আরএফআইডি মডিউল
এই মডিউলটি সরাসরি বিভিন্ন পাঠক মডিউলে লোড করা যেতে পারে। এটি শুধুমাত্র কয়েকটি তারের সাথে SPI ইন্টারফেসের মাধ্যমে 3.3V এর ভোল্টেজ ব্যবহার করে। একটি CPU মাদারবোর্ডের সাথে সরাসরি সংযুক্ত, মডিউলটি একটি দূরত্ব কার্ড রিডার হিসাবে একটি স্থিতিশীল এবং নির্ভরযোগ্য পদ্ধতিতে কাজ করতে পারে।
STWI070WT-01 টিএফটি মনিটর এবং টাচ কন্ট্রোলার হিসাবে কল্পনা করা হয়েছে। এতে রয়েছে প্রসেসর, কন্ট্রোল প্রোগ্রাম, ড্রাইভার, ফ্ল্যাশ মেমরি, RS232/RS422/RS485/TTL/LAN পোর্ট, Wi-Fi/Bluetooth, টাচ স্ক্রিন, পাওয়ার সাপ্লাই ইত্যাদি, তাই এটি শক্তিশালী এবং সহজের উপর ভিত্তি করে একটি সম্পূর্ণ ডিসপ্লে সিস্টেম। অপারেটিং সিস্টেম, যা যেকোনো MCU দ্বারা নিয়ন্ত্রিত হতে পারে।
GUI ডিজাইন
কোড ভাগ করা
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
রিটার্ন স্ট্যাটাস
সূত্র: প্লেটো ডেটা ইন্টেলিজেন্স