Arduino CLIをMakefileで使うためのmsys+Visual Studio Codeの環境構築
この記事は、「Arduino UNO R4で始めるTOPPERS RTOS開発」で使ったArduinoのコマンドラインツールArduino CLI
をMakefile
から使うため、WindowsにmsysをインストールしてVisual Studio Code
で使えるようにする手順を説明する記事です。
ソフトのインストール
Arduino CLI
とVisual Studio Code
に付いては、こちらの記事でインストールされているものとします。
msys2
は次のリンクからダウンロードしてインストールします。
インストーラなので簡単ですが、インストール先のフォルダには注意が必要です。ASCII文字だけで構成されたフォルダのパスで短めのパスである必要があります。この記事では標準のC:\msys64
で説明していきます。
msys2はWindowsでUnixコマンドを扱えるようにする環境一式を扱うソフトウェアです。多数のコマンドはパッケージとして個別にインストールやアンインストール、アップデートが出来ます。
初期状態では、含まれるパッケージのそれぞれが最新状態とは限らないので、全体的なアップデートを行います。
インストールしたmsys2を実行します。種類がいくつかありますが「MSYS2 MSYS」を選択します。
user@mycomputer MSYS ~
$ pacman -Syuu
msys is up to date
:: Starting core system upgrade...
there is nothing to do
:: Starting full system upgrade...
there is nothing to do
次にmakeパッケージをインストールします。
user@mycomputer MSYS ~
$ pacman -S make
依存関係を解決しています...
衝突するパッケージがないか確認しています...
パッケージ (1) make-4.4.1-1
合計ダウンロード容量: 0.49 MiB
合計インストール容量: 1.61 MiB
最終的なアップグレード容量: 0.03 MiB
:: インストールを行いますか? [Y/n] y
:: パッケージを取得します...
make-4.4.1-1-x86_64 505.9 KiB 264 KiB/s 00:02 [#####################] 100%
(1/1) キーリングのキーを確認 [#####################] 100%
(1/1) パッケージの整合性をチェック [#####################] 100%
(1/1) パッケージファイルのロード [#####################] 100%
(1/1) ファイルの衝突をチェック [#####################] 100%
(1/1) 空き容量を確認 [#####################] 100%
:: パッケージの変更を処理しています...
(1/1) 更新 make [#####################] 100%
:: トランザクション後のフックを実行...
(1/1) Updating the info directory file...
ワークスペースの作成
Visual Studio Code
でmsys
を使うための設定を行いたいのですが、そのためにまずワークスペースフォルダを作成します。お好みの場所でよいのですがmsys2
を使うためパスが深くならない場所に作成します。
このフォルダにはmake
からarduino-cli
が使えるかを簡単に確認するために、スケッチ例をGitHubからダウンロードして展開します。
https://github.com/digiampietro/arduino-makefile
緑色のCode
ボタンを押して表示されるDownload ZIP
を選択して、コード一式をダウンロードし、ワークスペースに展開します。
次に、Arduino CLIをインストールします。といってもarduino-cli.exe
単体で動作するもので、ワークスペースフォルダにtools
というフォルダを作ってその中に展開します。
https://arduino.github.io/arduino-cli/0.35/installation/
準備が終わると下記のようにフォルダとファイルが配置されます。
Visual Studio Code
でこのフォルダを開きます。
Visual Studio Codeにmsysのbashをターミナルとして登録する
Visual Studio Code
でコマンドを実行するのに使うターミナルという領域があります。
ターミナルには初期状態で次のものが登録されています。
- PowerShell
- Git Bash
- Command Prompt
登録されているターミナルの種類は、プロファイルと呼ばれていて、ユーザごとに登録される設定となっています。
ここに、msys2
のbash
のプロファイルを登録します。登録すると他のワークスペースでも選択できるようになります。
ターミナルを開くにはメニューから「ターミナル」→「新しいターミナル」を選択するか、Ctrl + Shift + @
を押します。
ターミナル右上の+
ボタンの横の∨
を押してターミナル設定の構成
を選びます。
フィルタにprofiles
を追加して、Terminal > Integrated > Profiles: Windows
の.settings.jsonで編集
をクリックします。同じような名前がいくつかあるので間違えないよう確認してください。
ユーザー設定の.settings.json
ファイルが開かれますので、下記のMsys Bash
部分を追加してください。名前はMsys Bash
でなくても良いのですが、この記事ではこの名前で説明します。
"terminal.integrated.profiles.windows": {
"PowerShell": {
"source": "PowerShell",
"icon": "terminal-powershell"
},
"Command Prompt": {
"path": [
"${env:windir}\\Sysnative\\cmd.exe",
"${env:windir}\\System32\\cmd.exe"
],
"args": [],
"icon": "terminal-cmd"
},
"Git Bash": {
"source": "Git Bash"
},
"Msys Bash": {
"path": "C:\\msys64\\usr\\bin\\bash.exe",
"args": [
"--login",
"-i"
]
}
}
path
にmsys2のインストールしたパスを入力します。
フォントの都合で¥
は\
で表示されています。これはjson文字列のエスケープ文字なので、エスケープを打ち消すため\\
になっています。
args
のコマンドオプションも設定します。簡単に効果を説明すると、--login
は環境変数のPATH
にmsysのコマンドパスが設定されます。msysのmakeを使うのに必要です。-i
はインターラクトモードで起動する指定です。スクリプトファイルを実行するのではなく、ユーザーが対話的にコマンドを入力するモードにしたいので、このオプションを付けておきます。
ワークスペースの設定
Visual Studio Code
でF1
を押して基本設定:ワークスペース設定を開く
を選択します。
Terminal > Integrated > Default Profile: windows
を探します。フィルタにterminal default windows
を入力すると項目が絞り込まれます。
.vscode\settings.json
が作成されエディタで開かれます。
ワークスペースのデフォルトプロファイルに先ほど登録したMsys Bash
を設定します。
また、msys2のための環境構築を設定します。CHERE_INVOKING
とMSYS2_PATH_TYPE
、MSYSTEM
です。CHERE_INVOKING
は呼び出されたディレクトリをカレントディレクトリとして使う指定です。MSYS2_PATH_TYPE
はWindows環境変数PATHを引き継ぎます。MSYSTEM
はWindows向けのgcc環境MinGWを使用する場合はMINGW64
などを選択しますが、今回は使わないためMSYS2
と設定します。
さらに、arduino-cli
が見つかるようにパスPATH
を設定します。先ほど設定したとおり、ワークスペースフォルダにtools
とうフォルダを作ってその中に、arduino-cli
を配置したので、Visual Studio Code
の変数でワークスペースフォルダを示す${workspaceFolder}
を使って、指定しています。
ついでにarduino-cli
で使用する環境変数FQBN
を設定しておきます。ターゲットとしてArduino Uno R4を指定する値が入ります。
{
"terminal.integrated.defaultProfile.windows": "Msys Bash",
"terminal.integrated.env.windows": {
"PATH": "${workspaceFolder}\\tools",
"CHERE_INVOKING": "1",
"MSYS2_PATH_TYPE": "inherit",
"MSYSTEM": "MSYS2",
"FQBN": "arduino:renesas_uno:minima"
}
}
ターミナルがMsys Bashになりmakeが使えるか確認
Visual Studio Code
でショートカットキーCtrl + Shift + @
の入力や、メニューからターミナル
→新しいターミナル
を選択してターミナルを開きます。
下記のようにbash
が表示されれば成功です。
user@mycomputer MSYS2 /path/to/workspace
$
次にmakeにパスが通っているか確認します。
make –version↲
でバージョンが表示されれば成功です。
user@mycomputer MSYS2 /path/to/workspace
$ make --version
GNU Make 4.4.1
このプログラムは x86_64-pc-msys 用にビルドされました
Copyright (C) 1988-2023 Free Software Foundation, Inc.
ライセンス GPLv3+: GNU GPL バージョン 3 以降 <https://gnu.org/licenses/gpl.html>
これはフリーソフトウェアです: 自由に変更および配布できます.
法律の許す限り、 無保証 です.
.vscode\settings.json
に設定した環境変数が使えるようになっているかも確認してみます。
user@mycomputer MSYS2 /path/to/workspace
$ echo $FQBN
arduino:renesas_uno:minima
そして、arduino-cli
が使えるかも試してみます。
user@mycomputer MSYS2 /path/to/workspace
$ arduino-cli version
arduino-cli.exe Version: 0.34.2 Commit: 963c1a76 Date: 2023-09-11T10:05:41Z
ではいよいよblink-arduino
をmake
してみたいと思います。
user@mycomputer MSYS2 /path/to/workspace
$ cd blink-arduino
user@mycomputer MSYS2 /path/to/workspace/blink-arduino
$ make
FQBN is [arduino:renesas_uno:minima]
IOT_NAME is []
OTA_PORT is []
OTA_PASS is []
V is [1]
VFLAG is [-v]
MAKE_DIR is [/path/to/workspace/blink-arduino]
BUILD_DIR is [build/arduino.renesas_uno.minima]
SRC is [blink-arduino.ino]
HDRS is []
BIN is [build/arduino.renesas_uno.minima/blink-arduino.ino.bin]
SERIAL_DEV is [com3]
arduino-cli compile -b arduino:renesas_uno:minima -v --build-path build/arduino.renesas_uno.minima
FQBN: arduino:renesas_uno:minima
Using board 'minima' from platform in folder: C:\Users\user\AppData\Local\Arduino15\packages\arduino\hardware\renesas_uno\1.0.5
Using core 'arduino' from platform in folder: C:\Users\user\AppData\Local\Arduino15\packages\arduino\hardware\renesas_uno\1.0.5
Detecting libraries used...
(中略)
"C:\\Users\\user\\AppData\\Local\\Arduino15\\packages\\arduino\\tools\\arm-none-eabi-gcc\\7-2017q4/bin/arm-none-eabi-size" -A "D:\\path\\to\\workspace\\blink-arduino\\build\\arduino.renesas_uno.minima/blink-arduino.ino.elf"
最大262144バイトのフラッシュメモリのうち、スケッチが53712バイト(20%)を使っています。
最大32768バイトのRAMのうち、グローバル変数が4552バイト(13%)を使っていて、ローカル変数で28216バイト使うことができます。
Used platform Version Path
arduino:renesas_uno 1.0.5 C:\Users\user\AppData\Local\Arduino15\packages\arduino\hardware\renesas_uno\1.0.5
which: no arduino-manifest.pl in (/usr/local/bin:/usr/bin:/bin:/path/to/workspace/tools:/c/Python39:/c/Users/user/AppData/Local/Arduino15/packages/arduino/tools/arm-none-eabi-gcc/7-2017q4/bin:/c/Users/user/AppData/Local/Arduino15/packages/arduino/tools/openocd/0.11.0-arduino2/bin:/c/Users/user/AppData/Local/Arduino15/packages/arduino/tools/openocd/0.11.0-arduino2/share/openocd:/usr/bin/site_perl:/usr/bin/vendor_perl:/usr/bin/core_perl)
---> If you want to generate manifest.txt, listing used libraries and their versions,
---> please install arduino-manifest, see https://github.com/digiampietro/arduino-manifest
user@mycomputer MSYS2 /path/to/workspace/blink-arduino
$
これでArduinoのスケッチをVisual Studio Code
でmakeでビルドする環境が出来ました。TOPPERSなどビルドにmake
を使ったソフトも多いので、Arduinoスケッチからmake
を利用するアプリの作成に繋がるステップになればよいなと考えています。