LoginSignup
81
74

More than 5 years have passed since last update.

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

Posted at

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のほうが使いやすいと思う。
81
74
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
81
74