pyserialを使用してデータをarduinoに送信しようとしています。しかし、COMポートを開くと、DTRが低く設定され、ボードがリセットされます。ただし、2つのボタンを1秒間押し続けて、シリアル受信モードにする必要があるように、arduinoコードを設定しています。可能であれば、arduinoの起動時にシリアル入力を行う必要はありません。
どうやら、serialWin32.pyファイルを変更して、次の行を変更できます。
self._dtrState = win32.DTR_CONTROL_ENABLE
に:
self._dtrState = win32.DTR_CONTROL_DISABLE
しかし、Pythonスクリプトでこれを直接無効にする方法はありますか?また、すべてのシステムでこれを行う必要があります。このスクリプトを使用するためだけに、基本のシリアル構成を変更するように強制したくはありません。
シリアルポートは次のように開かれます。
com = serial.Serial(port, baud, timeout=1);
更新:最終的に、セットアップに適したソリューションを見つけました。常にシリアルデータを処理する必要がなかったので、デバイスをシリアル受信モードにしたときにのみ、arduino自体からのシリアル接続のリセットを無効にする方法を見つけました。
多くの投稿では、5Vとリセットの間に約100オームの抵抗を配置することでDTRリセットを無効にできると述べています。しかし、私はこれが永続的なものになることを望んでいませんでした。そこで、代わりにPD5とリセットの間に抵抗を配置しました。次に、ソフトウェアで:
void setup() {
//.......
DDRD &= ~(_BV(PD5)); //Set PD5 as input initially
PORTD |= (_BV(PD5)); //Set high
//.......
}
inline void setResetDisable(bool state)
{
if(state)
DDRD |= (_BV(PD5)); //Set PD5 as output to put 5V on reset line
else
DDRD &= ~(_BV(PD5)); //set back to input mode
}
したがって、シリアルモードにしたい場合は、setResetDisable(true)を呼び出します。これにより、100オームの抵抗とリセットピンに5Vがスローされ、DTRがそれをローに引き下げてチップをリセットするのを防ぎます:)次に、setResetDisable(false)を呼び出します。 )チップを通常どおりにプログラムできるように、シリアルモードを終了するとき。