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

関連