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を利用するアプリの作成に繋がるステップになればよいなと考えています。







