LoginSignup
24
16

PlatformIO M5Stack開発の現状

Last updated at Posted at 2020-12-13

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.iniの例
[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を追加します。

platformio.ini
[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リポジトリを指定します。

platformio.ini
[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リポジトリを指定します。

platformio.ini
[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は本当に何も迷うことがないです。

platformio.ini
[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本体に取り込まれたそうです
main.cpp
#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ブランチを直接指定する必要がありましたが、
無事に最新のリリースで対応されたそうです。

platformio.ini
[env:m5stack-core2]
platform = espressif32
board = m5stack-fire
framework = arduino
monitor_speed = 115200
lib_deps = 
  https://github.com/m5stack/M5EPD.git
  lovyan03/LovyanGFX
main.cpp
#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のリプライでお知らせください。

24
16
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
24
16