Я использую эту библиотеку https://github.com/mxgxw/MFRC522-python для чтения UID с помощью Читатель rc522 и Raspberry Pi. Он отлично работает для карт с 4-байтовым идентификатором, но я не могу прочитать 7-байтовый идентификатор Desfire. Я читал, что необходимо отредактировать алгоритм предотвращения коллизий, когда каскадный бит равен 1. Как изменить эту библиотеку, чтобы она могла читать 7-байтовый uid?
Как прочитать uid Desfire длиной 7 байт, используя rc522 и Raspberry Pi?
Ответы (1)
Я только что пришел сюда с той же проблемой. Хотя прошло уже больше 4 лет, может кому поможет мое решение.
1) Переименуйте (или удалите) текущую библиотеку MFRC522-python.
cd ~/.local/lib/python2.7 # or your python version
mv pirc522 pirc522_original
2) Создать новый каталог (если его нет) для установки новой библиотеки
mkdir /usr/local/lib/python2.7/dist-packages # or your python version
3) Установите эту другую версию библиотеки, которая содержит функцию anticoll2()
, позволяющую считывать больше байтов с карты RFID.
git clone https://github.com/ondryaso/pi-rc522.git
cd pi-rc522
python setup.py install
И это все. Вы можете импортировать эту новую библиотеку так же, как вы импортировали предыдущую.
Теперь, чтобы прочитать RFID-карту, помните, что 7-байтовая RFID-карта начинается с 0x88
. Таким образом, вы можете использовать новую функцию anticoll2()
в этой библиотеке, чтобы читать больше данных, когда anticoll()
возвращает 0x88
на первой позиции. Вот пример:
from pirc522 import RFID
def detect_uid(reader):
(error, tag_type) = reader.request()
(error, uid) = reader.anticoll()
if uid[0] != 0x88:
rfid_uid = uid[0:4] # classic 4bytes-rfid card
else:
(error, uid2) = reader.anticoll2()
rfid_uid = uid[1:4] + uid2[:4] # 7bytes-rfid card
return rfid_uid
reader = pirc522.RFID()
print("UID: " + str(detect_uid(reader)))
person
Sergio Ferrer Sánchez
schedule
15.11.2019