Raspberry Pi & Python 開発ブログ ☆彡

Raspberry PiとPythonの基本的な使い方をわかりやすく解説。初心者、入門者必見!!

Raspberry PiでUSBのデバイス名を固定する:ID指定

usb device name fix by id

この記事の内容はRaspberry Pi 4と3の両方で動作確認済みです

ブログ管理者のP.Hです!

USBデバイスを複数挿入すると/dev/ttyUSB0、/dev/ttyUSB1、/dev/ttyUSB2...と認識されますが、/dev/ttyUSB0に割り当てられていたデバイスが再起動後、/dev/ttyUSB1に割り当てられてしまうということがあります。 割り当てが変わってしまうと、pythonコードで指定していたデバイス名(/dev/ttyUSBx)と整合が取れなくなり、動かなくなる場合があります。今回は、この現象を回避する方法を紹介します。

それではUSBのデバイス名を固定する方法を説明してきます。

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

USBデバイスのidVendor、idProductの情報が必要になりますので、lsusbコマンドで調べます。まず、USBメモリを外した状態でターミナルからlsusbコマンドを実行します。そのあと、USBメモリを挿入した状態でlsusbコマンドを実行します。コマンドの結果を比較すると挿入前と後で、デバイスが1つ追加されていると思います。これがUSBデバイスのデバイス情報で、下記のように表示されます。

Bus 001 Device 005: ID AAAA:BBBB XXXX
...
...
  • AAAA ⇒ idVendor
  • BBBB ⇒ idProduct
  • XXXX ⇒ USBメモリの製造メーカー

これでidVendor、idProductがわかりました。

rulesファイルに設定する

わかりやすいように/etc/udev/ruled.d/90-usb.rulesファイルを新規に作成して、そこにUSBデバイス名を固定する設定を書き込んできます。sudo nano /etc/udev/rules.d/90-usb.rulesコマンドで90-usb.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"としましたが、任意の名前で構いません。どのデバイスかわかりやすい名前がよいと思います。

この記載をすることで、USBポートに挿入されているUSBデバイスを"ttyUSB_Test"という名前で制御できるようになります。

動作確認

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

USBデバイス名は、USBを挿入する場所によっても名前を固定することができます。こちらも便利ですので、下記ブログも参照していただければと思います。

www.raspberrypirulo.net