2017年7月12日水曜日

PlatformIOを使うと、ライブラリの管理が楽そうだった話


「ArduinoIDEで足りないライブラリがあったら、自動でダウンロードしてくれたらいいのに」
と思ったことはありませんか?
自分はArduinoIDEのためにライブラリをダウンロードする度に思っていました。

そんな中、PlatformIOというビルドツールの存在を知ったので試してみたところ、自分が求める機能が備わっていました。
本家のreadmeに書いてある内容ではありますが、リンクのメモも兼ねて、自分が試した内容を共有します。

使ったもの

  • Arduino Nano
  • PC

PlatformIOとは

IoTのプラットフォームを目指して作られている、開発ツールです。
IDEもあるみたいですが、今回はコマンドベースで説明します。

インストール

本家のインストールに関するドキュメントを参考にしました。

Installation

pythonのインストール

platformioのインストールは、「pip」というpythonのライブラリ管理ツールを使うのが楽です。
記事執筆(2017.070.12)時点では、platformioはpython2.7に依存しているため、python3ではなくpython2.7をインストールしてください。

https://www.python.org/downloads/

windowsを使う場合は、platformioのドキュメントで説明されているように、pipコマンドを使うために、python2.7のインストール時に「Add python.exe to Path」の設定が必要なようです。

ubuntuの場合は、下記のコマンドでインストールできます。
sudo apt install python2.7

下記のコマンドで、pipがpython2.7で動作していることを確認してください。
pip --version

自分の環境ではpython2とpython3が共存しているため、pip2がpython2のpip機能を呼び出せるようでした。
pip2 --version

pipでplatformioをインストール

pipコマンドでplatformioをインストールします。
pip install -U platformio

自分の環境ではpip2コマンドと管理者権限の利用が必要だったので、下記のコマンドでインストールしました。
sudo pip2 install -U platformio

インストールできたら、下記のコマンドでバージョンを確認できます。
platformio --version

platformioインストール時に短縮コマンドとしてpioも設定されます。
platformioコマンドとpioコマンドは、どちらを使ってもplatformioの機能を呼び出せます。
pio --version

タイピング量が少なくなると嬉しいので、この解説のコマンドにはpioを利用しています。

Linuxの設定

本家のreadmeにも明記されているように、Linuxを使っている場合は設定が追加で必要です。

下記のコマンドでdialoutグループに自分を追加する必要があります。
sudo usermod -a -G dialout ${USER}

udev rulesを設定する必要があります。
readmeに指定されるファイルudev rulesの設置は、ubuntuの場合、下記のコマンドで行えます。
cd /etc/udev/rules.d
sudo wget https://raw.githubusercontent.com/platformio/platformio-core/develop/scripts/99-platformio-udev.rules
sudo udevadm control --reload-rules

プロジェクトの作成

本家のプロジェクトのはじめ方に関するドキュメントを参考にしました。

setting-up-the-project

platormioのプロジェクト用にディレクトリを作り、中に入ります。
mkdir platformio_sample
cd platformio_sample

プロジェクト作成コマンドを実行します。
今回はArduino Nanoを使うので、下記のコマンドを実行します。
初めて実行する場合は、ツールチェーンのダウンロードなどがあるため、時間がかかります。
pio init --board nanoatmega328

使えるボードの種類は、下記のサイトで確認できます。

http://platformio.org/boards

下記のコマンドでもボードの種類を確認できます。
pio boards

プログラムの作成・実行

前の手順で空のプロジェクトを作ったので、Lチカのプログラムを書いて、実行してみます。
プログラムはplatformio initコマンドでできたsrcディレクトリの中に、main.cppという名前て作成します。

src/main.cpp
#include "Arduino.h"

void setup() {
  pinMode(LED_BUILTIN, OUTPUT);
}

void loop() {
  digitalWrite(LED_BUILTIN, HIGH);
  delay(1000);
  digitalWrite(LED_BUILTIN, LOW);
  delay(1000);
}

Aduino NanoをPCに接続し、platformioのプロジェクトディレクトリ内で下記のコマンドを実行すると、プログラムがビルドされて、Arduinoに送信されます。
pio run --target upload

Arduino NanoのLEDが1秒間隔で点滅します。


ライブラリに依存したプログラムの作成・実行

ここからがplatformioが便利だと個人的に思う機能の説明です。
自分がArduino用に作ったSomeSerialというシリアルクラスのラッパーライブラリの利用を例にして説明します。
この操作は、ライブラリマネージャのクイックスタートを参考にしました。

librarymanager/quickstart.html

まず、mainをSomeSerialを使うプログラムに書き換えます。
1秒ごとに115200bpsで「hi 今の時間(ms)」を送信するプログラムです。

src/main.cpp
#include "Arduino.h"
#include "SomeSerial.h"

SomeSerial mySerial(&Serial);

void setup() {
  mySerial.begin(115200);
}

void loop() {
  mySerial.print("hi ");
  mySerial.println(millis());
  delay(1000);
}

次に、プロジェクトディレクトリにあるplatformio.iniに対して、SomeSerialに関する情報を追加します。

platformio.ini
lib_deps =
  SomeSerial


上記の設定を終えてビルドコマンドを実行すると、SomeSerialをダウンロードしてからビルドとアップロードをしてくれます。
pio run --target upload

platformioのdevice monitorでArduinoからのシリアル通信内容を確認すると、期待通の情報が送信されていることを確認できます。
pio device monitor -b 115200

まとめ

platformioを使うと、ビルド時に足りないライブラリを自動的にダウンロードしてくれることが分かりました。
複数人数で共有するプロジェクトでライブラリを多用する場合、platformioを使えばArduinoIDEよりも管理が楽になりそうです。

共有する情報は以上です。

0 件のコメント :

コメントを投稿