09/18 23:10 2021
01/03 14:22 2026
M5Stack Core2 for AWSを購入し、C++の素振りを始めました。VSCodeのPlatformIOプラグインであれば、そのまま補完や定義ジャンプが効くっぽかったのですが、俺はNeovimでやりたいんだ!ということで今回調査し、設定した内容をまとめます。
方針は以下の通り
※1 coc.nvim以外でもcclsに対応していれば、どのLSPクライアントを利用しても問題ないと思います ※2 後述するPlatformIO Core (CLI)に補完の定義ファイルを吐き出すオプションがあったため
coc.nvimの場合、rootPatternsで判定があるので無効化しなくても問題ないかもです..(未調査)
{ "dependencies": { - "coc-clangd": ">=0.15.1", "coc-css": ">=1.2.6", "coc-deno": ">=3.4.0", "coc-eslint": ">=1.4.5", "coc-flutter": ">=1.9.2", "coc-go": ">=0.13.3", "coc-html": ">=1.4.1", "coc-json": ">=1.3.4", "coc-pyright": ">=1.1.144", "coc-rls": ">=1.1.6", "coc-tsserver": ">=1.7.0", "coc-vimlsp": ">=0.12.2" } }
LSPのcclsをインストールします
brew install ccls
"languageserver": { "golang": { "command": "gopls", "rootPatterns": ["go.mod"], "filetypes": ["go"] }, + "ccls": { + "command": "ccls", + "filetypes": ["c", "cc", "cpp", "c++", "objc", "objcpp"], + "rootPatterns": [".ccls", "compile_commands.json", ".git/", ".hg/"], + "initializationOptions": { + "cache": { + "directory": "/tmp/ccls" + } + } + } + },
VSCodeのPlatformIOプラグインは、内部的にPlatformIO Core (CLI)を呼び出しています。故に、内部で呼び出しているコマンドさえ把握してしまえば、zsh上で再現が可能です。
brew install platformio
$ which platformio
/usr/local/bin/platformio
$ pio --version
PlatformIO Core, version 5.2.0
実行するとオプション一覧が出力されます
$ pio
Usage: pio [OPTIONS] COMMAND [ARGS]...
Options:
--version Show the version and exit.
-f, --force DEPRECATE
-c, --caller TEXT Caller ID (service)
--no-ansi Do not print ANSI control characters
-h, --help Show this message and exit.
Commands:
access Manage resource access
account Manage PlatformIO account
boards Embedded board explorer
check Static code analysis
ci Continuous integration
debug Unified debugger
device Device manager & serial/socket monitor
home GUI to manage PlatformIO
lib Library manager
org Manage organizations
package Package manager
platform Platform manager
project Project manager
remote Remote development
run Run project targets (build, upload, clean, etc.)
settings Manage system settings
system Miscellaneous system commands
team Manage organization teams
test Unit testing
update Update installed platforms, packages and libraries
upgrade Upgrade PlatformIO to the latest version
作成するプロジェクトの構成は下記となります。(frameworkがespidf版は別章で行います)
| 設定 | 値 |
|---|---|
| 製品名 | M5Stack Core2 for AWS |
| 開発ボード | m5stack-core2 |
| PlatformIO Core (CLI)のバージョン | 5.2.0 |
| framework | arduino |
プロジェクト名は、m5stack-sampleをとします。下記のコマンドで、プロジェクトファイルが一式生成されます。
mkdir m5stack-sample
cd m5stack-sample
pio project init \
--board m5stack-core2 \
--ide vim
$ tree . ├── include │ └── README ├── lib │ └── README ├── platformio.ini ├── src └── test └── README
補足
--ide vimオプションをつけることで、リポジトリルートLSP(ccls)の設定ファイル.cclsファイルが生成M5Stack Core2を最低限動かすのに必要な2つのライブラリを導入します
pio lib install M5Core2
pio lib install LovyanGFX
#include <M5Core2.h> // the setup routine runs once when M5Stack starts up void setup(){ // Initialize the M5Stack object M5.begin(); // LCD display M5.Lcd.print("Hello M5Stack"); } // the loop routine runs over and over again forever void loop() { }
補完

