久しぶりに、以前作成した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
対応バージョンの目安:
| ESP32 Arduino Core | PlatformIO platform | 状態 |
|---|---|---|
| 3.0.x | 7.x 系 | ❌ M5Core2 非対応(GPIO エラー) |
| 2.0.14 | 6.4.0 | ✅ 安定動作 |
方法 2:M5Core2 ライブラリを古い安定版に固定する
Qiita でも M5Core2 v0.1.8 が安定版 と報告されていますので、必要であればM5Core2 ライブラリもバージョンを指定します。一応、最新版でもコンパイルは通りました。
lib_deps =
m5stack/M5Core2@0.1.8
まとめ
| 問題 | 原因 | 解決策 |
|---|---|---|
'GPIO' was not declared in this scope | ESP32 Arduino Core 3.x と M5Core2 ライブラリの非互換 | ESP32 Core を 2.x に戻す / M5Core2 を安定版に固定 |


