Raspberry Pi 3 & Python 開発ブログ☆彡

Raspberry Pi 3の使い方、設定をわかりやすく解説。Raspberry Pi3 Model B(Element14版)、Raspbian 8.0(NOOBS Ver1.9.2)を使用して開発中。

【スポンサーリンク】

USBのデバイス名を固定する方法

【スポンサーリンク】

USBデバイスを複数挿入すると/dev/ttyUSB0、/dev/ttyUSB1、/dev/ttyUSB2...と認識されますが、/dev/ttyUSB0に割り当てられていたデバイスが再起動後、/dev/ttyUSB1に割り当てられてしまうということがあります。

割り当てが変わってしまうと、pythonコードで指定していたデバイス名(/dev/ttyUSBx)と整合が取れなくなり、動かなくなる場合があります。今回は、この現象を回避する方法を紹介します。

USBメモリのデバイス情報取得

USBデバイスのidVendorとidProductの情報が必要になります。
下記のページを参照して、idVendorとidProductを調べてください。

99-local.rulesファイルの編集

/etc/udev/rules.d/99-local.rules に下記の設定を追加します。

KERNEL=="ttyUSB*",  ATTRS{idVendor}=="xxxx", ATTRS{idProduct}=="xxxx", SYMLINK+="ttyUSB_Test"

 ATTRS{idVendor}=="xxxx" ⇒ xxxxには上記で調べたidVenderを記載します。
ATTRS{idProduct}=="xxxx" ⇒ xxxxには上記で調べたidProductを記載します。
SYMLINK+="ttyUSB_Test" ⇒ 今回は例として"ttyUSB_Test"としましたが、任意の名前で構いません。どのデバイスかわかりやすい名前がよいと思います。

動作確認

設定後、Raspberry Piを再起動します。ls -al /devコマンドで確認すると、内部的にttyUSB_Test -> ttyUSB0とシンボリックリンクが張られていることがわかります。これで毎回、idVender、idProductで指定したデバイスが/dev/ttyUSB_Testというデバイス名で接続が可能になります。
pythonでUSBデバイスのパスを指定する時も"/dev/ttyUSB_Test"というパス名を使ってください。