无法在串行 Python 中发送(或不接收)0 值

Cannot send (Or do not receive) a 0 value in serial Python

我已将我的 RPi3 Tx 和 Rx 引脚连接在一起。我使用以下代码:

import serial
from time import sleep

ser = serial.Serial(
        port='/dev/ttyS0',
        baudrate = 9600,
        parity=serial.PARITY_NONE,
        stopbits=serial.STOPBITS_ONE,
        bytesize=serial.EIGHTBITS,
        timeout=10
)
while True:
    
    ser.write(0)
    sleep(1)
    incoming = ser.read(ser.inWaiting())
    print(incoming)

这将打印为空 b''。我可以这样做:'0'.encode() 然后我得到 b'0'。 我需要将数据包发送到传感器:bytearray({0xFF,0x01,0x86,0x00,0x00,0x00,0x00,0x00,0x79})。问题是在环回中我得到了不完整的包,而且它是乱序的。似乎在发送第一个“0”后它终止了,或者发生了其他事情。像这样发送命令的正确方法是什么?我也尝试了 ser.read(9) 因为我希望有 9 个字节,但它仍然将其切断。

问题出在

bytearray({0xFF,0x01,0x86,0x00,0x00,0x00,0x00,0x00,0x79})

其中 {...,} 语法用于构建 集合 。这是唯一项的无序列表。因此多个零字节变成一个,顺序是任意的。相反,使用列表:

data = bytearray((0xFF,0x01,0x86,0x00,0x00,0x00,0x00,0x00,0x79))
ser.write(data)