如何通过串口发送和接收十进制数组?
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 上都能正常工作。
我正在尝试通过 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 上都能正常工作。