我购买了简单的有源RFID阅读器,它使用RS232 Shield通过RS232串口连接到我的Raspberry Pi 3。我想用阅读器阅读标签ID。我写了一段代码,意味着从串行设备读取数据。当我运行它只是在等待某事,(没有错误信息)。如何使用带有python代码或shell脚本的阅读器阅读标签?
import serial
ser = serial.Serial ("/dev/ttyAMA0")
ser.baudrate = 9600
data = ser.read(8)
print (data)
更新
我能够使用以下方式阅读标签:
ser = serial.Serial("/dev/ttyS0")
因为ttyAMA0
是Raspberry Pi 3中的蓝牙(这只适用于python 3.4。当我尝试使用python 2.7时,字符串为空白)。我的问题是我有一个标签,其ID是02160323,但是当我运行此代码时输出为:b'\xec
,b'\xfe
,b\xf6
,b\xfc
和类似(不确定这些值是什么)。我如何识别实际身份证?
更新2
我能够将文本转换为HEX,然后将其转换为数值。
import serial
ser = serial.Serial("dev/ttyS0", 9600)
data = ser.read()
hexo = data.encode('hex')
i = ord(data)
print(i)
print(hexo)
完整ID长度为8个整数,给定输出与卡上的ID无关。如何将其转换为显示02160323?
更新3
我的baundrate一直都是错的,它应该是115200
。现在我收到了价值:
4000021603237440并且清晰可见我有ID。现在我必须检索写入适当算法的数据。有人可以帮我吗?
答案 0 :(得分:0)
使用7个字节而不是8来解决它,然后每次运行时十六进制值都是不可变的。如果您只想验证您的ID,则忽略前4个字符串字符并选择剩余的8个字符串(Python 2.x)
import serial
while True:
ser = serial.Serial('/dev/ttyS0', 115200)
data = ser.read(7)
hexo = str(data.encode('hex'))
tagID = hexo[4:]
tagID = tagID[:8]
print(tagID)
答案 1 :(得分:0)
关于你的更新号码3.我最近不得不为RFID阅读器做类似的事情,整个包装有一堆不同的信息(阅读器范围内的标签数量,可以达到的数量的anthenas特定标签,与状态有关的信息,IDD等等。
然而,每个扫描仪都有不同的顺序。第一步是在文档中识别该序列。一旦你知道了,我强烈建议你使用hexlify库来获得返回信号的十六进制表示。使用十进制系统进行字节读取和配置真的不方便。
为您举例说明我的读者在阅读标签时发送的内容:
字节1:STX 字节2:MSB长度 字节3:LSB长度 字节4:COM-ADR 字节5:0xB0(一个常量来帮助你锁定东西) 字节6到n-2:请求的数据 字节n-1到n:CRC校验值
有趣的内容位于字节6到n-2范围内(我不是说你的扫描仪会返回类似的内容,但它会给你一个想法)。此外,RFID IDD始终以十六进制值表示最佳!