
Arduino CLI
インストールおよび環境設定
Arduino CLI本体のインストール
Arduino CLIのインストールには、いろいろな方法があります。
ここでは、インストールスクリプトで入れる方法を書きます。
自分の環境(~/bin
)にインストールするのは簡単で、以下のようにコマンドを入れます。
$ curl -fsSL https://raw.githubusercontent.com/arduino/arduino-cli/master/install.sh | sh
インストールスクリプト(install.sh
)は自動的に機種判別を行い、必要なバイナリを落としてインストールします。
自分の環境(~/bin
)以外にインストールしたい場合は、最後のsh
にインストール先を環境変数BINDIR
で渡します。たとえば、~/local/bin
に入れたければ、最後のsh
を
BINDIR=~/local/bin sh
のようにして、
$ curl -fsSL https://raw.githubusercontent.com/arduino/arduino-cli/master/install.sh | BINDIR=~/local/bin sh
のように実行します。
さらに細かい使い方については、公式ドキュメント・インストール編をご覧下さい。
本体のインストールが出来たら、環境設定ファイルを生成します。
$ arduino-cli config init
これにより、~/.arduino15/
にarduino-cli.yaml
というファイルが生成されます。このファイルを編集することにより、Arduino CLIの実行環境を設定することができます。
コアのインストール
Arduinoは様々なハードウェア上で動いています。対応しているCPUは様々ですし、ボードも様々です。Arduinoを動かすためには、これらに対応した「コア」をインストールしなければなりません。
コアのIDを知る
初期状態のArduino CLI環境で現在使用できるコアの一覧は、
$ arduino-cli core search
とすることで得られます。search
の後にフィルタを指定することもできます。
実行すると、以下のような一覧が得られます。
$ arduino-cli core search
ID Version Name
arduino:avr 1.8.6 Arduino AVR Boards
arduino:esp32 2.0.13 Arduino ESP32 Boards
arduino:mbed_edge 4.0.10 Arduino Mbed OS Edge Boards
arduino:mbed_giga 4.0.10 Arduino Mbed OS Giga Boards
arduino:mbed_nano 4.0.10 Arduino Mbed OS Nano Boards
arduino:mbed_nicla 4.0.10 Arduino Mbed OS Nicla Boards
arduino:mbed_opta 4.0.10 Arduino Mbed OS Opta Boards
arduino:mbed_portenta 4.0.10 Arduino Mbed OS Portenta Boards
arduino:mbed_rp2040 4.0.10 Arduino Mbed OS RP2040 Boards
arduino:megaavr 1.8.8 Arduino megaAVR Boards
arduino:nrf52 1.0.2 Arduino nRF52 Boards
arduino:renesas_portenta 1.0.5 Arduino Renesas Portenta Boards
arduino:sam 1.6.12 Arduino SAM Boards (32-bits ARM Cortex-M3)
arduino:samd 1.8.13 Arduino SAMD Boards (32-bits ARM Cortex-M0+)
arduino:renesas_uno 1.0.5 Arduino UNO R4 Boards
Arrow:samd 2.1.0 Arrow Boards
atmel-avr-xminis:avr 0.6.0 Atmel AVR Xplained-minis
emoro:avr 3.2.2 EMORO 2560
esp32:esp32 2.0.11 esp32
industruino:samd 1.0.1 Industruino SAMD Boards (32-bits ARM Cortex-M0+)
Intel:arc32 2.0.6 Intel Curie Boards
Intel:i586 1.6.7+1.0 Intel i586 Boards
Intel:i686 1.6.7+1.0 Intel i686 Boards
littleBits:avr 1.0.0 littleBits Arduino AVR Modules
renesas:rl78g22_fpb 2.0.0 RL78/G22 Fast Prototyping Board
renesas:rl78g23_fpb_p64 2.0.0 RL78/G23-64p Fast Prototyping Board
Microsoft:win10 1.1.2 Windows 10 Iot Core
arduino:mbed 3.3.0 [DEPRECATED] [DEPRECATED - Please install standalone packages] Arduino Mbed OS Boards
$
この中に希望するアーキテクチャのものが存在すれば、それでコアのIDを知ることができます。
「Arduinoが対応しているはずなのにこの一覧にない」ものは、サードバーティー製のコアです。そのような場合は別途設定してやる必要があります。詳しくは、「サードパーティーのコアを使う場合」をご覧下さい。
コアをインストールする
コアのIDがわかれば、コアをインストールすることができます。
たとえば最初の例であれば、コアのIDはesp32:esp32
です。これをインストールするには、
$ arduino-cli core install esp32:esp32
そうすると、
$ arduino-cli core install esp32:esp32
Downloading packages...
esp32:xtensa-esp32-elf-gcc@esp-2021r2-patch5-8.4.0 downloaded
esp32:xtensa-esp32s2-elf-gcc@esp-2021r2-patch5-8.4.0 downloaded
(中略)
Configuring tool....
arduino:dfu-util@0.11.0-arduino5 installed
Installing platform esp32:esp32@2.0.11...
Configuring platform....
Platform esp32:esp32@2.0.11 installed
$
のように表示され、コアがインストールされます。
これで、このコアでサポートされるボードが利用可能になります。
FQBN
ArduinoはFQBNという文字列で、ハードウェアを識別します。
まず、自分のこれから使うハードウェアに対応したFQBNを知る必要があります。
Arduinoの対応しているハードウェアであれば、シリアルポートに接続した状態で
$ arduino-cli board list
と入力すると、以下のように接続ポートやFQBN, Coreの名前を教えてくれます。
Port Protocol Type Board Name FQBN Core
/dev/ttyACM0 serial Serial Port (USB) WiFiduinoV2 esp32:esp32:wifiduino32c3 esp32:esp32
/dev/ttyS9 serial Serial Port Unknown
この例では、USBポートにXIAO ESP32C3がつながっています。また、この例ではBoard Name
はWiFiduinoV2
でFBQN
はesp32:esp32:wifiduino32c3
であるということがわかります。ただし、これは間違いがあります。正しくはBoard Name
はXIAO ESP32C3
で、FQBN
はesp32:esp32:XIAO_ESP32C3
です。
arduino-cliが知らないボードがつながっている場合は、
$ arduino-cli board list
Port Protocol Type Board Name FQBN Core
/dev/ttyS9 serial Serial Port Unknown
/dev/ttyUSB0 serial Serial Port (USB) Unknown
/dev/ttyUSB1 serial Serial Port (USB) Unknown
$
というような表示になります。この例はMaix Bitをつないだ場合です。
ターゲットボードが接続されていない等の理由でboard list
で情報が取得できない場合や間違いがあるは別の方法でコアのIDとFQBNを知る必要があります。
FQBNを知る
arduino-cli board list
でFQBNを知ることが出来なかった場合は、サポート対象のボードの一覧から探すことができます。
公式を含む多くのドキュメントではboard listall
でサポート対象のボードを全件表示させる方法があると書かれています。
$ arduino-cli board listall
しかし、現在(2023年12月)この方法では「コアがインストール済みのボード」しか表示されません。コアがインストールされていない状態でlistall
をすると、
$ arduino-cli board listall
Board Name FQBN
$
と表示されるだけです。
なので、コアをインストールしてから、listall
を実行すると、
$ arduino-cli board listall
Board Name FQBN
AI Thinker ESP32-CAM esp32:esp32:esp32cam
ALKS ESP32 esp32:esp32:alksesp32
ATMegaZero ESP32-S2 esp32:esp32:atmegazero_esp32s2
Adafruit ESP32 Feather esp32:esp32:featheresp32
(中略)
unPhone 8 esp32:esp32:unphone8
unPhone 9 esp32:esp32:unphone9
$
のように表示されるようになります。
この中から自分の持っているボードを探してFQBNを得ることができます。
手順としては、
-
コアの名前を知る
調べるなり探すなりします。
-
コアをインストールする
arduino-cli core install <コア名>
-
ボード一覧を出してFQBNを知る
arduino-cli board listall
ということになります。
FQBNはしばしば使いますので、どこかにメモをしておきます。
サードパーティーのコアを使う場合
初期状態で
$ arduino-cli core search
としても自分の持っているボードのIDが表示されない場合はサードパーティーのコアを使う必要があります。
サードパーティーのコアやその情報がどこにあるかは、それぞのボードによって異なりますので、一般的な方法はありません。
ここでは、SiPEEDのMaixについてのインストールを例に説明します。
まず、MaixのボードのArduinoについては、
に情報があります。このドキュメントを見ると、ボードに対応したパッケージ情報のファイルは
http://dl.sipeed.com/MAIX/Maixduino/package_Maixduino_k210_index.json
であることがわかります。このファイルのことを、環境設定ファイル.arduino15/arduino-cli.yaml
に設定します。具体的には、冒頭にある
board_manager:
additional_urls: []
build_cache:
を
board_manager:
additional_urls:
- http://dl.sipeed.com/MAIX/Maixduino/package_Maixduino_k210_index.json
build_cache:
のように変更します。このadditional_urls
にパッケージ情報を記述したファイルのURLを追加して行きます。
このようにしてやると、
$ arduino-cli core search k210
としてやった時に、
$ arduino-cli core search k210
ID Version Name
Maixduino:k210 0.3.11 Maixduino(k210)
のように表示されるようになります(k210を入れなければ全てが出ます)。
これにより、k210用のコアがインストール可能になります。
ただし、サードパーティーのコアの場合、必ずしも全ての環境でコアがインストール可能とは限りません。このk210用のコアの場合、ARM64環境でコアをインストールしようとすると、
$ arduino-cli core install Maixduino:k210
Downloading packages...
Error during install: Error downloading tool Maixduino:riscv64-unknown-elf-gcc@8.2.0_20190409: no versions available for the current OS, try contacting support@sipeed.com
のようになってインストールができません。これは、riscv64用のtoolchainがコアのリポジトリに存在しないためです。
この問題の解決方法については別項で書こうと思いますが、今のところは諦めてAMD64環境をホスト環境にして回避して下さい。
ライブラリ
Arduinoには多くのライブラリが存在しています。標準的なものについては、コアをインストールする時について来ますが、それ以外のもので利用可能な状態で公開されていることがあります。
標準でない機能を使いたい場合、自分で作らなくても利用可能なライブラリが公開されているかも知れません。
公開されているライブラリも、公式リポジトリに登録されているものとそうでないものとがあります。このうち、公式リポジトリに登録されているものに関しては、arduino-cli
で簡単に検索およびインストールが可能となっています。
公式リポジトリにないライブラリについてはもう一手間かかりますが、これもarduino-cli
でインストールできます。
公式リポジトリにあるライブラリを検索する
公式リポジトリに存在するライブラリを検索するには、
$ aruduino-cli lib search キーワード
のようにします。
たとえば、
$ arduino-cli lib search SNMP
のようにすると、
$ arduino-cli lib search SNMP
Name: "SNMP"
Author: Patrick Lafarguette <patrick.lafarguette@gmail.com>
Maintainer: Patrick Lafarguette <patrick.lafarguette@gmail.com>
Sentence: An SNMP library to write SNMP agent or manager for Arduino boards.
Paragraph: SNMP getrequest, getnextrequest, getresponse, setrequest, trap, informrequest and snmpv2trap PDUs are supported.
Website: https://github.com/patricklaf/SNMP
Category: Communication
Architecture: *
Types: Contributed
Versions: [1.0.0, 1.1.0, 1.2.0, 1.3.0]
Provides includes: SNMP.h
Name: "SNMP Manager"
Author: Martin Rowan <martin@martinrowan.co.uk>
Maintainer: Martin Rowan <martin@martinrowan.co.uk>
Sentence: An SNMP Manager library to make SNMP requests to other SNMP enabled devices.
Paragraph: Supporting SNMP v1 and v2, SNMP requests can be sent (GetRequest) and their responses received (GetResponse) for various SNMP data types.
Website: https://github.com/shortbloke/Arduino_SNMP_Manager
Category: Communication
Architecture: *
Types: Contributed
Versions: [1.1.0, 1.1.1, 1.1.2, 1.1.3, 1.1.4, 1.1.5, 1.1.6, 1.1.7, 1.1.9, 1.1.10, 1.1.11, 1.1.12]
Provides includes: Arduino_SNMP_Manager.h
Name: "SNMP_Agent"
Author: Aidan Cyr <cyraidan@gmail.com>
Maintainer: Aidan Cyr <cyraidan@gmail.com>
Sentence: SNMP Agent: An fully compliant SNMPv2c Agent for esp32 for acting as an SNMP client device.
Paragraph: (Previously Arduino_SNMP) Can respond to SNMP GET and SET requests, and can send SNMP v1 or SNMP v2c TRAP and INFORM messages.
Website: https://github.com/0neblock/Arduino_SNMP
Category: Communication
Architecture: esp32, esp8266
Types: Contributed
Versions: [2.0.1, 2.0.2, 2.0.3, 2.1.0]
Provides includes: SNMP_Agent.h, SNMPTrap.h
$
のようにSNMPに関するライブラリを検索して一覧にしてくれます。
この例では、いろいろ試してみて検索結果が少なくなるキーワードで検索したのですが、たとえばよく使われがちのneopixelとかntpとかで検索すると、山のように出て来ます。そのくせ、たとえば「WebRTC」のようなキーワードだと1件もひっかかりません。つまり、Arduinoのサイブラリの現状を簡単に説明すると、「あるものは大量にあるが、ないものは全くない」という感じです。
大量に出て来るものに関して、どれを選べば良いか指針になりそうなものはありません。とは言え、使うためにはドキュメントがないと使えないわけで、そうなると検索結果の中にあるWebsiteを見ることになると思います。ドキュメントの内容を見ると使いやすいとか「元気なプロジェクト」かどうかわかることもありますし、多くの場合WebsiteはGitHubに置かれていることが多いので、そこでスターの数とかアクティビティを見て比較してみるのも良いと思います。
次の工程に必要なのは、Name:
のフィールドです。気に入ったライブラリのName:
を把握しておきます。
公式リポジトリにあるライブラリをインストールする
公式リポジトリにあるライブラリのインストールは簡単で、
$ arduino-cli lib install ライブラリ名
のようにします。このライブラリ名
は大文字小文字を区別しません。
では、例として検索で出て来たSNMP_Agent
をインストールしてみます。
SNMP_Agent
の説明は、こんな感じ
Name: "SNMP_Agent"
Author: Aidan Cyr <cyraidan@gmail.com>
Maintainer: Aidan Cyr <cyraidan@gmail.com>
Sentence: SNMP Agent: An fully compliant SNMPv2c Agent for esp32 for acting as an SNMP client device.
Paragraph: (Previously Arduino_SNMP) Can respond to SNMP GET and SET requests, and can send SNMP v1 or SNMP v2c TRAP and INFORM messages.
Website: https://github.com/0neblock/Arduino_SNMP
Category: Communication
Architecture: esp32, esp8266
Types: Contributed
Versions: [2.0.1, 2.0.2, 2.0.3, 2.1.0]
Provides includes: SNMP_Agent.h, SNMPTrap.h
これを入れるためには、以下のようにします。
$ arduino-cli lib install snmp_agent
ライブラリ名が小文字だけですが、前述のように大文字小文字を区別しませんので、これで問題ありません。
$ arduino-cli lib install snmp_agent
Downloading SNMP_Agent@2.1.0...
SNMP_Agent@2.1.0 downloaded
Installing SNMP_Agent@2.1.0...
Installed SNMP_Agent@2.1.0
こういった感じで入ってくれます。
このライブラリはWebsite:
を見ると https://github.com/0neblock/Arduino_SNMP にあることがわかります。サイトを開くと結構詳しいドキュメントがありますね。
上記の方法でインストールされるのはlatestつまり、最新版です。最新版以外のバージョンをインストールしたい場合は、ライブラリ名をバージョン番号で修飾します。
たとえばSNMP_Agent
のバージョン2.0.1をインストールしたい場合は、
$ arduino-cli lib install snmp_agent@2.0.1
のようにします。
公式リポジトリにないライブラリをインストールする
公式リポジトリにないライブラリを探すのは、通常のソフトウェアを探すのと同じような手間がかかります。つまり、Google等を駆使して探したり、GitHubを検索したりするということです。
GitHubに目的とするライブラリが発見できた場合は、
$ arduino-cli lib install --git-url GitHubのURL
のように指定するとインストールできます。
たとえば、NTPClient
をGitHubからインストールする場合は、
$ arduino-cli lib install --git-url https://github.com/arduino-libraries/NTPClient.git
のようにします。このようにすると、
$ arduino-cli lib install --git-url https://github.com/arduino-libraries/NTPClient.git
--git-url and --zip-path are disabled by default, for more information see: https://arduino.github.io/arduino-cli/0.34/configuration/#configuration-keys
怒られます。怒られる理由は示されているURLに以下のように説明があります。
-
library - configuration options relating to Arduino libraries.
- enable_unsafe_install - set to true to enable the use of the --git-url and --zip-file flags with arduino-cli lib install. These are considered “unsafe” installation methods because they allow installing files that have not passed through the Library Manager submission process.
これは何かと言えば、要するに公式リポジトリにないものは安全ではないので、デフォルト状態ではインストールできないようになっているということです。そこで、Arduino CLIの設定ファイル~/.arduino15/arduino-cli.yaml
を修正します。
具体的には、
library:
enable_unsafe_install: false
となっている箇所を、
library:
enable_unsafe_install: true
のように変更します。そうすると、
$ arduino-cli lib install --git-url https://github.com/arduino-libraries/NTPClient.git
--git-url and --zip-path flags allow installing untrusted files, use it at your own risk.
Enumerating objects: 102, done.
Counting objects: 100% (102/102), done.
Compressing objects: 100% (71/71), done.
Total 102 (delta 45), reused 58 (delta 22), pack-reused 0
Library installed
という感じでインストールできます。
GitHubではない場合は、zipで入手すると
$ arduino-cli lib install --zip-path ZIPへのpath
のように指示するとインストールできます。
ライブラリの環境について
ライブラリがインストールされて使えるようになるのは良いのですが、それがどこに置かれていることが気になったりしませんか?
オープンソースなソフトウェアはドキュメントが微妙だったりバグがあったりします。そういった時にソースコードにアクセスできると都合が良いのですが、これを一々探したりするのは結構面倒臭いですし、ものによっては簡単に発見できなかったりします。
幸い基本的にArduinoのライブラリはソースコードで取得されます。ですから、
ライブラリが利用可能 = ライブラリのソースがアクセスできる
と思って構いません。では、実体はどこにあるでしょうか?
それについては、~/.arduino15/arduino-cli.yaml
に書かれています。私の環境だと、中程付近に
directories:
data: /home/ogochan/.arduino15
downloads: /home/ogochan/.arduino15/staging
user: /home/ogochan/Arduino
というのがあります。/home/ogochan/
というのは私のホームディレクトリです。このuser:
と書かれているディレクトリ(/home/ogochan/Arduino)にlibraries
というサブディレクトリがあります。この下にライブラリ名のディレクトリがあって、その中にライブラリが納められています。