シリアル機能をテストするための簡単なプログラムがあります。私のシリアル デバイスは 2 つの入力に反応します。ユーザーが「a」を入力すると、「fg」で応答します。ユーザーが他の文字/バイトを入力すると、「z」で応答します。'b' をシリアル デバイスに送信すると、正常に 'z' が返されます。「a」を送信すると、「f」と「g」の両方が返されるはずなので、1 バイトではなく 2 バイトになります。
以下のコードを参照してください。
#!/usr/bin/env python
import serial
ser = serial.Serial(
port = '/dev/ttyUSB0',
baudrate = 9600,
parity = serial.PARITY_NONE,
stopbits = serial.STOPBITS_ONE,
bytesize = serial.EIGHTBITS
)
ser.write('a')
byteData = ser.read(1) # read one, blocking
moreBytes = ser.inWaiting()
if moreBytes:
byteData = byteData + ser.read(moreBytes)
print byteData
print byteData
ser.close()
出力は次のとおりです。
user@ubuntu:~/code/native$ ./serialTesting.py
f
inWaiting() は値 0 を返すため、2 番目のバイトを読み取ることはありません。コードに小さな変更を加えて、予想される 2 バイトを手動で読み取ると、正常に動作します。
#!/usr/bin/env python
import serial
ser = serial.Serial(
port = '/dev/ttyUSB0',
baudrate = 9600,
parity = serial.PARITY_NONE,
stopbits = serial.STOPBITS_ONE,
bytesize = serial.EIGHTBITS
)
ser.write('a')
byteData = ser.read(2) # read two expected bytes for the result 'fg'
print byteData
ser.close()
出力は期待どおりです。
user@ubuntu:~/code/native$ ./serialTesting.py
fg