我买了一个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)确认这是正确的序列。
至少,我尝试使用sudo启动python脚本,以防有帮助。我更改了套接字文件夹的权限(/var/run/pcscd/pcscd.comm公司)到777。。。以防万一
有人知道我怎么解决这个奇怪的问题吗? 谢谢你的帮助。在
目前没有回答
相关问题 更多 >
编程相关推荐