我已经编写了一个小的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作为我的比较值(让我避免切片等)。
答案 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()