用于串行通信的Python字节数组

Python byte array for Serial communication

本文关键字:字节 字节数 数组 Python 通信 用于      更新时间:2023-10-16

我得到了一个需要通过串行通信发送字节数组的程序。我也不知道怎么用python做这样的东西。我找到了一个c/c++/java函数,它创建了所需的字节数组:

byte[] floatArrayToByteArray(float[] input)
{
  int len = 4*input.length;
  int index=0;
  byte[] b = new byte[4];
  byte[] out = new byte[len];
  ByteBuffer buf = ByteBuffer.wrap(b);
  for(int i=0;i<input.length;i++) 
  {
    buf.position(0);
    buf.putFloat(input[i]);
    for(int j=0;j<4;j++) out[j+i*4]=b[3-j];
  }
  return out;
}

,但我如何将其转换为python代码。编辑:将串行数据发送到设备。我不能更改固件。由于

将数据放入数组(这里是[0,1,2]),并使用:serial.write()发送。我想你已经正确地打开了串行端口。

>> import array
>> tmp = array.array('B', [0x00, 0x01, 0x02]).tostring()
>> ser.write(tmp.encode())

回答使用:二进制数据pyserial(python串行端口)pySerial write() won't take my string

这取决于您发送的是有符号的还是无符号的以及其他参数。关于这个有很多文档。这是我过去用过的一个例子。

x1= 0x04
x2 = 0x03
x3 = 0x02
x4 = x1+ x2+x3
input_array = [x1, x2, x3, x4]
write_bytes = struct.pack('<' + 'B' * len(input_array),  *input_array) 
ser.write(write_bytes)

要理解我为什么使用'B'和'<',你必须参考pyserial文档。

https://docs.python.org/2/library/struct.html