无法通过Python使用NFC/RFID读卡器读取卡

2024-04-28 12:02:55 发布

您现在位置:Python中文网/ 问答频道 /正文

我买了一个NFC读卡器(ACS/ACR122U),我通过USB端口插入我的raspberry 3;我安装了swig、pcsc工具、pcscd、libpcsLite。。。 pcscd服务由systemctl启动并绑定到pcscd插座. 我可以在启动nfc-scan-device时看到读卡器,也可以在启动nfc-list时读取读卡器随附的卡 然后我试着用python3和pyscard读取标记Id,但它不起作用。 我可以看到读卡器并启动连接而没有任何错误消息,但无法读取tagID。在

sudo nfc list返回:

>nfc-list uses libnfc 1.7.1
>NFC device: ACS / ACR122U PICC Interface opened
>1 ISO14443A passive target(s) found:
>ISO/IEC 14443A (106 kbps) target:
>ATQA (SENS_RES): 00  04  
>UID (NFCID1): d6  71  c5  f0  
>SAK (SEL_RES): 08`  

NFC读卡器因此可以访问,我甚至可以获得卡的标签id

然后我尝试在python上使用它 我在那里找到了一些信息: https://pyscard.sourceforge.io/user-guide.htmlhttps://pyscard.sourceforge.io/epydoc/smartcard-module.html

我第一次在pipenv环境中尝试,但是没有成功。 然后我移除了pipenv以确保它不在关键路径上。。。在

第一次试验

我尝试了一个基本的脚本,可以在pyscard doc和大多数教程中找到。。。我们称之为nfcReader-1.py

^{pr2}$

读卡器找到了,但我看不懂卡片。transmit()方法返回[0x63,x0x00]([99,00]),这意味着发生了一些奇怪的事情 当我在python命令行中键入每个命令时,它也不起作用

第二次试验

我也尝试另一种方法。我在pyscard文档中找到了第二种方法,但结果完全相同:

from smartcard.CardType import AnyCardType
from smartcard.CardRequest import CardRequest
from smartcard.CardConnection import CardConnection
from smartcard.util import toHexString

import sys
getuid=[0xFF, 0xCA, 0x00, 0x00, 0x00]
act = AnyCardType()
cr = CardRequest( timeout=10, cardType=act )
cs = cr.waitforcard()
cs.connection.connect()

print(toHexString( cs.connection.getATR() ))
print(cs.connection.getReader())
data, sw1, sw2 = cs.connection.transmit( cmdmap['getuid'] )
if (sw1, sw2) == (0x90, 0x0):
  print("Status: The operation completed successfully.")
elif (sw1, sw2) == (0x63, 0x0):
  print("Status: The operation failed.")

print("uid={}".format(data))
cs=None  #to prevent error message when calling sys.exit() below
sys.exit()

他们的回答也没什么不同:

>3B 00
>ACS ACR122U PICC Interface 00 00
>Status: The operation failed.
>uid=[]

我使用的命令是[0xFF,0xCA,0x00,0x00,0x00],它似乎是获取tagid的命令。 ACS reader doc(https://www.acs.com.hk/en/download-manual/419/API-ACR122U-2.04.pdf)确认这是正确的序列。 ACS tagid sequence description

至少,我尝试使用sudo启动python脚本,以防有帮助。我更改了套接字文件夹的权限(/var/run/pcscd/pcscd.comm公司)到777。。。以防万一

有人知道我怎么解决这个奇怪的问题吗? 谢谢你的帮助。在


Tags: fromhttpsimportconnectioncsnfclistprint