将十六进制转换为 (RFID) 标签 ID

Convert Hex to (RFID) tag ID

我购买了简单的有源 RFID Reader,它使用 RS232 Shield 通过 RS232 串行端口连接到我的 Raspberry Pi 3。我想使用 reader 读取标签 ID。我写了一段代码,意思是从串口设备读取数据。当我 运行 它只是在等待什么,(没有错误信息)。如何使用此 reader 和 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'\xecb'\xfeb\xf6b\xfc 和类似的(不确定这些值是什么)。我如何识别实际ID?

更新 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

我的波特率一直不对,应该是115200。现在我收到了价值: 4000021603237440 并且清晰可见我在其中有 ID。现在我必须检索编写适当算法的数据。有人可以帮我吗?

通过使用 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)

关于您的更新编号 3。我最近不得不为 RFID reader 做一些类似的事情,整个包裹有一堆不同的信息(reader 范围内的标签数量,可以到达特定标签的天线数量,与状态相关的信息,IDD等等。

但是,每个扫描仪得到的序列不同。第一步是在文档中确定该顺序。一旦您知道了这一点,我强烈建议您使用 hexlify 库来获取 return 信号的十六进制表示。使用十进制进行字节读取和配置确实不方便

举例说明我的 reader 在读取标签时发送的内容:

字节 1:STX 字节 2:MSB 长度 字节 3:LSB 长度 字节 4:COM-ADR 字节 5:0xB0(帮助您锁定内容的常量) 字节 6 到 n-2:请求的数据 字节n-1到n:CRC校验值

您感兴趣的内容位于字节 6 到 n-2 的范围内(我并不是说您的扫描仪 return 类似,但它给了您一个想法)。此外,RFID IDD 始终最好以十六进制值表示!