2025/05/25 電子書籍「Markdown記法大全+Pandoc変換マスター: 初心者から脱却!HTML・PDF・電子書籍を自在に出力する方法」を出版

M5Stack Core2 のコンパイルエラー

M5Stack

久しぶりに、以前作成したM5Stack Core2向けのPlatformIO用シンプルなプロジェクトをコンパイルしたところ、コンパイルエラーが発生してしまいました。そこで、その原因と対処方法について、備忘録として記事にまとめました。

このプロジェクトは、M5UnifiedライブラリではなくM5Core2ライブラリを使用したプロジェクトです。

エラーの内容

いくつかのエラーが発生しましたが、以下のようなエラーが発生しました。

エラー1

‘uint8_t’ が、name a typeでないというエラーで、このエラーは、一応、”stdint.h”をインクルードすることで解決しました。

error: 'uint8_t' in namespace 'std' does not name a type

エラー2

”GPIO”という名前の変数、関数、または定義が現在のコードの場所(スコープ)で定義されていないというエラーが発生していました。

error: 'GPIO' was not declared in this scope

エラーの原因

調査した結果、上記の”GPIO”のエラーは、M5Core2 ライブラリが ESP32 ボード定義 v3.x 系と非互換 のために発生する既知の問題のようです。 ESP32 ボード定義を 2.0.14 などの 2.x 系へ戻すことで解決するとのことです。

M5Core2 ライブラリ内部の In_eSPI.h では、 ESP32 の 低レベル GPIO レジスタ (GPIO.out_w1tcなど) を直接参照していますが、 ESP32 Arduino Core 3.0.0 以降 では GPIO レジスタの扱いが変更され、旧 API が削除されたため、 コンパイル時に GPIO が見つからずエラーとなるようです。

解決方法

方法 1:ESP32 ボード定義を 2.x 系に固定する(推奨)

ESP32 ボード定義を 2.x 系に固定し、ESP32 Arduino Coreのバージョン2系を使用します。

platformio.ini に以下を追加:

[env:m5stack-core2]
platform = espressif32@6.4.0   ; ESP32 Arduino Core 2.0.14 相当
board = m5stack-core2
framework = arduino

platformio.ini の記述で、@以下でライブラリのバージョンを指定することができます。

Version Requirements

対応バージョンの目安:

ESP32 Arduino CorePlatformIO platform状態
3.0.x7.x 系❌ M5Core2 非対応(GPIO エラー)
2.0.146.4.0✅ 安定動作

方法 2:M5Core2 ライブラリを古い安定版に固定する

Qiita でも M5Core2 v0.1.8 が安定版 と報告されていますので、必要であればM5Core2 ライブラリもバージョンを指定します。一応、最新版でもコンパイルは通りました。

lib_deps =
    m5stack/M5Core2@0.1.8

まとめ

問題原因解決策
'GPIO' was not declared in this scopeESP32 Arduino Core 3.x と M5Core2 ライブラリの非互換ESP32 Core を 2.x に戻す / M5Core2 を安定版に固定

タイトルとURLをコピーしました