serial.write()方法似乎只发送字符串数据。我有像[0xc0,0x04,0x00]这样的数组,并希望能够通过串口发送/接收它们吗?原始I / O是否有单独的方法?
我想我可能需要将数组更改为['\ xc0','\ x04','\ x00'],仍然,null字符可能会造成问题。
答案 0 :(得分:12)
另一种方法,不使用array
模块:
def a2s(arr):
""" Array of integer byte values --> binary string
"""
return ''.join(chr(b) for b in arr)
答案 1 :(得分:11)
您需要将数据转换为字符串
"\xc0\x04\x00"
空字符在Python中不是问题 - 字符串不是以空值终止的,零字节的行为就像另一个字节"\x00"
。
一种方法:
>>> import array
>>> array.array('B', [0xc0, 0x04, 0x00]).tostring()
'\xc0\x04\x00'
答案 2 :(得分:1)
我遇到了类似的问题(但可能更糟),必须通过python脚本通过UART发送控制位来测试嵌入式设备。我的数据定义是“ field1:8位,field2:3位,field3 7位”,等等。事实证明,您可以使用BitArray库为此构建健壮且干净的接口。这是一个代码段(减去串行设置)
from bitstring import BitArray
cmdbuf = BitArray(length = 50) # 50 byte BitArray
cmdbuf.overwrite('0xAA', 0) # Init the marker byte at the head
在这里变得灵活。下面的命令替换了4位 位位置23,传递了4位。请注意,它花了一个二进制 位值,以字符串形式给出。我可以在任何位置设置/清除任何位 以这种方式在缓冲区中,而不必担心踩踏 相邻字节或位中的值。
cmdbuf.overwrite('0b0110', 23)
# To send on the (previously opened) serial port
ser.write( cmdbuf )