次のPythonコードでArduinoボードに接続します。
device=glob.glob("/dev/ttyUSB*")[0]
time.sleep(1)
arduino = serial.Serial(device, 115200, timeout=5)
通常は機能しますが、再起動後に他のプロセスがボードにアクセスしている必要があり、エラーが発生します
serial.serialutil.SerialException:ポート/ dev/ttyUSB0を開くことができませんでした:[Errno 16]デバイスまたはリソースがビジーです: '/ dev/ttyUSB0'
USBプラグを抜き差しすると、エラーが発生することなく、Pythonコードを正常に実行できます。他のプロセスがポートをブロックしないようにするにはどうすればよいですか?また、その理由を見つけるにはどうすればよいですか?このエラー?
あなたが使用することができます
$ fuser /dev/ttyUSB0
ファイルを使用するプロセスのPIDを一覧表示します。または、fuser
コマンドでサポートされている場合は、-k
オプションを使用してそれらを強制終了できます。
私の場合
$ fuser /dev/ttyUSB0
動作していませんでした(何も表示されませんでした)。
ただし、機能していたのは次のとおりです。
$ Sudo lsof /dev/ttyUSB0
これにより、シリアルポートを使用していたプロセスのリストが表示され、kill
(リストの2番目の列に対応)を使用して単純にPID
することができました。
実行:
$ ps ax
どのプロセスがシリアルポートを使用しているかがわかります。そのプロセスを殺します。これは私のためにそれを解決しました。