0

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 プラグインは引き続き機能しません。

問題を解決するにはどうすればよいですか?

4

1 に答える 1