これについて多くの議論があったことは知っていますが、まだ質問があります。 pyserialを使用してpyserialを介して16進値をデバイスに送信しようとしています
command="\x89\x45\x56"
ser.write(command)
しかし、string argument without encoding.
というエラーが表示され続けます。これを解決する方法を知っている人はいますか?
packet = bytearray()
packet.append(0x41)
packet.append(0x42)
packet.append(0x43)
ser.write(packet)
次のような文字列から16進値を送信することに成功しました。
input = '736e7000ae01FF'
ser.write(input.decode("hex"))
print "sending",input.decode("hex")
>> sending snp «☺
Python 3を使用する場合は、bytes
オブジェクトを使用できます。
command=b"\x89\x45\x56"
エラーから、pyserialはエンコーディングを指定せずに(あなたの)文字列をバイトオブジェクトに変換しようとしているように見えます。
これがPython 3の場合、おそらく文字列をUnicodeとして扱っており、変換方法がわかりません。おそらくここでバイトを使用するつもりだと思います。
command=b"\x89\x45\x56"
ありがとう、
最後に、バイナリファイルの指定領域を読み取り、(フロー制御として)uartを介して送信する方法を理解します。
binary_file = open("test_small.jpg", 'rb')
filesize = getSize(binary_file)
ser = serial.Serial('COM7', 115200, timeout=0.5)
count = 0
while (offset < filesize):
binary_file.seek(offset, 0)
ser.write(binary_file.read(MTU))
offset = offset + MTU
PySerial APIから ドキュメント :
write(data)バイトデータをポートに書き込みます。これはバイト型(またはbytearrayやmemoryviewなどの互換性がある)である必要があります。 Unicode文字列をエンコードする必要があります(例: 'hello'.encode(' utf-8 ')。
Python 3(必要))に取り組んでいるとすると、これは1バイトを送信する方法です。
command = b'\x61' # 'a' character in hex
ser.write(command)
数バイトの場合:
command = b'\x48\x65\x6c\x6c\x6f' # 'Hello' string in hex
ser.write(command)