アルファ版がリリースされた Arduino CLI を試してみる

 Arduino の CLI がリリースされたということで試してみました。 Arduino からは下記ブログでアナウンスされています。

blog.arduino.cc

 Makefileやスクリプトに組み込むためというのが目的のようで、Arduino IDE の主要な機能をCLIから実行できるようにすることを目指すとのことです。下記の Github リポジトリで公開されています。

github.com

 まだアルファリリースということなので、バグを含んでいたり、予告なく変更される可能性は大きいですが、ひとまずチュートリアルに沿って試してみました。

ダウンロード

 Arduino CLI は単一のバイナリファイルで提供されているので、ダウンロードするだけで実行できるようになります。私の環境は Mac なので、下記URLからバイナリをダウンロードします。

Mac OSX 0.2.1-alpha.preview

 そのまま実行しても良いのですが、今回は /usr/local/bin にシンボリックリンクを作成してパスを通します。

$ ln -s ~/arduino-cli-0.2.1-alpha.preview-osx /usr/local/bin/arduino-cli
$ arduino-cli version
arduino-cli version 0.2.1-alpha.preview

Sketch の作成

 まず下記コマンドで Sketch を作成します。 ino ファイルが1つ作成されます。

$ arduino-cli sketch new SampleSketch
Sketch created in: /Users/akanuma/Documents/Arduino/SampleSketch
$
$ ls -l Documents/Arduino/SampleSketch/
total 8
-rw-r--r--  1 akanuma  staff  35 Sep  1 11:01 SampleSketch.ino
$
$ cat Documents/Arduino/SampleSketch/SampleSketch.ino                                                                                                                                                                                      

void setup() {
}

void loop() {
}

 今回はとりあえず Arduino 互換機の Seeduino でLチカを試してみます。 Seeeduino ではオンボードの LED は13番ピンに接続されています。

wiki.seeedstudio.com

 ino ファイルを下記のように変更します。

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

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

ボードの設定とコンパイル、アップロード

 Arduino CLI を最初に使う際にはプラットフォームのインデックス情報をアップデートする必要があります。下記のコマンドでアップデートします。

$ arduino-cli core update-index
Updating index: package_index.json downloaded   

 次に Seeeduino を Mac にUSBケーブルで接続します。 arduino-cli board list コマンドで、現在接続されているボードの情報を表示します。

$ arduino-cli board list
FQBN    Port                    ID              Board Name
        /dev/cu.usbmodem1421    2886:0004       unknown   

 Board Name が unknown になっているので、正しい core をインストールする必要があるということで、下記のように core を検索します。

$ arduino-cli core search arduino
Searching for platforms matching 'arduino'

ID                      Version Installed       Name                                             
Intel:arc32             2.0.2   No              Intel Curie Boards                               
arduino:avr             1.6.21  Yes             Arduino AVR Boards                               
arduino:nrf52           1.0.2   No              Arduino nRF52 Boards                             
arduino:sam             1.6.11  No              Arduino SAM Boards (32-bits ARM Cortex-M3)       
arduino:samd            1.6.19  No              Arduino SAMD Boards (32-bits ARM Cortex-M0+)     
arduino:samd_beta       1.6.23  No              Arduino SAMD Beta Boards (32-bits ARM Cortex-M0+)
arduino:stm32f4         1.0.1   No              Arduino STM32F4 Boards                           
littleBits:avr          1.0.0   No              littleBits Arduino AVR Modules   

 チュートリアルでは MKR1000 を使っていますが、今回は Arduino Uno の互換機の Seeeduino を使うので、下記のように検索してみます。

$ arduino-cli core search uno
Searching for platforms matching 'uno'

ID              Version Installed       Name              
arduino:avr     1.6.21  Yes             Arduino AVR Boards

 見つかった core をインストールします。

$ arduino-cli core install arduino:avr
Downloading arduino:avr-gcc@4.9.2-atmel3.5.4-arduino2...
arduino:avr-gcc@4.9.2-atmel3.5.4-arduino2 downloaded                                                                                                                                                                                          
Downloading arduino:avrdude@6.3.0-arduino9...
arduino:avrdude@6.3.0-arduino9 downloaded                                                                                                                                                                                                     
Downloading arduino:arduinoOTA@1.1.1...
arduino:arduinoOTA@1.1.1 downloaded                                                                                                                                                                                                           
Downloading arduino:avr@1.6.21...
arduino:avr@1.6.21 downloaded                                                                                                                                                                                                                 
Installing arduino:avr-gcc@4.9.2-atmel3.5.4-arduino2
arduino:avr-gcc@4.9.2-atmel3.5.4-arduino2 installed
Installing arduino:avrdude@6.3.0-arduino9
arduino:avrdude@6.3.0-arduino9 installed
Installing arduino:arduinoOTA@1.1.1
arduino:arduinoOTA@1.1.1 installed
Updating arduino:avr@1.6.21 with arduino:avr@1.6.21...
arduino:avr@1.6.21 installed
$
$ arduino-cli core list
ID                      Installed       Latest  Name                                        
arduino:avr             1.6.21          1.6.21  Arduino AVR Boards
espressif:esp32    

 再度ボード情報を確認してみます。

