pySerial read_until() 只读取第一个字节
pySerial read_until() reads only the first byte
所以我正在使用 pySerial 从串口接收数据。我有一个非常简单的代码,它读取第一个字节,检查它是否是起始字节(在我的例子中是 0x02
),然后读取直到找到结束字节(在我的例子中是 0x03
)。
配置串行通信
port = 'COM3'
baud = 38400
ser = serial.Serial(port, baud, timeout=0)
if ser.isOpen():
ser.close()
ser.open()
ser.reset_input_buffer()
ser.reset_output_buffer()
主循环在 while True
staement 内,如下所示。
while True:
data = ""
data_raw = ser.read(1)
if data_raw == b'\x02':
data_raw = ser.read_until(b'\x03')
print(str(data_raw))
ser.reset_input_buffer()
ser.reset_output_buffer()
time.sleep(.5)
问题是,由于某种原因,read_until()
实际上只读取第一个字节,而我从串行端口接收的数据实际上是 b'\x02\xff\x9c\x81E1\x03\'
在正确阅读 \x02
后,read_until()
语句只读取了下一个 \xff
我不明白为什么
pySerial
模块本身似乎从未修复过 https://github.com/pyserial/pyserial/issues/181
在 serial.Serial()
中使用 timeout=None
解决了问题
所以我正在使用 pySerial 从串口接收数据。我有一个非常简单的代码,它读取第一个字节,检查它是否是起始字节(在我的例子中是 0x02
),然后读取直到找到结束字节(在我的例子中是 0x03
)。
配置串行通信
port = 'COM3'
baud = 38400
ser = serial.Serial(port, baud, timeout=0)
if ser.isOpen():
ser.close()
ser.open()
ser.reset_input_buffer()
ser.reset_output_buffer()
主循环在 while True
staement 内,如下所示。
while True:
data = ""
data_raw = ser.read(1)
if data_raw == b'\x02':
data_raw = ser.read_until(b'\x03')
print(str(data_raw))
ser.reset_input_buffer()
ser.reset_output_buffer()
time.sleep(.5)
问题是,由于某种原因,read_until()
实际上只读取第一个字节,而我从串行端口接收的数据实际上是 b'\x02\xff\x9c\x81E1\x03\'
在正确阅读 \x02
后,read_until()
语句只读取了下一个 \xff
我不明白为什么
pySerial
模块本身似乎从未修复过 https://github.com/pyserial/pyserial/issues/181
在 serial.Serial()
中使用 timeout=None
解决了问题