Я пытаюсь использовать модифицированный модуль MFRC522 в UART, но я застрял, находя правильное форматирование для последовательного чтения / записи в python 3.
Существует библиотека для python 2, которая работает для меня:
В файле readme по этой ссылке также описана модификация модуля.
У меня проблемы с получением .self.ser.write
и .self.ser.read
в функциях writeRegister
и readRegister
для работы в Python 3. Они получают строковые входные данные, которые, как я теперь понимаю, хороши для Python 2, но должны быть преобразовано в байты для Python 3.
def writeRegister(self, addr, val, size=None):
if size is None:
count = 0
while True:
self.ser.flushInput()
self.ser.write(chr(addr&0x7F))
self.ser.write(chr(val))
tmp = ord(self.ser.read(1))
if(tmp == addr):
return True
count+=1
if(count > 10):
print ("Error de escritura en: "+ hex(addr))
return False
else:
self.ser.flushInput()
for txBytes in range (0, size):
self.ser.write(chr(addr&0x7F))
tmp = ord(self.ser.read(1))
if(tmp == addr):
self.ser.write(chr(val[txBytes]))
else:
print ("Error de escritura en bloque")
return False
return True
def readRegister(self, addr):
self.ser.flushInput()
self.ser.write(chr(addr|0x80))
val = self.ser.read(1)
return ord(val)
Я подозревал, что это вопрос правильного применения .encode('utf-8')
или подобного, но я не могу найти работающее решение. Если я попытаюсь
chr(0x80).encode('utf-8')
Я получаю
UnicodeDecodeError: 'ascii' codec can't decode byte 0x80 in position 0: ordinal not in range(128)
Может быть, я иду по неправильному пути с этим.
Я попробую bytes
:
bytes(chr(0x80), 'utf-8')
В этом случае дает 2 байта (> 128, я думаю):
b'\xc2\x80'
Может быть, это все ближе, но я застрял на том, как читать и декодировать. Я не знаю, как или если изменить части ord
. Поэтому я не могу получить ответ от mfrc522.
У кого-нибудь есть предложения?
Кто-нибудь успешно использовал этот mfrc522 UART на python 3?