我购买了简单的有源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'xec
、b'xfe
、bxf6
、bxfc
和类似值(不确定这些值是什么)。如何识别实际 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总是以十六进制值来表示!