2017年7月12日水曜日

PlatformIOを使うと、Arduinoのプロジェクトのライブラリの管理が楽そうだった話


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

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

使ったもの

  • Arduino Nano
  • PC

PlatformIOとは

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

インストール

本家のインストールに関するドキュメントを参考にしながら、自分が行った操作を説明します。

pythonのインストール

platformioのインストールは、「pip」というpythonのライブラリ管理ツールを使うのが楽です。

2019.10.02追記 platformioは以前(記事執筆(2017.07.12)時点)はpython2系しか動きませんでしたが、python3系でも利用できるようになったので、最新のpython3の利用をお勧めします。

最新のpython3.xをインストールしてください。

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

ubuntuの場合は、下記のコマンドでpythonとpipをインストールできます。
sudo apt install python3-pip

下記のコマンドで、python3のpipが利用できること確認してください。
pip3 --version

pipでplatformioをインストール

pipコマンドでplatformioをインストールします。
sudo pip3 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よりも管理が楽になりそうです。

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

更新履歴

2018.06.06
pythonとpipのインストールコマンドを「sudo apt install python-pip」に変更しました。
pip installコマンドにsudoを追加しました。

2019.10.02
platformioがpython3系でも扱えるようになっていたので、pythonのインストール手順をpython2.7から3系向けに変更しました。

0 件のコメント :