RaspberryPi[1] USBポートでデバイスを固定
Raspberry Pi には4つのUSBポートが付いています。これに複数のUSBが付いたときに、どこに何を刺すかによってポート名を固定したほうがプログラムが書きやすいので調べてみました。
Raspberry Pi & Python 開発ブログ ☆彡を参考にさせていただきました。詳細はこちらの方がいいと思います。
Rasperry Pi 4の場合は以下のように割り付けてあります。ちなみに確認はUSBにさして、順番にポートを変えていくとわかります。その時のコマンドは、
$ udevadm info -a -p $(udevadm info -q path -n /dev/ttyUSB0) | more
を実行すると、
looking at device '//devices/platform/scb/fd500000.pcie/pci0000:00/0000:00:00.
0/0000:01:00.0/usb1/1-1/1-1.1/1-1.1:1.0/ttyUSB0/tty/ttyUSB0':
KERNEL=="ttyUSB0"
SUBSYSTEM=="tty"
DRIVER==""
と出てくるのでポートを変えていけばわかります。
LANコネクタ側上 ⇒ "/usb1/1-1/1-1.1/1-1.1:1.0/"
LANコネクタ側下 ⇒ "/usb1/1-1/1-1.2/1-1.2:1.0/"
GPIOコネクタ側上 ⇒ "/usb1/1-1/1-1.3/1-1.3:1.0/"
GPIOコネクタ側下 ⇒ "/usb1/1-1/1-1.4/1-1.4:1.0/"
/etc/udev/ruled.d/ の下にデフォルトで 99-com.rules というファイルが入っています。これが、ポート名を作るルールになっているようなので、ここに新規にルールを書いていけばよさそうです。しかし、このオリジナルファイルを修正するのではなく、違うファイル名で作ることも可能になっているようなので、新規に作ります。参考のページでは 90-usb.rules としているので同じ名称にしておきます。たぶん、この前についている数値の小さいほうからルール設定されていくのだろうと思います。
今回はGPS,速度パルスと電流値を読み込むので、今回はその名称を使います。
ACTION=="add", DEVPATH=="/usb1/1-1/1-1.1/1-1.1:1.0/",SYMLINK+="USB_GPS"
ACTION=="add", DEVPATH=="/usb1/1-1/1-1.2/1-1.2:1.0/",SYMLINK+="USB_MEM"
ACTION=="add", DEVPATH=="usb1/1-1/1-1.3/1-1.3:1.0/", SYMLINK+="USB_PLS"
ACTION=="add", DEVPATH=="usb1/1-1/1-1.4/1-1.4:1.0/", SYMLINK+="USB_CUR"
確認は各ポートにUSBを刺して、/dev/ に設定したポート名が出てくれば大丈夫です。