将Hex转换为(RFID)标签ID

时间:2017-03-21 11:59:19

标签: python hex protocols pyserial rfid

我购买了简单的有源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'\xecb'\xfeb\xf6b\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。现在我必须检索写入适当算法的数据。有人可以帮我吗?

2 个答案:

答案 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始终以十六进制值表示最佳!