はじめに
前回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は標準でシリアルモニター機能も備えている。別のminicomやpicocomなどインストールする必要はないが、ここらへんは好みが分かれるところだと思う。
(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)でコマンドラインからのライブラリーインストールなどサポートしたようだ。それでもコマンドラインからの開発をメインにする場合、
inoやplatformioのほうが使いやすいと思う。
