まえおき
ラズパイにArduino(Seeedino Xiao)を複数台USBハブ経由でつないで書き込みをすることになり、その手順をまとめました。PlatformIOを使うとsshでそれぞれのArduinoに書き込めるので便利です。最終的に13台までは動作確認できました。
環境
Raspberyy Pi 4 Model B
OS: 2021-05-07-raspios-buster-armhf.zip
本題
作業の流れ
まずは1台、USBデバイス名を固定してみる
PlatformIOのインストール
プログラム書き込み
2台目以降
まずは1台、USBデバイス名を固定してみる
USBのデバイス名を固定しないと、ラズパイの電源を入れなおしたときなどに不都合が起きるので、まずはUSBのデバイス名を固定します。プログラムを書き込むときにも、どれに書き込んだかわかりやすくなると思います。
つながれているUSBデバイスは
$ ls /dev/tty*
で確認できるので、USBデバイスをつなぐ前とつないだ後に実行して、新たに追加されたものがつないだデバイスだとわかります。
まずはひとつつなぎ、
/dev/ttyACM0
(デバイスによって異なります)
というのが追加されたので、これが今つないだデバイスとなります。
次に以下のコマンドでUSBデバイスの詳細な情報を確認します。
$ sudo udevadm info -q all -n /dev/ttyACM0
結果の中で、以下の部分に注目します。
E: DEVPATH=/devices/platform/scb/fd500000.pcie/pci0000:00/0000:00:00.0/0000:01:00.0/usb1/1-1/1-1.3/1-1.3.1/1-1.3.1:1.0/tty/ttyACM0
/usb1/1-1/1-1.3/1-1.3.1/1-1.3.1:1.0/ (USBデバイスをつなぐ場所によって異なります)をメモして、rulesファイルを設定します。
$ sudo nano /etc/udev/rules.d/90-usb.rules
ACTION=="add", DEVPATH=="*/usb1/1-1/1-1.3/1-1.3.1/1-1.3.1:1.0/*", SYMLINK+="XIAO-00"
SYMLINK+="xxxxx"
で任意のデバイス名を設定できます。
以上がUSBデバイス名の固定手順です。
PlatformIOのインストール
つづいてPlatformIOのインストールです。
$ pip3 install platformio
$ sudo reboot
今回はArduinoのプロジェクトファイルはWindowsでPlatformIOでpioTestというプロジェクト名でつくっておいて、WinSCPなどを使ってファイル転送することにします。
/home/pi/
にArduino
というディレクトリをつくって、プロジェクトフォルダごと転送しました。
次は、設定ファイルを更新します。
$ cd /home/pi/Arduino/pioTest
$ nano platformio.ini
; PlatformIO Project Configuration File
;
; Build options: build flags, source filter
; Upload options: custom upload port, speed and extra flags
; Library options: dependencies, extra library storages
; Advanced options: extra scripting
;
; Please visit documentation for the other options and examples
; https://docs.platformio.org/page/projectconf.html
[env:seeed_xiao]
platform = atmelsam
board = seeed_xiao
framework = arduino
monitor_speed = 115200
upload_port = /dev/XIAO-00
platform_packages = toolchain-gccarmnoneeabi@~1.90301.0
upload_port = /dev/XIAO-00
で先ほどSYMLINKで指定したデバイス名となっています。
これで書き込む準備ができました。
プログラム書き込み
書き込みます。
$ pio run -t upload
2台目以降
同じ要領で、1台目をつないだまま2台目をつなぎます。先ほど/dev/ttyACM0
だったので/dev/ttyACM1
が追加されると思います。
$ ls /dev/tty*
$ sudo udevadm info -q all -n /dev/ttyACM1
DEVPATHの情報をもとに、rulesファイルを更新していきます。
4台つなぐとこうなりました。
ACTION=="add", DEVPATH=="*/usb1/1-1/1-1.3/1-1.3.1/1-1.3.1:1.0/*", SYMLINK+="XIAO-00"
ACTION=="add", DEVPATH=="*/usb1/1-1/1-1.3/1-1.3.2/1-1.3.2:1.0/*", SYMLINK+="XIAO-01"
ACTION=="add", DEVPATH=="*/usb1/1-1/1-1.3/1-1.3.3/1-1.3.3:1.0/*", SYMLINK+="XIAO-02"
ACTION=="add", DEVPATH=="*/usb1/1-1/1-1.3/1-1.3.4/1-1.3.4:1.0/*", SYMLINK+="XIAO-03"
rulesファイルを更新したらリブートしてください。
$ sudo reboot
あとはplatformio.iniのupload_portを書き込みたいデバイス名にすれば任意のデバイスに書き込めます。
upload_port = /dev/XIAO-01
$ pio run -t upload
お疲れさまでした。
参考記事