如何通过串口发送和接收十进制数组?

How to send and receive a decimal array through serial port?

我正在尝试通过 python 中的串行发送数组 [0, 100, 150, 175, 255]。我将它转换为 bytearray 然后发送它。

我收到的数据看起来像

['\x00', 'd', '\x96', '\xaf', '\xff'] 我无法回到 [0, 100, 150, 175, 255]

有没有更好的方法来发送和接收这种数据?我是 python 的新手,对某些方法不熟悉。

这些是我正在使用的代码。

发送

import serial
ser = serial.Serial('/dev/ttyUSB0', 9600, timeout=10)
elements= [0,100,150,175,255]
data2=bytearray(elements)

while True:
      ser.write(data2)

收到

import serial
ser = serial.Serial('/dev/ttyUSB0', 9600, timeout=10)
vect = []

while True:
      vect.extend(ser.read())

谢谢。

在这里使用 eval() 可能很诱人:

while True:
      vect = eval(ser.read().decode('unicode_escape'))

但是,不要使用它。一般不好用eval()。我觉得@PM2Ring的回答更好

尝试将您收到的 char 转换为 int:

vect.extend([ord(ch) for ch in ser.read()])

当然可以回到[0, 100, 150, 175, 255]!您正在从 bytearray 发送数据,您还应该使用 bytearray 来接收数据。要将接收到的字节转换回整数,您只需将 bytearray 传递给 list()

这是一个演示:

elements = [0, 100, 150, 175, 255]

# Buffer for sending data
data2 = bytearray(elements)

# Buffer for reading data
rdata = bytearray()

# Simulate sending data over the serial port
rdata.extend(data2[0:2])
rdata.extend(data2[2:5])

vect = list(rdata)
print(vect)

输出

[0, 100, 150, 175, 255]

此代码在 Python 2 和 Python 3 上都能正常工作。