Arduino の CLI がリリースされたということで試してみました。 Arduino からは下記ブログでアナウンスされています。
Makefileやスクリプトに組み込むためというのが目的のようで、Arduino IDE の主要な機能をCLIから実行できるようにすることを目指すとのことです。下記の Github リポジトリで公開されています。
まだアルファリリースということなので、バグを含んでいたり、予告なく変更される可能性は大きいですが、ひとまずチュートリアルに沿って試してみました。
ダウンロード
Arduino CLI は単一のバイナリファイルで提供されているので、ダウンロードするだけで実行できるようになります。私の環境は Mac なので、下記URLからバイナリをダウンロードします。
そのまま実行しても良いのですが、今回は /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番ピンに接続されています。
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 の環境設定は以前の記事で紹介しています。
上記記事内で行った設定で、 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 が見つからないということでコンパイルエラーになってしまいました。調べてみたのですが原因はわからず。同じようにエラーになっている方もいるようです。
まだアルファ版ということで Arduino CLI 側に問題があるのか、私の環境の問題かはわかりませんが、ひとまず Arduino IDE からはコンパイルできるので、今後アップデートがあればまた試してみたいと思います。
まとめ
アルファリリースということで、Stable版がリリースされるまではまだ時間がかかるかと思いますが、 IDE 以外にも選択肢が増えるのは嬉しいですね。好みとしては IDE と同じことができるならなんとなく CLI の方が好きです。とりあえずプロトタイピング等で試している段階であれば IDE の方が環境設定に苦労しないで済みそうなので便利ですが、実際のプロダクト開発では CLI で自動化できると楽なところは多そうです。今後のアップデートに期待したいですね。