用于串行通信的 Python 字节数组
Posted
技术标签:
【中文标题】用于串行通信的 Python 字节数组【英文标题】:Python byte array for Serial communication 【发布时间】:2015-10-27 08:26:01 【问题描述】:我有一个程序需要通过串行通信发送一个字节数组。而且我不知道如何在 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 代码。 编辑:串行数据发送到设备。我无法更改固件的地方。 谢谢
【问题讨论】:
看起来像 Java 代码,而不是 C++ 必须是bytearrays
,还是可以是bytes
?如果bytes
没问题,您可能需要struct
模块。
如果有样本输入/输出也很好。
可能是java sry。好吧,因为代码必须被发送到一个设备,该设备完全期望这种格式,它必须是那个字节数组
【参考方案1】:
将您的数据放入数组(这里是 [0,1,2] ),并使用:serial.write() 发送。我假设你已经正确打开了串口。
>> import array
>> tmp = array.array('B', [0x00, 0x01, 0x02]).tostring()
>> ser.write(tmp.encode())
回复使用:Binary data with pyserial(python serial port) 还有这个:pySerial write() won't take my string
【讨论】:
谢谢。这对我有帮助。但是,我不得不删除对“编码”的调用;它没有被识别。我刚刚通过了数组。我不知道——也许它与不同版本的 Python 有关。【参考方案2】:这取决于您发送的是有符号还是无符号以及其他参数。有很多关于此的文档。这是我过去使用的一个例子。
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”和“
https://docs.python.org/2/library/struct.html
【讨论】:
以上是关于用于串行通信的 Python 字节数组的主要内容,如果未能解决你的问题,请参考以下文章