0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

RaspberryPi4でPlatformIOを使って複数台のArduinoへ書き込む

Posted at

まえおき

ラズパイに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
/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
/home/pi/Arduino/pioTest/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台つなぐとこうなりました。

/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"
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を書き込みたいデバイス名にすれば任意のデバイスに書き込めます。

/home/pi/Arduino/pioTest/platformio.ini
upload_port = /dev/XIAO-01   
$ pio run -t upload

お疲れさまでした。

参考記事

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?