メモ:LovyanGFXとM5GFXとM5Unified

(1) ライブラリの関係

LovyanGFX
  • らびやん氏が開発したグラフィックライブラリ。
  • 多様なディスプレイをサポート。
  • ESP32以外のマイコンもサポート。(つまりM5Stack専用ではない)
  • 高速描画、日本語フォント対応、スプライト機能などが特長。
M5GFX
  • M5Stack公式のグラフィックライブラリ。
  • LovyanGFXを元にM5Stack製品用に特化している。
  • LovyanGFXのソースを多く流用しているが、LovyanGFXとは別物。 (LovyanGFXに依存はしない)
M5Unified
  • M5Stack全製品を共通APIで扱える統合ライブラリ。
  • グラフィックにはM5GFXを利用。(つまり、M5Unified は M5GFX に依存)
  • ディスプレイ以外に、ボタン・センサー・スピーカーなども統一的に扱える。

(2) M5GFXベースのプロジェクトをLovyanGFXベースに移植

M5GFXを使用したM5Stack用プロジェクトを、LavyanGFXを使用して他のマイコンに移植するには?

構造・初期化の違い
  • M5GFXは、M5Stack製品に特化されており、M5GFX display; display.begin() でハードに応じた設定が済む。
  • LovyanGFXは、LGFX_Deviceクラスを継承して、マイコンのピンアサインや通信方式を定義する必要がある。
    M5GFXのM5GFXクラスもLGFX_Deviceクラスを継承している。)
#include <M5GFX.h>
M5GFX display;
void setup() {
  display.begin();
  display.drawString("Hello M5Stack", 10, 10);
}

#include <LovyanGFX.hpp>

class LGFX_HOGE : public lgfx::LGFX_Device {
    …(中略)...
};
LGFX_HOGE display;

void setup() {
  display.begin();
  display.drawString("Hello HOGE", 10, 10);
}
APIの違い
  • 描画系APIはほぼ同じ。
  • スプライトは、 M5Canvas → LGFX_Sprite 。 (M5Canvas は LGFX_Sprite を継承している。)

(3) M5UnifiedベースのプロジェクトをLovyanGFXベースに移植

M5Unifiedを使用したM5Stack用プロジェクトを、LavyanGFXを使用して他のマイコンに移植するには?
(ただし、グラフィック処理のみ)

構造・初期化の違い
  • M5Unifiedでは、M5オブジェクトのメンバとして、M5GFXクラスのオブジェクト M5.Display がある。
  • auto cfg = M5.config(); M5.begin(cfg); で M5.Display も含めて初期化がなされる。
#include <M5Unified.h>

void setup() {
  auto cfg = M5.config();
  M5.begin(cfg);
  M5.Display.drawString("Hello M5Stack", 10, 10);
}