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

时间:2017-07-14 18:14:37

标签: python xbee

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

我收到的数据似乎是

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

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

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

SEND

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

while True:
      ser.write(data2)

RECEIVE

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

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

谢谢。

3 个答案:

答案 0 :(得分:0)

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

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

然而,使用它。使用eval()通常很糟糕。我认为@ PM2Ring的答案更好。

答案 1 :(得分:0)

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

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

答案 2 :(得分:0)

当然你可以回到[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上都能正常工作。