RPi3B+ で Domoticz のプラグインを開発しました。このプラグインは Python です。USB シリアル ポートを使用して Arduino ボードにコマンドを送信したいと考えています。
プラグインはシリアル ポートを開き、コマンドを送信して、シリアル ポートを閉じます。再起動後以外は正常に動作します。
再起動後、ポートが開き、Arduino にコマンドが送信されたように見えますが、ボーレートが間違っているかのように、Arduino はそれを理解していません。ArduinoのRx LEDが点滅しています。
minicom を使用してシリアルを並行して開き、パラメータをリセットせずに minicom を終了すると、プラグインが正常に動作し始めます。
これが私のコードです:
serialCmd = "gpio sh" + str( shutterId ) + "_" + order +" on for " + str( PULSE_DURATION_MS ) + "\r"
Domoticz.Debug( "Serial command : " + serialCmd )
# open serial port
try:
Domoticz.Debug( "Opening serial port : " + Parameters["SerialPort"] )
serialPort = serial.Serial( port = Parameters["SerialPort"],
baudrate = 115200,
bytesize = serial.EIGHTBITS,
parity = serial.PARITY_NONE,
stopbits = serial.STOPBITS_ONE,
timeout = 1,
xonxoff = False,
rtscts = False,
dsrdtr = False )
except:
serialPort = None
if serialPort:
serialPort.write( serialCmd.encode( 'utf-8' ) )
serialPort.close()
serialPort = None
シリアルポートは/dev/ttyUSB0です。serial.Serial(...)でexclusive = Trueを使用しようとすると、ポートが既に開いているかのように、ポートを開くことができません。
もう 1 つの奇妙な点: Arduino ボードが再起動すると、何らかの情報がシリアル ポートに送信されます。PySerial では Python のプラグインでは読めませんが、minicom では読めます。
パラメータをリセットしてminicom を閉じると、minicomを開くたびに、入力バッファが読み込まれたことがないかのように (Arduino ボードをリセットせずに) この情報が minicom によって読み取られ、Python プラグインは引き続き機能しません。
問題を解決するにはどうすればよいですか?