获得NFC卡价值的更好方法是什么?

时间:2015-06-24 13:40:24

标签: python

我已经编写了一个小的python脚本来获取NFC卡的价值,但我一直遇到一些小烦恼的问题,我想知道是否有更好的方法来做到这一点。现在我的代码看起来像这样:

import serial
ser = serial.Serial('/dev/tty.usbserial-AH02MAUE', 9600)

def rfidResponse(responseID):
    rID = responseID.strip();
    print repr(responseID)
    print rID
    if rID == "750047FB76BF":
        print "This one"
    else:
        print "other one"

while True:
    try:
        response = ser.readline()
        stringResponse = str(response)
        rfidResponse(stringResponse)
    except KeyboardInterrupt:
        break

ser.close()

我正在尝试将读卡与特定的刺激进行比较(在本例中为750047FB76BF)。问题在于,当我查看rID时,我得到750047FB76BF,当我print repr(responseID)时,我得到'\x02750047FB76BF\r\n'。更令人沮丧的是,输出只发生在卡的第一次刷卡上,每次刷卡都跟着滑动输出'\x03\x02750047FB76BF\r\n',所以即使做某种切片也不会每次都有效。

有更好的方法吗?或者理想情况下能够实际使用rID作为我的比较值(让我避免切片等)。

1 个答案:

答案 0 :(得分:1)

显然,当您从serial读取NON-ASCII个字符时,我认为您可能希望尝试使用re模块来解析从串行端口读取的内容并检索你的NFC ID但我会在这里假设,当你从串口读取时,你会在行的末尾得到NFC ID,就在EOL(\r\n)之前,所以它'如果您只是打印从串行端口收到的任何内容,以确保“NFC ID is the last thing you get and if it's more than that, then we have to change the重新表达”,那就更好了。

我们走了:

import serial
import re

ser = serial.Serial('/dev/tty.usbserial-AH02MAUE', 9600)

def rfidResponse(responseID):
    #rID = responseID.strip() #no need for stripping, instead do the next line:
    #print responseID #you can print without `repr`.
    print responseID
    if responseID == "750047FB76BF":
        print "This one"
    else:
        print "other one"

while True:
    try:
        responseID = ser.readline()
        #stringResponse = str(response) # you don't need this line
        response = re.search('[A-Z0-9]{12}(?=\s+)', responsID) #your NFC ID should be of fixed length
        if response:
            rfidResponse(response.group(0))
        else:
            print 'No NFC ID received'
    except KeyboardInterrupt:
        ser.close() #better also close `serial` communication in case of exception
        break

ser.close()