pySerial 経由でいくつかのバイトを送信したい。テスト目的で、socat を使用して仮想シリアル ポートを作成しました。
socat PTY,link=./ptyp1,b9600 PTY,link=./ptyp2,b9600
Pythonコードは次のとおりです。
ser = serial.Serial('./ptyp1')
x = struct.pack('B',2)
print binascii.hexlify(x) # 02
ser.write(x)
y = ser.read(2)
print binascii.hexlify(y) # 5e42
私が得る出力:
02 # x
5e42 # y
私が期待する出力:
02 # x
02 # y
ここで何が間違っていますか?それはsocatまたはpythonですか?
編集:
x の値が異なると、他の奇妙な動作に気付きました。出力は次のとおりです。
x = 12 => y = 5E 52 0D 0A 5E 50
x = 100 => y = 100 # why does it work here?
解決:
問題は、書き込み先と同じポートで読み取ったことです。私が正しく理解すれば、socat は 2 つのポートを「in」と「out」として「接続」します。したがって、./ptyp1 に書き込む場合は、./ptyp2 を読み取る必要があります。その後、すべてが順調です。