如何防止Python + PySerial读取错误的起始字节

时间:2018-01-19 03:28:14

标签: python hex pyserial uart

所以我目前正在处理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,并将其用于我的程序。我做过研究,没有能够想出一件事。我该怎么做才能做到这一点?

1 个答案:

答案 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