我正在尝试使用基于PySerial
库的以下代码读取写入到串口的JSON字符串:
while True:
if serial_port.in_waiting > 0:
buffer = serial_port.readline()
print('buffer=', buffer)
ascii = buffer.decode('ascii')
print('ascii=', ascii)
我试图嗅探端口上的数据,并确信该数据被完整地写入,没有任何散乱。
jpnevulator --ascii --tty "/dev/ttyACM1" --read
7B 22 30 22 3A 31 7D {"0":1}
7B 22 30 22 3A 32 7D {"0":2}
7B 22 30 22 3A 33 7D {"0":3}
7B 22 30 22 3A 34 7D {"0":4}
7B 22 30 22 3A 35 7D {"0":5}
7B 22 30 22 3A 36 7D {"0":6}
然而,所使用的代码会导致数据散乱读取,因此显示以下结果:
buffer= b'{"0'
ascii= {"0
buffer= b'":1}'
ascii= ":1}
buffer= b'{"'
ascii= {"
buffer= b'0":2'
ascii= 0":2
buffer= b'}'
ascii= }
此外,当我使用
read()
而不是 readline()
时,我得到相同的行为:buffer= b'{'
data_str= {
buffer= b'"'
data_str= "
buffer= b'3'
data_str= 3
buffer= b'"'
data_str= "
buffer= b':'
data_str= :
buffer= b'1'
data_str= 1
buffer= b'}'
data_str= }
我甚至尝试使用另一份代码,它也使用了同样的库,但是遇到了相同的问题。
我不确定为什么会出现这种情况。
read()
并不能解决问题。 - user6039980.in_waiting> 0
),您立即采取行动。有没有办法告诉您已经获得了完整的“消息”并仅在那时读取?或者...您仍然可以逐个读取,但必须自己组装所需的内容。即收集直到闭合括号,然后启动新的ascii
。您的输入是否具有固定大小?这将使您的生活更轻松。;) - Ondrej K.