1

私はしばらくこれに固執しています。Pythonのデバイスにシリアルコマンドを送信する必要があります。形式の例を次に示します。

ser = serial.Serial('/dev/ttyO1',baudrate=115200)
ser.write('\xAA\x04\x05\x00\x00\x00')

.write(〜hex bytes〜)の形式を使用して通信すれば、問題なく通信できます。

ただし、より大きなデータのチャンクを受信する必要がある場合、デバイスの通信プロトコルは物事をパケットに分割し、各パケットの受信を確認する必要があります。パケットごとに個別のser.write()コマンドを入力しているときに手根管症候群になるのを防ぐために、パケットのカウント/確認を行うループを作成します。これが私が持っているものです:

for n in range(0,num_packets,1):

    x = '\\x'"%0.2x"%(n)    
    print('Picture Ready Host Ack')
    ser.write('\xAA\x0E\x00\x00' + x + '\x00')
    time.sleep(.1)
    response = ser.read(ser.inWaiting())
    image_write(response,base_path, filename)        

ただし、二重スラッシュ('\ x'..)は2つのスラッシュを与えます。

'\xaa\x0e\x00\x00\\x05\x00'

変数xを定義すると、単一のスラッシュ('\ x'...)が問題を返しますが、次のようになります。

ValueError: invalid \x escape

...ヘルプ?

4

2 に答える 2

2

xasを定義する代わりに を'\\x'"%0.2x"%(n)実行するとx = chr(n)、すべてが機能するはずです。

于 2012-08-03T18:56:22.033 に答える
0

\xij文字に展開するだけchr(int(ij, 16)) ですとにかくバイトを送信しているので、ループで最初のチャンクを送信します。何も追加しないでください。その後、次のチャンクで区切り文字を送信します。chr(int(n),16)これで問題が解決するはずです。

于 2012-08-03T19:07:32.000 に答える