Python 2.7 Python ACR122U民意测验

Python 2.7 Python ACR122U民意测验,python-2.7,rfid,acr122,pyscard,Python 2.7,Rfid,Acr122,Pyscard,我想知道是否有一种方法可以在python中对ACR122U进行投票,如果有,如何投票?下面的脚本获取卡的UID,但会持续运行。我知道它的运行是因为它显示了我想要实现的目标 from smartcard.scard import * from smartcard.util import toHexString def s(): while 1: hresult, hcontext = SCardEstablishContext(SCARD_SCOPE_USER) assert

我想知道是否有一种方法可以在python中对ACR122U进行投票,如果有,如何投票?下面的脚本获取卡的UID,但会持续运行。我知道它的运行是因为它显示了我想要实现的目标

from smartcard.scard import *
from smartcard.util import     toHexString

def s():
 while 1:
  hresult, hcontext = SCardEstablishContext(SCARD_SCOPE_USER)
  assert hresult==SCARD_S_SUCCESS
  hresult, readers = SCardListReaders(hcontext, [])
  assert len(readers)>0
  reader = readers[0]
  hresult, hcard, dwActiveProtocol = SCardConnect(
     hcontext,
     reader,
     SCARD_SHARE_SHARED,
     SCARD_PROTOCOL_T0 | SCARD_PROTOCOL_T1)
  try:
   hresult, response = SCardTransmit(hcard,dwActiveProtocol,[0xFF,0xCA,0x00,0x00,0x04])
   uid = toHexString(response, format=0)
   print uid
  except SystemError:
   print "no card found"
s()

再搜索一下就找到了

op代码使用PC/SC Cammand,以下使用APU命令

cardmonitor = CardMonitor()
cardobserver = printout()
cardmonitor.addObserver(cardobserver)
#If no card in 20secs kill program (put in for testing)
sleep(20)
cardmonitor.deleteObserver(cardobserver)
所以当混合在一起的时候

class printobserver( CardObserver ):
    def update( self, observable, (addedcards, removedcards) ):
        for card in addedcards:
         if addedcards:
            hresult, hcontext = SCardEstablishContext(SCARD_SCOPE_USER)
            assert hresult==SCARD_S_SUCCESS
            hresult, readers = SCardListReaders(hcontext, [])
            assert len(readers)>0
            reader = readers[0]
            hresult, hcard, dwActiveProtocol = SCardConnect(
             hcontext,
             reader,
             SCARD_SHARE_SHARED,
             SCARD_PROTOCOL_T0 | SCARD_PROTOCOL_T1)
            hresult, response = SCardTransmit(hcard,dwActiveProtocol,[0xFF,0xCA,0x00,0x00,0x04])
            uid = toHexString(response, format=0)
            print response #cards ATR
            print uid #Cards UID

print "place card on reader"
while 1:
    cardmonitor = CardMonitor()
    cardobserver = printobserver()
    cardmonitor.addObserver( cardobserver )
    cardmonitor.deleteObserver( cardobserver )
    time.sleep( 2 )

这不是一个简单的方法,但它很有效。

那么你的实际问题是什么呢?现在它只是一遍遍地运行显示not found或uid是的,这正是你的代码应该做的,这也非常符合你指定的要求(“在python中轮询ACR122U的方法”)。所以,再说一遍,你们的实际问题是什么?目标是扫描一次卡,显示UID,然后让它在同一个位置。现在,我扫描卡,得到一个无限的显示uid一旦删除无限的“找不到卡”,所以寻找一个“如果卡显示uid”如果不是“坐着等,但检查每x秒”是不是更好?