$ arduino-cli board list
FQBN    Port                    ID              Board Name
        /dev/cu.usbmodem1421    2886:0004       unknown   

 まだ正しく認識されていないようです。試しに下記 core もインストールしてみましたが、結果は変わりませんでした。

$ arduino-cli core search ATmega328
Searching for platforms matching 'atmega328'

ID                      Version Installed       Name                    
atmel-avr-xminis:avr    0.6.0   No              Atmel AVR Xplained-minis

 ボードを正しく認識させることはできませんでしたが、 FQBN(Fully Qualified Board Name) を指定すればコンパイルできそうだったので、下記のようにコンパイルしてみます。

$ arduino-cli compile --fqbn arduino:avr:uno Documents/Arduino/SampleSketch                                                                                                                                                              
Sketch uses 928 bytes (2%) of program storage space. Maximum is 32256 bytes.
Global variables use 9 bytes (0%) of dynamic memory, leaving 2039 bytes for local variables. Maximum is 2048 bytes.

 コンパイルが成功したようなので、下記コマンドで Seeeduino にアップロードします。

$ arduino-cli upload -p /dev/tty.usbmodem1421 --fqbn arduino:avr:uno Documents/Arduino/SampleSketch

 ターミナル上には特に結果は表示されませんでしたが、正しくアップロードされたようで、オンボードの LED でLチカが実行されました。

M5Stack の Sketch をビルドしてみる

 最近 M5Stack を触っているので、ついでに M5Stack の Sketch がビルドできるか試してみます。まず M5Stack のライブラリを検索してみます。

$ arduino-cli lib search m5stack
Name: "M5Stack"
  Author:  M5Stack
  Maintainer:  Zibin Zheng <bin@m5stack.com>
  Sentence:  Library for M5Stack Core development kit
  Paragraph:  See more on http://M5Stack.com
  Website:  https://github.com/m5stack/m5stack
  Category:  Device Control
  Architecture:  esp32
  Types:  Contributed
  Versions:  [0.1.1, 0.1.2, 0.1.3, 0.1.4, 0.1.5, 0.1.6, 0.1.8, 0.1.9, 0.2.0, 0.2.1, 0.2.2]
Name: "M5Stack-SD-Updater"
  Author:  tobozo@noreply.github.com
  Maintainer:  tobozo@noreply.github.com
  Sentence:  SD Card Loader for M5 Stack
  Paragraph:  Package your apps on an SD card and load them from a menu app, button or MQTT message.
  Website:  https://github.com/tobozo/M5Stack-SD-Updater/
  Category:  Uncategorized
  Architecture:  esp32
  Types:  Contributed
  Versions:  [0.0.2, 0.1.0, 0.2.2, 0.3.0, 0.3.2]
Name: "M5Stack_Avatar"
  Author:  Shinya Ishikawa
  Maintainer:  Shinya Ishikawa<ishikawa.s.1027@gmail.com>
  Sentence:  Yet another avatar module for M5Stack
  Paragraph:  See more on http://M5Stack.com
  Website:  https://platformio.org/lib/show/4529/M5Stack-Avatar
  Category:  Device Control
  Architecture:  esp32
  Types:  Contributed
  Versions:  [0.4.0, 0.5.1, 0.6.0, 0.6.1, 0.6.2, 0.6.3, 0.6.4]

 M5Stack の環境設定は以前の記事で紹介しています。

blog.akanumahiroaki.com

blog.akanumahiroaki.com

 上記記事内で行った設定で、 M5Stack ライブラリと m5stack-avatar-master ライブラリはインストールされています。

$ arduino-cli lib list
Name                            Installed       Location  
Adafruit_Circuit_Playground     1.8.1           sketchbook
Bridge                          1.7.0           sketchbook
Ethernet                        2.0.0           sketchbook
Firmata                         2.5.8           sketchbook
Keyboard                        1.0.2           sketchbook
M5Stack                         0.2.1           sketchbook
SD                              1.2.2           sketchbook
m5stack-avatar-master           0.6.2           sketchbook

 いずれも新しいバージョンがリリースされているので、アップデートします。インストール時と同様のコマンドでアップデートも実行することができます。

$ arduino-cli lib install M5Stack
M5Stack@0.2.2 downloaded                                                                                                                                                                                                                      
Replacing M5Stack@0.2.1 with M5Stack@0.2.2
Installed M5Stack@0.2.2
$
$ arduino-cli lib install M5Stack_Avatar
M5Stack_Avatar@0.6.4 downloaded                                                                                                                                                                                                               
Installed M5Stack_Avatar@0.6.4

 再度インストール済みライブラリを確認してみます。

