簡體   English   中英

帶有pyserial的二進制數據(python串口)

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM