Help us understand the problem. What is going on with this article?

Arduino を CLI で開発する #PlatformIOが素晴らしい

More than 1 year has passed since last update.

コマンドラインから Arduino をいじりたい。いくつか試して結局 PlatformIO に落ち着いた。

インストール (macOS)

Homebrew でインストールしたのは動かなかったので pip でインストールした。

$ ~/Documents/Arduino
$ pyenv install 2.7.15
$ pyenv virtualenv 2.7.15 platformio
$ pyenv local platformio
$ pip install platformio

使い方

ボード定義を調べる

$ platformio boards
(snip)
$ platformio boards esp32

Platform: espressif32
-----------------------------------------------------------------------------------
ID                    MCU            Frequency  Flash   RAM    Name
-----------------------------------------------------------------------------------
featheresp32          ESP32          240MHz    1.25MB  288KB  Adafruit ESP32 Feather
espea32               ESP32          240MHz    1.25MB  288KB  April Brother ESPea32
esp32doit-devkit-v1   ESP32          240MHz    1.25MB  288KB  DOIT ESP32 DEVKIT V1
pocket_32             ESP32          240MHz    1.25MB  288KB  Dongsen Tech Pocket 32
(snip)

Hello world

$ mkdir test-pfi
$ cd test-pfi
$ platformio init --board esp32doit-devkit-v1

プロジェクトのひな形ができるので、src/main.ino にコードを書く。

src/main.ino
void setup()
{
    Serial.begin(115200);
    Serial.println("hello platformio!");
}

void loop()
{
    Serial.println("hello");
    delay(1000);
}
$ platformio run  # ビルド
$ platformio run -t upload  # 書き込み
$ platformio serialports monitor -b 115200  # シリアルモニタ

シリアルポートを指定しなくても動いた。それっぽいデバイスファイルを推測して使っているのかな。
platformio.inimonitor_speed = 115200 を書いておけば serialports の -b 115200 が不要になる。

platformio.ini
[env:esp32doit-devkit-v1]
platform = espressif32
board = esp32doit-devkit-v1
framework = arduino
monitor_speed = 115200

ライブラリのインストール (platformio.ini)

platformio.ini に依存するライブラリを書いておくと platformio run でビルドする際に自動でダウンロードしてくれる。

platformio.ini
[env:esp32doit-devkit-v1]
platform = espressif32
board = esp32doit-devkit-v1
framework = arduino
lib_deps =
  Wire
  Adafruit Unified Sensor@>=1.0.2
  Adafruit AM2320 sensor library@>=1.1.1
monitor_speed = 115200

@ の後ろでバージョンを指定できる。マニュアル から抜粋

  • 0.1.2: バージョンを固定
  • ^0.1.2: メジャーバージョンを固定。0.x.y を使う
  • ~0.1.2: メジャー&マイナーバージョンを固定。 0.1.y を使う
  • >0.1.2: 0.1.2 より大きいバージョンを使う。>=, <, <= も同様
  • >0.1.0,!=0.2.0,<0.3.0: 0.1.0 より大きく、ただし 0.2.0 ではない、0.3.0 より小さいバージョンのものを使う

ライブラリのインストール (手動)

いちいち ini ファイルに書かなくても、ちょっと試すとかは lib install でインストールできる。

$ platformio lib search AM2320
Found 3 libraries:

(snip)
Adafruit AM2320 sensor library
==============================
#ID: 2456
Arduino library for AM2320 I2C Temp & Humidity Sensors

(snip)

$ platformio lib install 2456  # 番号を指定する
$ platformio lib install 'Adafruit Unified Sensor'  # 名前でも指定できる。依存ライブラリは自力で解決する必要がある

main.ino はこうなった。

src/main.ino
#include <Adafruit_Sensor.h>
#include <Adafruit_AM2320.h>

Adafruit_AM2320 am2320 = Adafruit_AM2320();

void setup()
{
    Serial.begin(115200);

    am2320.begin();
}

void loop()
{
    delay(2000);
    Serial.print("Temp: ");
    Serial.print(am2320.readTemperature());
    Serial.print("Hum: ");
    Serial.println(am2320.readHumidity());
}
$ platformio run
$ platformio run -t upload && platformio serialports monitor

rst:0x10 (RTCWDT_RTC_RESET),boot:0x13 (SPI_FAST_FLASH_BOOT)
configsip: 0, SPIWP:0xee
clk_drv:0x00,q_drv:0x00,d_drv:0x00,cs0_drv:0x00,hd_drv:0x00,wp_drv:0x00
mode:DIO, clock div:2
load:0x3fff0018,len:4
load:0x3fff001c,len:812
load:0x40078000,len:0
load:0x40078000,len:11584
entry 0x40078a60
Temp: 27.30Hum: 41.50
Temp: 27.90Hum: 41.50
Temp: 27.80Hum: 41.50
...

#include <Arduino.h> が必要で Arduino IDE のプロジェクトをそのままビルドするとかはできないけど ファイル名を .ino にすればそのままでよかった。

シリアルポートも勝手に推測して設定してくれるし、Arduino IDE みたく別途 ESP32 用の定義ファイルを追加するとかも必要ない。素晴らしい。

試したけどダメだったツール

手元の環境は macOS 10.13 + Arduino IDE 1.8.4

ino

動かなかった。
開発も止まっているようで、

Arduino-Makefile

Arduino UNO だとさくっと動くっぽい。ただ、ESP32 だとビルドが通らない。パスを指定したり何やかんやと準備が必要っぽい。面倒くさくなってやめた。

arduino(1)

Arduino 公式のコマンドラインツール。マニュアル
macOS の場合 /Applications/Arduino.app/Contents/MacOS/Arduino がそれになる。

コマンド実行毎に Arduino IDE 起動相当の処理をするようで、とても時間がかかる。ちょっと無いなーと。

余談

macOS デフォルトの make(1) が GNU Make になってて驚いた。

% which make
/usr/bin/make
% make -v
GNU Make 3.81
Copyright (C) 2006  Free Software Foundation, Inc.
This is free software; see the source for copying conditions.
There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A
PARTICULAR PURPOSE.

This program built for i386-apple-darwin11.3.0
zakkied
https://twitter.com/zakkied
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away