$ arduino-cli lib list
Name                            Installed       Location  
Adafruit_Circuit_Playground     1.8.1           sketchbook
Bridge                          1.7.0           sketchbook
Ethernet                        2.0.0           sketchbook
Firmata                         2.5.8           sketchbook
Keyboard                        1.0.2           sketchbook
M5Stack                         0.2.2           sketchbook
M5Stack_Avatar                  0.6.4           sketchbook
SD                              1.2.2           sketchbook
m5stack-avatar-master           0.6.2           sketchbook

 以前 M5StackAvatar のライブラリをインストールした際にライブラリマネージャーではなく、ファイルをダウンロードして配置したため、今回インストールしたライブラリとは別の扱いになっているようです。以前のライブラリはアンインストールしておきます。

$ arduino-cli lib uninstall m5stack-avatar-master
Uninstalling m5stack-avatar-master@0.6.2
~  $ 
~  $ arduino-cli lib list
Name                            Installed       Location  
Adafruit_Circuit_Playground     1.8.1           sketchbook
Bridge                          1.7.0           sketchbook
Ethernet                        2.0.0           sketchbook
Firmata                         2.5.8           sketchbook
Keyboard                        1.0.2           sketchbook
M5Stack                         0.2.2           sketchbook
M5Stack_Avatar                  0.6.4           sketchbook
SD                              1.2.2           sketchbook

 新しい Sketch を1つ作成します。

$ arduino-cli sketch new M5StackSampleSketch
Sketch created in: /Users/akanuma/Documents/Arduino/M5StackSampleSketch

 ino ファイルを下記のように変更します。

#include <M5Stack.h>

// the setup routine runs once when M5Stack starts up
void setup(){

  // Initialize the M5Stack object
  M5.begin();

  // LCD display
  M5.Lcd.print("Hello World!!");
}

// the loop routine runs over and over again forever
void loop() {

}

 ボードの認識についてはいくつかの core を試したのですが、 Seeeduino の時と同様に unknown のままでした。

$ arduino-cli board list
FQBN    Port                    ID              Board Name
        /dev/cu.SLAB_USBtoUART  10C4:EA60       unknown   

 FQBN を指定してコンパイルしてみます。

$ arduino-cli compile --fqbn espressif:esp32:m5stack-core-esp32 Documents/Arduino/M5StackSampleSketch
Alternatives for M5Stack.h: [M5Stack@0.2.2]
ResolveLibrary(M5Stack.h)
  -> candidates: [M5Stack@0.2.2]
Alternatives for Wire.h: [Wire@1.0]
ResolveLibrary(Wire.h)
  -> candidates: [Wire@1.0]
Alternatives for SPI.h: [SPI@1.0]
ResolveLibrary(SPI.h)
  -> candidates: [SPI@1.0]
Alternatives for FS.h: [FS@1.0]
ResolveLibrary(FS.h)
  -> candidates: [FS@1.0]
Alternatives for SD.h: [SD@1.0.5 SD@1.2.2]
ResolveLibrary(SD.h)
  -> candidates: [SD@1.0.5 SD@1.2.2]
Multiple libraries were found for "SD.h"
 Used: /Users/akanuma/Documents/Arduino/hardware/espressif/esp32/libraries/SD
 Not used: /Users/akanuma/Documents/Arduino/libraries/SD
Multiple libraries were found for "M5Stack.h"
 Used: /Users/akanuma/Documents/Arduino/libraries/M5Stack
Multiple libraries were found for "Wire.h"
 Used: /Users/akanuma/Documents/Arduino/hardware/espressif/esp32/libraries/Wire
Multiple libraries were found for "SPI.h"
 Used: /Users/akanuma/Documents/Arduino/hardware/espressif/esp32/libraries/SPI
Multiple libraries were found for "FS.h"
 Used: /Users/akanuma/Documents/Arduino/hardware/espressif/esp32/libraries/FS
Error: open /var/folders/l1/5gdn8snd6gj_nfyh5j4nc1sw0000gn/T/arduino-sketch-5C8AE8258C7345D00A6E4E421EB09E5D/core/core.a: no such file or directory
Compilation failed.

 core.a が見つからないということでコンパイルエラーになってしまいました。調べてみたのですが原因はわからず。同じようにエラーになっている方もいるようです。

tech.144lab.com

 まだアルファ版ということで Arduino CLI 側に問題があるのか、私の環境の問題かはわかりませんが、ひとまず Arduino IDE からはコンパイルできるので、今後アップデートがあればまた試してみたいと思います。

まとめ

 アルファリリースということで、Stable版がリリースされるまではまだ時間がかかるかと思いますが、 IDE 以外にも選択肢が増えるのは嬉しいですね。好みとしては IDE と同じことができるならなんとなく CLI の方が好きです。とりあえずプロトタイピング等で試している段階であれば IDE の方が環境設定に苦労しないで済みそうなので便利ですが、実際のプロダクト開発では CLI で自動化できると楽なところは多そうです。今後のアップデートに期待したいですね。