コマンドラインでArduino開発 : vim + platformio

  • 62
    いいね
  • 0
    コメント
この記事は最終更新日から1年以上が経過しています。

arduino_platformio.png

はじめに

前回inoを使ったコマンドラインからのビルドとアップロードだったが、今回はplatformioを使った方法をメモ。

Platformioについて

inoと同じくplatformioもarduinoの公式ページで紹介されている。現在自分はこちらをメインに使わせてもらっている。

platformioがすごいのは、IDEが必要ないということだ。inoは別途IDEが必要だったがplatformioは必要ない。パッケージとして自動でダウンロードしてくれるのだ。さらにすごいのは様々な組み込みボードをサポートしている。
有名どころはばっちり抑えているようで、STM32 Nucleoなど最近のボードもサポートされている。(http://platformio.org/#!/boards)

ino同様、pythonで書かれており、大きな依存はないので簡単にインストールできる。IDEの導入がない分inoよりも楽だと思う。

  • ubuntu 14.04
  • Mac OSX Yosemite(10.10.3)

platformioの導入

udevの設定 (Ubuntuのみ)

※ シリアル機能を使わない場合はこの項目はスキップしてください

platformioはシリアルモニター機能もある。しかしubuntuの場合、権限の関係上udevルールにファイルを追加しておく必要がある。(http://docs.platformio.org/en/latest/platforms/atmelavr.html)

Linux Users: Don’t forget to install “udev” rules file 99-platformio-udev.rules (an instruction is located in the file).

udevルールファイルのみでもいいが、いろいろなボードのサンプルプロジェクトもあるのでgithubから本体をダウンロードしておく。

# platformioプロジェクトをDL
$ git clone https://github.com/platformio/platformio.git

プロジェクトの中にある99-platformio-udev.rulesをコピー

# udevルールファイルを自身のルールフォルダにコピーする
$ sudo cp ./platformio/script/99-platformio-udev.rules /etc/udev/rules.d/

platformioのインストール

virtualenvの仮想環境下でインストールする。(virtualenv環境構築はこちらにメモしてあるので興味があればみてください。)

# virtualenv作成
$ mkvirtualenv --no-site-package platformio
(platformio)$ pip install platformio
(platformio)$ pip install --egg scons   # makeに変わるビルドツール。これも必要みたい。

ビルドしてアップロードしてみる

ボード名を調べる

初期化オプションでボードを指定(--board=<ボード名>)すると色々設定してくれる。自分のボード名がわからなければ一覧を表示できるし、サイトでも調べることができる。

(platformio) $ platformio boards
    Platform: atmelavr
    ---------------------------------------------------------------------------
    Type                  MCU            Frequency  Flash   RAM    Name
    ---------------------------------------------------------------------------
    flora8                atmega32u4     8Mhz      28Kb    2Kb    Adafruit Flora
    protrinket3ftdi       atmega328p     16Mhz     28Kb    2Kb    Adafruit Pro Trinket 3V/12MHz (FTDI)
    protrinket3           atmega328p     12Mhz     28Kb    2Kb    Adafruit Pro Trinket 3V/12MHz (USB)
        # 以下省略

grepして絞ってもいいし、追加オプションでも絞れる。自分はunoなのでこちらを検索してみる。

(platformio) $ platformio boards | grep uno
    uno                   atmega328p     16Mhz     31Kb    2Kb    Arduino Uno

別の例として、nano

(platformio) $ platformio boards | grep nano
    nanoatmega168         atmega168      16Mhz     14Kb    1Kb    Arduino Nano ATmega168
    nanoatmega328         atmega328p     16Mhz     30Kb    2Kb    Arduino Nano ATmega328

検索で出てきたtype項目をボードオプションで指定すればいい。

プロジェクトを作る : platformio init

プロジェクトの作成は簡単だ。platformio init --board=<ボード名>で、空のサブフォルダとプロジェクトファイル(platformio.ini)が生成される。platformio.iniのフォーマットは INI fileで、様々なオプションがあり細かい設定ができる。(http://docs.platformio.org/en/latest/projectconf.html)

プロジェクト用の空フォルダを作成

(platformio) $ mkdir uno; cd ./uno

arduinoプロジェクトの作成 (今回は一般的なunoボードで生成)

(platformio) $ platformio init --board=uno
    # 自動アップロードを有効にするかどうかの質問。
    # あとで`platformio.ini`ファイルを編集して変更することもできる
    Would you like to enable firmware auto-uploading when project is successfully built using `platformio run` command?
    Dont forget that you can upload firmware manually using `platformio run --target upload` command. [y/N]: y

    # プロジェクトディレクトリを変更できるよって案内
    The current working directory /home/hoge/uno will be used for the new project.
    You can specify another project directory via
    `platformio init -d %PATH_TO_THE_PROJECT_DIR%` command.

    # コンフィファイルを作る場所は`/home/hoge/uno`だけどいい?って質問。
    # 迷わず`y`
    The next files/directories will be created in /home/hoge/uno
    platformio.ini - Project Configuration File. |-> PLEASE EDIT ME <-|
    src - Put your source code here
    lib - Put here project specific or 3-rd party libraries
    Do you want to continue? [y/N]: y

    # 成功
    Project has been successfully initialized!
    Useful commands:
    `platformio run` - process/build project from the current directory
    `platformio run --target upload` or `platformio run -t upload` - upload firmware to embedded board
    `platformio run --target clean` - clean project (remove compiled files)

シリアルポート名を調べる : platformio serialports list

ビルドしたファームウェアはシリアルポート経由でアップロードされる。デフォルトは/dev/ttyUSB0となっているためArudinoを接続した場合、ポート名が違うためそのままだとアップデートに失敗する。そこでシリアルポート名を調べてplatformio.iniに指定しておく必要がある。調べ方はいろいろあるが、platformioコマンドを使って調べてみる。

platformio serialports listコマンドでシリアル情報の一覧が表示される。Description項目からArduinoポートかどうかはわかるはずだ。大抵Ubuntuの場合は/dev/ttyACM0、Macの場合はtty.usbserial-*

(platformio)$ platformio serialports list
    :   # 省略
    /dev/ttyACM0
    ----------
    Hardware ID: USB VID:PID=1a86:7523
    Description: QinHeng Electronics USB2.0-Serial

Arduinoのシリアルポート名をplatformio.iniに追記する。オプション名はupload_port

(platformio)$ echo -e "\nupload_port = /dev/ttyACM0" >> platformio.ini

ソース書く

お決まりのLED点滅とシリアル表示。ソースは./srcに入れる。


(platformio)$ vim ./src/sketch.ino
    #define LED_PIN 13
    void setup() {
        pinMode(LED_PIN, OUTPUT);
        Serial.begin(9600);
    }
    void loop() {
        Serial.println("Hello Arduino");
        digitalWrite(LED_PIN, HIGH); delay(100);
        digitalWrite(LED_PIN, LOW);  delay(900);
    }

ビルドしてみる : platformio run

もしビルドターゲットのプラットフォームパッケージがなければダウンロードをするメッセージが表示されるのでyを入力して取得する。ダウンロード先は~/.platformio/packages


(platformio)$ platformio run
    If you like PlatformIO, please:
    - follow us on Twitter to stay up-to-date on the latest project news > https://twitter.com/PlatformIO_Org
    - give us a star on GitHub > https://github.com/platformio/platformio
    Thanks a lot!

    [Wed May  6 13:06:53 2015] Processing autogen_uno (targets: upload, platform: atmelavr, board: uno, framework: arduino)
    ---------------------------------------------------------------------------------------------------------
    The platform 'atmelavr' has not been installed yet. Would you like to install it now? [y/N]: y

    Installing toolchain-atmelavr package:
    Downloading  [####################################]  100%
    Unpacking  [####################################]  100%
    Installing tool-avrdude package:
    Downloading  [####################################]  100%
    Unpacking  [####################################]  100%
    Installing framework-arduinoavr package:
    Downloading  [####################################]  100%
    Unpacking  [####################################]  100%
    Installing tool-micronucleus package:
    Downloading  [####################################]  100%
    Unpacking  [####################################]  100%
    The platform 'atmelavr' has been successfully installed!

Downloadが終わるとそのままビルドしてアップロードされる。本体を見るとLEDが点滅しているはず。

        : # 省略
    Reading | ################################################## | 100% 0.13s

    avrdude: verifying ...
    avrdude: 998 bytes of flash verified

    avrdude: safemode: lfuse reads as 0
    avrdude: safemode: hfuse reads as 0
    avrdude: safemode: efuse reads as 0
    avrdude: safemode: Fuses OK (H:00, E:00, L:00)

    avrdude done.  Thank you.

    =================================== [SUCCESS] Took 64.38 seconds ===================================

シリアルモニターを使ってみる : platformio serialports monitor

platformioは標準でシリアルモニター機能も備えている。別のminicompicocomなどインストールする必要はないが、ここらへんは好みが分かれるところだと思う。

(platformio)$ platformio serialports monitor -p /dev/ttyACM0 -b 9600
    # monitor開始
    # 終了するにはCtrl + ]
    --- Miniterm on /dev/ttyACM0: 9600,8,N,1 ---
    --- Quit: Ctrl+]  |  Menu: Ctrl+T | Help: Ctrl+T followed by Ctrl+H ---
    Hello Arduino
    Hello Arduino
    Hello Arduino
    Hello Arduino

その他の機能

パッケージのアップロード、本体のアップグレードもコマンドから簡単にできる。

  • platformio upgrade : platformioのアップデート
(platformio)$ platformio upgrade
    You're up-to-date!
    PlatformIO 1.4.0 is currently the newest version available.
  • platformio update : パッケージのアップデート
(platformio)$ platformio update
    Platform atmelavr
    --------
    Updating toolchain-atmelavr package:
    Versions: Current=2, Latest=2    [Up-to-date]
    Updating tool-avrdude package:
    Versions: Current=3, Latest=3    [Up-to-date]
    Updating framework-arduinoavr package:
    Versions: Current=16, Latest=16      [Up-to-date]
    Updating tool-micronucleus package:
    Versions: Current=1, Latest=1    [Up-to-date]

その他、外部ライブラリが簡単にインストールできたり様々な機能がある。詳しくは公式ドキュメントを是非一読してほしい。

まとめ

すぐに遊ぶための基本コマンドをまとめた。

command Description
platformio boards ボード一覧表示
platformio init --board=<ボード名> プロジェクト作成
platformio run ビルド(設定により自動アップロード)
platformio run --target=upload ビルドとアップロード
platformio run --target=clean クリーン
platformio serialports list シリアルポート一覧表示
platformio serialports monitor -p <デバイス> -b <ボーレート> シリアルモニタ

おしまい

今後は外部ライブラリの取り込みや、他プラットフォームのボードを試してみたい。何にせよ簡単に様々な組み込みボードを一つのコマンドラインで開発できるのは嬉しい限りである。

  • Arduino IDE v1.6.4 (2015/05/07)でコマンドラインからのライブラリーインストールなどサポートしたようだ。それでもコマンドラインからの開発をメインにする場合、inoplatformioのほうが使いやすいと思う。