nfcpy:如何使用NFCPY正确获取发布事件?

问题描述 投票:0回答:1

我试着用ACR122阅读器和nfcpy python库听不同的RFID身份证。

我希望在用户连接时获得卡的ID(不经过一次又一次识别),并在用户发布时获取事件。理想情况下,在循环中,当用户拿走他的卡时,为了收听下一张卡。

下面是我的代码,但即使卡仍在阅读器上,on-release事件也会被触发。什么是正确的方法

  1. 得到on-connect而不是一遍又一遍地认识?
  2. 当用户卡离开时获取on-release
    import nfc

    def on_startup(targets):
      return targets

    def on_connect(tag):
      uid = str(tag.identifier).encode("hex").upper()
      print(uid)
      return True

    def on_release(tag):
      print('Released')
      return tag

    rdwr_options = {
      'on-startup': on_startup,
      'on-connect': on_connect,
      'on-release': on_release,
      'beep-on-connect': False,
    }

    with nfc.ContactlessFrontend('usb') as clf:
      tag = clf.connect(rdwr=rdwr_options)
python nfc rfid
1个回答
0
投票

您可能需要在ContactlessFrontend配置中设置间隔。试试这个例子:

import nfc
import ndef

tags = set()

rec = ndef.UriRecord("https://google.com")

def on_connect(tag):
    if tag.identifier not in tags:

        tags.add(tag.identifier)
        fmt = tag.format()

        if fmt is None:
            print("Tag cannot be formatted (not supported).")
        elif fmt is False:
            print("Tag failed to be formatted (for some reason).")
        else:
            tag.ndef.records = [rec]

if __name__ == "__main__":
    clf = nfc.ContactlessFrontend()
    if not clf.open('usb'):
        raise RuntimeError("Failed to open NFC device.")

    while True:
        config = {
            'interval': 0.35,
            'on-connect': on_connect
        }
        ret = clf.connect(rdwr=config)
        if ret is None:
            pass
        elif not ret:
            print ("NFC connection terminated due to an exception.")
            break
        else:
            pass
    clf.close()

https://gist.github.com/henrycjc/c1632b2d1f210ae0ff33d860c7c2eb8f

© www.soinside.com 2019 - 2024. All rights reserved.