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



我购买了简单的有源RFID阅读器,它通过RS232串行端口连接到我的Raspberry Pi 3使用RS232屏蔽。我想使用阅读器读取标签 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'xecb'xfebxf6bxfc和类似值(不确定这些值是什么)。如何识别实际 ID?

更新 2

我能够将文本转换为十六进制,然后将其转换为数值。

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阅读器做类似的事情,整个包装有一堆不同的信息(阅读器范围内的标签数量,可以到达特定标签的anthenas数量,与状态相关的信息,IDD等等。

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

举个例子,说明我的读者在阅读标签时发送的内容:

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

有趣的内容位于字节 6 到 n-2 范围内(我并不是说您的扫描仪返回类似的东西,但它给了你一个想法)。此外,RFID IDD总是以十六进制值来表示!

最新更新