定義ジャンプ

upload_portとmonitor_speedの設定を追記
; PlatformIO Project Configuration File ; ; Build options: build flags, source filter ; Upload options: custom upload port, speed and extra flags ; Library options: dependencies, extra library storages ; Advanced options: extra scripting ; ; Please visit documentation for the other options and examples ; https://docs.platformio.org/page/projectconf.html [env:m5stack-core2] platform = espressif32 board = m5stack-core2 framework = arduino lib_deps = m5stack/M5Core2@^0.0.6 lovyan03/LovyanGFX@^0.4.2 + upload_port = /dev/cu.SLAB_USBtoUART + monitor_speed = 115200
PlatformIO Core (CLI)の各種コマンドをMakefileにまとめます。対応表は下記の通り。
| コマンド | 説明 | Makefile |
|---|---|---|
| pio lib install | ライブラリの初期化 | make install |
| pio run | ファームのビルド | make build |
| pio run --target upload | ビルド+M5Stack Core2へファームを書き込み | make uplaod |
| pio device monitor -p /dev/cu.SLAB_USBtoUART | ビルド+書き込み+ポート監視 デバックする際に利用 | make watch |
| pio device list | ポート一覧出力 | make device-list |
install: pio lib install build: pio run upload: pio run --target upload watch: pio device monitor -p /dev/cu.SLAB_USBtoUART device-list: pio device list
make uploadもしくはmake watchを実行し、M5Stack Core2のディスプレイに、Hello M5Stackと表示されたら成功です!
作成するプロジェクトの構成は下記です。前回の構成との差異のみ記載
| 設定 | 値 |
|---|---|
| framework | espidf |
プロジェクト名は、m5stack-espidf-sampleをとします。下記のコマンドで、プロジェクトファイルが一式生成されます。
mkdir m5stack-espidf-sample
cd m5stack-espidf-sample
pio init \
--board=m5stack-core2 \
--project-option="framework=espidf" \
--ide vim
platformio.iniファイルを確認すると、frameworkがespidfになっていることが確認できます。
$ tree . ├── CMakeLists.txt ├── include │ └── README ├── lib │ └── README ├── platformio.ini ├── sdkconfig ├── src │ ├── CMakeLists.txt │ └── main.c └── test └── README
CMakeLists.txtsrc/CMakeLists.txtsrc/main.cplatformio.iniに設定を追記と同様の設定を行います
#include "esp_log.h" static const char *TAG = "Main"; void app_main() { ESP_LOGI(TAG, "Hello World."); }
pio device monitor -p /dev/cu.SLAB_USBtoUART
出力が確認出来ました。

PlatformIO Core (CLI)が非常によく出来ており、Neovimで快適に開発が進められそうで良かったです。これから色々嵌る可能性はありますが、とりあえずHello WorldまでNeovim開発出来て一安心です。
コマンドラインでArduino開発 : vim + platformio Visual Studio Code + PlatformIO 環境で M5Stack Core2 for AWS でHello Worldしてみました
C++のLSPは、clangdというツールです。clangdをインストールするため、brewでllvmをインストールします。
brew install llvm
※ ネットワーク品質やMacの状態にもかなり左右されますので参考程度です
llvmのパスを通し、clangdが実行できたら完了です
export PATH="/usr/local/opt/llvm/bin:$PATH"
LSPにはcoc.nvimを利用しているため、coc-clangdを導入します
プラグインをインストールします
:CocInstall coc-clangd
設定ファイルにも記載されていることを確認します
{ "dependencies": { + "coc-clangd": ">=0.15.1", "coc-css": ">=1.2.6", "coc-deno": ">=3.4.0", "coc-eslint": ">=1.4.5", "coc-flutter": ">=1.9.2", "coc-go": ">=0.13.3", "coc-html": ">=1.4.1", "coc-json": ">=1.3.4", "coc-pyright": ">=1.1.144", "coc-rls": ">=1.1.6", "coc-tsserver": ">=1.7.0", "coc-vimlsp": ">=0.12.2" } }
This site uses Google Analytics.