[英]Binary data with pyserial(python serial port)
pyserial 中的 serial.write() 方法似乎只發送字符串數據。 我有像 [0xc0,0x04,0x00] 這樣的數組,並且希望能夠通過串行端口發送/接收它們? 原始 I/O 是否有任何單獨的方法?
我想我可能需要將數組更改為 ['\\xc0','\\x04','\\x00'],但空字符可能會造成問題。
另一種方法,不使用array
模塊:
def a2s(arr):
""" Array of integer byte values --> binary string
"""
return ''.join(chr(b) for b in arr)
您需要將數據轉換為字符串
"\xc0\x04\x00"
空字符在 Python 中不是問題——字符串不是以空字符結尾的,零字節的行為就像另一個字節"\\x00"
。
一種方法:
>>> import array
>>> array.array('B', [0xc0, 0x04, 0x00]).tostring()
'\xc0\x04\x00'
我遇到了一個類似(但可以說更糟)的問題,必須通過 UART 從 python 腳本發送控制位來測試嵌入式設備。 我的數據定義是“field1: 8 bits , field2: 3 bits, field3 7 bits”等。事實證明,您可以使用 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 )
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.