arduino-cliの使い方

$ arduino-cli version
arduino-cli Version: 0.13.0 Commit: 693a045

インストール

Arduino CLIの公式ドキュメントに従ってインストールする。後述するscreenコマンドも合わせてインストールする。 arduino-cliはDockerイメージも配布されているのでお好みで。

curl -fsSL https://raw.githubusercontent.com/arduino/arduino-cli/master/install.sh | BINDIR=~/.local/bin sh
echo "export PATH=\"\$PATH:\$HOME/.local/bin\"" >> ~/.bashrc
source ~/.bashrc
sudo apt install screen

プラットフォーム一覧を更新しておく。

arduino-cli core update-index

シリアルポートを使うため、dialoutグループにユーザを追加する(/dev/ttyACM#/dev/ttyUSB#のグループはdialout)。

sudo adduser $USER dialout

スケッチの作成

特に特殊なファイルを必要としたりはしないので、 Arduino IDEで作成しても、好きなテキストエディタで作成してもよい。

一応テンプレート付きのスケッチを作成するには、arduino-cli sketch new SKETCH_NAMEを実行する。

手動で作成する場合にはArduino IDEと同様、 スケッチ名(ディレクトリ名)と同じ名前で、SKETCH_NAME.inoのように メインのソースコードを作成する。

以下、arduino-cliのコマンドはスケッチのディレクトリで実行する。

FQBNの確認

arduino-cliでボードを扱うときには、ボード名にあたるFQBNというコロンで区切られた文字列を使う。

arduino-cli board listallコマンドで arduino-cliが対応しているボードのFQBN一覧が出力される。 arduino-cli board listall esp32のようにキーワードを追加して、 絞り込むこともできる。

また、arduino-cli board listコマンドでPCに接続しているボードのFQBNを調べられる場合がある(Arduino系ボードの場合?)。

プラットフォームコアのインストール

コンパイルには別途ボードに対応するビルドツールセット(プラットフォームコア)をインストールする必要があり、FQBNから以下のようにコマンドを実行する。

# Arduino (AVR)
arduino-cli core install arduino:avr
# Arduino Nano Every ほか
arduino-cli core install arduino:megaavr
# ESP32
arduino-cli core install esp32:esp32

ライブラリのインストール

ライブラリの導入には、arduino-cli libコマンドを使う。 例えば、ArduinoJsonライブラリを導入するときは、 以下のように検索コマンドで該当するライブラリの名前を確かめ、インストールコマンドを実行する。

arduino-cli lib search ArduinoJson
arduino-cli lib install ArduinoJson

スケッチのコンパイル

ボードに書き込む前に、まずスケッチ(ソースコード)をコンパイルする。

Arduino UNO(FQBN:arduino:avr:uno)に書き込むためのスケッチをコンパイルする。

arduino-cli compile -b arduino:avr:uno

コンパイル成果物はデフォルトで./buildディレクトリに書き出されるので、 .gitignoreなどに追加しておく。

Arduino Nano EveryはATmega4809を搭載しているが、デフォルトでArduino UnoやNanoのATmega328Pをエミュレートする互換モードになる。 違いはよくわからないが、低レベルAPIを直接使っている場合に影響があるかもしれない。

# 互換モード(デフォルト)
arduino-cli compile -b arduino:megaavr:nona4809
# 通常モード
arduino-cli compile -b arduino:megaavr:nona4809:mode=off
$ arduino-cli board details arduino:megaavr:nona4809
Board name: Arduino Nano Every
FQBN: arduino:megaavr:nona4809
Board version: 1.8.7
Official Arduino board: ✔
Identification properties: VID:0x2341 PID:0x0058
Package name: arduino
Package maintainer: Arduino
Package URL: https://downloads.arduino.cc/packages/package_index.json
Package website: http://www.arduino.cc/
Package online help: http://www.arduino.cc/en/Reference/HomePage
Platform name: Arduino megaAVR Boards
Platform category: Arduino
Platform architecture: megaavr
Platform URL: http://downloads.arduino.cc/cores/core-ArduinoCore-megaavr-1.8.7.tar.bz2
Platform file name: core-ArduinoCore-megaavr-1.8.7.tar.bz2
Platform size (bytes): 875098
Platform checksum: SHA-256:24853e59bfcfcfa09d7ab51011b65f2246e082228b1f14fdaa4cbb2c6aae23b4
Required tool: arduino:avr-gcc 7.3.0-atmel3.6.1-arduino5
Required tool: arduino:avrdude 6.3.0-arduino17
Required tool: arduino:arduinoOTA 1.3.0
Option: Registers emulation mode
ATMEGA328 ✔ mode=on
None (ATMEGA4809) mode=off
Programmers: Id Name
medbg Onboard Atmel mEDBG (UNO WiFi Rev2)

スケッチの書き込み

ボードにコンパイルしたスケッチを書き込む。 シリアルポートを-pオプションで指定する。

arduino-cli upload -b arduino:avr:uno -p /dev/ttyACM0

シリアルモニタ

arduino-cliにはシリアルモニタ機能がない(追加される予定もない)ので、 ほかのツールを使う必要がある。

screenコマンドがよく使われるようだったので、これを使う。 Ubuntuの場合apt install screenで導入できる。 /dev/ttyACM0の部分にはシリアルポート名を、115200の部分にはbaudrateを入れる。

screen /dev/ttyACM0 115200

閉じるにはCtrl+a kを入力する。

プロキシ設定

arduino-cliの通信にプロキシを設定するには、 コンフィグファイルを作成する必要がある。

arduino-cli config initを実行すると arduino-cliの設定関係ディレクトリにarduino-cli.ymlが生成される。 私の環境では、~/.arduino15/arduino-cli.ymlが生成された。 これを開き、以下のようにプロキシ設定を追加する。

board_manager:
additional_urls: []
(略)
network:
proxy: http://proxy:port

関連