2023/10/09追記
この記事は2年以上前に書かれています!
現在はM5Unifiedを使用するのが便利みたいです。
下記の公式ガイドをご確認ください。
Visual Studio Codeを用いたM5Unifiedの導入方法
https://docs.m5stack.com/ja/quick_start/m5unified/intro_vscode
以下、2年以上前に書いた内容です。
私が初めてM5Stackを触ったのは2019年4月のことでした。
あれからハードウェアではM5Stickシリーズを始めとした新製品が登場し、
Arduino IDEでの開発環境にもいくつかの変化がおこりました。
初代M5Stackに比べて他のM5Stack製品は
PlatformIO対応が完全な形ではないようですので、
現状と、開発する際のplatformio.ini定義をまとめてみました。
また、PlatformIOでLovyanGFXを用いた開発も試してみます。
ざっくり
- PlatformIO便利
- 最近M5Stack公式もPlatformIOを使い始めた
- 最近M5Stack Grayのボード定義が追加された
- M5Stack Core2やM5Paperを使う時はGitリポジトリを直接指定する
- LovyanGFXは悩むことなく導入できる
PlatformIO とは
組み込み開発を行うことができる開発環境およびVisual Studio Code用プラグインです。
Arduinoの開発をArduino IDEを用いずに行うことができます。
最近はM5PaperのFactory TestにPlatformIOが使われており、
もしかしたらM5Stack公式としてもこれからPlatformIOを取り入れていく予定なのかもしれません。
拙作のCapsuleChordもPlatformIOでファームウェアを開発しています。
PlatformIOのメリット
グローバル環境に依存しない使い方ができる
Arduino IDEではライブラリやボード定義をグローバルにインストールしますが、
PlatformIOではプロジェクト単位でもライブラリをインストールすることができます。
これにより、プロジェクトごとに異なるバージョンのライブラリを用いる、ということもできます。
これを実現するために、
PlatformIOではplatformio.ini
という定義ファイルを書きます。
npmで言うところのpackage.json
みたいなものです。
[platformio]
default_envs = m5stack-fire
[env:m5stack-fire]
platform = espressif32
board = m5stack-fire
framework = arduino
lib_deps =
m5stack/M5Stack ;PlatformIOに登録されたパッケージ名を指定
https://github.com/lovyan03/LovyanGFX.git#develop ;Gitリポジトリを直接指定することもできる
書き込みやすい & シリアルモニタしやすい
ハードウェアを接続した後に書き込みボタンを押すだけで書き込むことができ、手軽です。
ボードやシリアルポートを切り替える必要はほとんどありません。
PlatformIOのデメリット
上に書かれた関数から下に書かれた関数を呼び出せない
最後にデメリットですが、
PlatformIOでは多くのC++環境と同様に、
上に書かれた関数から下に書かれた関数を呼び出せません。
Arduino IDEでは関数を記述する順番が関係ないので、
移行の際は戸惑うかもしれません。
VSCodeがちょっと重くなる
PlatformIO以外で頻繁にVisualStudioを用いられる方は
PlatformIOをグローバルで無効にし、
Workspace単位で有効にする運用にしてもいいかもしれないです。
初代M5StackとPlatformIO
初代M5Stack (M5Stack Basic/Gray/Fire) 向けにPlatformIOを用いる場合は、
boardにm5stack-core-esp32
m5stack-grey
m5stack-fire
のいずれかを指定します。
lib_depsにはm5stack/M5Stack
を追加します。
[env:m5stack-fire]
platform = espressif32
board = m5stack-fire
framework = arduino
monitor_speed = 115200
lib_deps =
m5stack/M5Stack
CapsuleChordのplatformio.ini ではこれSD-Updaterを追加したり、OTAに対応させたりしています。
ちょっと前はM5Stack Gray向けであってもm5stack-fire
を指定していましたが、
最近m5stack-grey
が追加されたようです。
(製品名はGrayですが、boardで指定する文字列はgreyっぽいです…)
M5Stack Core2とPlatformIO
Board、Library共にM5Stack Core2用の物はないため、
Boardはm5stack-fire
で代用し、LibraryはGitリポジトリを指定します。
[env:m5stack-core2]
platform = espressif32
board = m5stack-fire
framework = arduino
monitor_speed = 115200
lib_deps =
https://github.com/m5stack/M5Core2.git
M5PaperとPlatformIO
Board、Library共にM5Paper用の物はないため、
Boardはm5stack-fire
で代用し、LibraryはGitリポジトリを指定します。
[env:m5stack-core2]
platform = espressif32
board = m5stack-fire
framework = arduino
monitor_speed = 115200
lib_deps =
https://github.com/m5stack/M5EPD.git
LovyanGFXとPlatformIO
M5Stack開発を今から行うならやっぱりLovyanGFXは試したいですよね。
本当はPlatformIOからLovyanGFXを使う時にハマったことをメインに記事を書こうと思っていたんですが、
何の問題もなく使えました…!
LovyanGFXとCore2とPlatformIO
Core2は本当に何も迷うことがないです。
[env:m5stack-core2]
platform = espressif32
board = m5stack-fire
framework = arduino
monitor_speed = 115200
lib_deps =
https://github.com/m5stack/M5Core2.git
lovyan03/LovyanGFX
;https://github.com/tanakamasayuki/efont.git ; v0.3.0でLGFX本体に取り込まれたそうです
#include <M5Core2.h>
#define LGFX_M5STACK_CORE2
#include <efontEnableJa.h>
#include <efontFontData.h>
#include <LovyanGFX.hpp>
static LGFX lcd;
void setup() {
M5.begin(true, true, true, true);
lcd.init();
lcd.setFont(&fonts::lgfxJapanGothic_40);
lcd.println("Hello World");
}
void loop() {}
LovyanGFXとM5PaperとPlatformIO
M5Paperに関しては少し前までは
developブランチを直接指定する必要がありましたが、
無事に最新のリリースで対応されたそうです。
[env:m5stack-core2]
platform = espressif32
board = m5stack-fire
framework = arduino
monitor_speed = 115200
lib_deps =
https://github.com/m5stack/M5EPD.git
lovyan03/LovyanGFX
#include <M5EPD.h>
#define LGFX_M5PAPER
#include <efontEnableJa.h>
#include <efontFontData.h>
#include <LovyanGFX.hpp>
static LGFX gfx;
void setup() {
M5.begin(true, true, true, true);
gfx.init();
gfx.setFont(&fonts::lgfxJapanGothic_40);
gfx.println("Hello World");
}
void loop() {}
あとで書きたい: LGFXボード自動判別機能とPlatformIO
間違いやより良い方法などありましたら
ぜひコメントかTwitterのリプライでお知らせください。