所以我目前正在处理Python 3和PySerial的一个小问题。我有一个Raspberry Pi以及一个通过RPI上的UART端口连接的控制盒。控制箱每隔50ms就会向raspberry pi发送数据,我想读取这些数据,这样我就可以使用解析器从中获取所需的数据。唯一的问题是当我尝试读取数据时,起始十六进制值不正确,因为我开始在控制箱发回的反馈中途读取数据。
例如:
b'\x21\x21\x22\x98\x98\x24\x23\x21\x21\x22\x22\x98
我需要x98(0x98)作为该字节的起始十六进制值,所以它看起来像这样
x98\x98\x24\x23\x21\x21\x22\x22\
我需要这样,所以我可以抓取某个十六进制代码(来自字节),如x21,并将其用于我的程序。我做过研究,没有能够想出一件事。我该怎么做才能做到这一点?
答案 0 :(得分:0)
您需要一个函数,最好是线程函数,它从串行端口读取并将数据放入队列中。然后,您从队列中逐个获取一个字节,然后执行您想要对该数据执行的操作。
import serial
import _thread as thread
import queue
serialport = serial.Serial('COM1')
queue_in = queue.Queue()
def run_serial_input():
input = serialport.readall()
for byte in input:
queue_in.put(byte)
thread.start_new_thread(run_serial_input(), ())
while True:
# Do things with your bytes....
byte = queue_in.get()
if byte == 0x98:
pass