arduino-cliの使い方
$ arduino-cli versionarduino-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 shecho "export PATH=\"\$PATH:\$HOME/.local/bin\"" >> ~/.bashrcsource ~/.bashrcsudo 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系ボードの場合?)。
- Arduino UNO:
arduino:avr:uno
- Arduino Nano:
arduino:avr:nano
- ブートローダ が古い場合?: https://github.com/arduino/arduino-cli/issues/29
- Arduino Nano Every:
arduino:megaavr:nona4809
- ESP32-DevKitC:
esp32:esp32:esp32
プラットフォームコアのインストール
コンパイルには別途ボードに対応するビルドツールセット(プラットフォームコア)をインストールする必要があり、FQBNから以下のようにコマンドを実行する。
# Arduino (AVR)arduino-cli core install arduino:avr# Arduino Nano Every ほかarduino-cli core install arduino:megaavr# ESP32arduino-cli core install esp32:esp32
ライブラリのインストール
ライブラリの導入には、arduino-cli lib
コマンドを使う。
例えば、ArduinoJson
ライブラリを導入するときは、
以下のように検索コマンドで該当するライブラリの名前を確かめ、インストールコマンドを実行する。
arduino-cli lib search ArduinoJsonarduino-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:nona4809Board name: Arduino Nano EveryFQBN: arduino:megaavr:nona4809Board version: 1.8.7Official Arduino board: ✔Identification properties: VID:0x2341 PID:0x0058Package name: arduinoPackage maintainer: ArduinoPackage URL: https://downloads.arduino.cc/packages/package_index.jsonPackage website: http://www.arduino.cc/Package online help: http://www.arduino.cc/en/Reference/HomePagePlatform name: Arduino megaAVR BoardsPlatform category: ArduinoPlatform architecture: megaavrPlatform URL: http://downloads.arduino.cc/cores/core-ArduinoCore-megaavr-1.8.7.tar.bz2Platform file name: core-ArduinoCore-megaavr-1.8.7.tar.bz2Platform size (bytes): 875098Platform checksum: SHA-256:24853e59bfcfcfa09d7ab51011b65f2246e082228b1f14fdaa4cbb2c6aae23b4Required tool: arduino:avr-gcc 7.3.0-atmel3.6.1-arduino5Required tool: arduino:avrdude 6.3.0-arduino17Required tool: arduino:arduinoOTA 1.3.0Option: Registers emulation modeATMEGA328 ✔ mode=onNone (ATMEGA4809) mode=offProgrammers: Id Namemedbg Onboard Atmel mEDBG (UNO WiFi Rev2)
スケッチの書き込み
ボードにコンパイルしたスケッチを書き込む。
シリアルポートを-p
オプションで指定する。
arduino-cli upload -b arduino:avr:uno -p /dev/ttyACM0
シリアルモニタ
arduino-cli
にはシリアルモニタ機能がない(追加される予定もない)ので、
ほかのツールを使う必要がある。
- Feature Request: Serial Monitor · Issue #876 · arduino/arduino-cli
- 機能提案はリジェクトされている(別のツールを使ってね)
screen
コマンドがよく使われるようだったので、これを使う。
Ubuntuの場合apt install screen
で導入できる。
/dev/ttyACM0の部分にはシリアルポート名を、115200の部分にはbaudrateを入れる。
screen /dev/ttyACM0 115200
閉じるにはCtrl+a k
を入力する。
プロキシ設定
- "board list" command doesn't follow proxy configuration · Issue #660 · arduino/arduino-cli
- how to use net proxy? · Issue #271 · arduino/arduino-pro-ide
arduino-cli
の通信にプロキシを設定するには、
コンフィグファイルを作成する必要がある。
arduino-cli config init
を実行すると
arduino-cli
の設定関係ディレクトリにarduino-cli.yml
が生成される。
私の環境では、~/.arduino15/arduino-cli.yml
が生成された。
これを開き、以下のようにプロキシ設定を追加する。
board_manager:additional_urls: [](略)network:proxy: http://proxy:port