M5Stack Core2は、ESP32と2.0インチのタッチ液晶、リチウムバッテリー、電源管理IC(PMIC)を54mm角のケースに収めたIoT開発キットです。この記事では、バッテリーの容量、どれくらい持つか、何ができるかに答えます。容量と電源の仕様は版によって違い、持ち時間は使い方で大きく変わります。2026年4月に現行のv1.3が発売され、v1.1とは電源管理ICが別物になりました。この記事では、公式ドキュメントの仕様表と、Arduino向けライブラリM5Unified 0.2.26のソースを根拠に、バッテリーと電源まわりを版ごとに整理します。M5Stackシリーズ全体の種類や選び方はM5Stackとは?種類・選び方とできることで比較しています。
まとめ:M5Stack Core2のバッテリーと電源の要点
- 内蔵バッテリーは現行の全版で500mAh。初代は2023年10月の変更までは390mAhで、古い個体はこちらです。
- 電源管理ICは版で違う。初代とv1.3はAXP192、v1.1だけがAXP2101+電流計INA3221。旧ファームがv1.1で動かない原因はここにあります。
- 電源ボタンは短押しで起動、長押しでオフ。長押しの秒数は初代が6秒、v1.1が4秒です。
- 駆動時間は公表されていない。公式の電流値に仮定を置いて計算すると約2.5時間で、長く動かすならスリープ制御かUSB給電が前提です。M5GO Bottom2 V1.3(1,892円)は電池ベースの交換品で、現行の個体では容量は増えません。
- いま買えるのはv1.3(8,129円)とCore2 for AWS v1.3(9,438円)。v1.1は生産終了です(スイッチサイエンス、2026年10月19日時点・税込)。
M5Stack Core2とは|ESP32搭載の第2世代コア
Core2は、初代M5Stack Basicの後継として2020年6月に発売された第2世代のコアです。Basicからの大きな変更は、物理ボタン3個を静電容量式タッチパネルの仮想ボタンに置き換えたことと、電源管理ICをBasicのIP5306からAXP192に変え、各電源系統をプログラムから個別に制御できるようにしたことです。画面下の3つの丸印が、その仮想ボタンです。
現在のラインアップは、M5Stack Core2 v1.3(K010-V13・8,129円)と、暗号チップATECC608B入りのベースを組み合わせたCore2 for AWS v1.3(9,438円)の2つです。旧Core2 for AWSは2026年4月にv1.3へ置き換わっており、「提供終了」ではありません。AWS側の仕組みはAWS IoT Coreの機能と接続方法にまとめています。ESP32-S3を積む後継のCoreS3シリーズとの比較は、上のM5Stack総合記事で扱っています。
M5Stack Core2のハードウェア仕様(ESP32・メモリ・ディスプレイ・センサー)
v1.3の公式仕様表の主要項目です。版で違う項目(PMIC・IMU・LED・RTC電池)は後の版比較で扱います。
| 項目 | Core2 v1.3の仕様 |
|---|---|
| SoC | ESP32-D0WDQ6-V3(デュアルコア240MHz) |
| Flash/PSRAM | 16MB/8MB |
| ディスプレイ | 2.0インチIPS・320×240 |
| 液晶コントローラ | ILI9342C/ILI9342E |
| タッチIC | FT6336U(静電容量式) |
| IMU | BMI270(6軸) |
| マイク/アンプ | SPM1423/NS4168(スピーカー1W) |
| RTC | BM8563 |
| PMU | AXP192 |
| バッテリー | 3.7V・500mAh |
| 入力 | USB Type-C・5V/500mA |
| 外形/重量 | 54×54×16.5mm/58.8g |
ESP32とメモリ(16MB Flash・8MB PSRAM)
SoCはESP32-D0WDQ6-V3で、2.4GHzのWi-FiとBluetoothを内蔵します。PSRAMは8MBで、320×240・16ビット色の画面1枚分のバッファ(320×240×2バイト=約150KB)を複数枚確保できます。ESP32を載せた他社ボードとの違いはLILYGOの製品と選び方が参考になります。
タッチ液晶の仕様とILI9342Eへの変更
320×240の液晶にFT6336Uのタッチを重ね、画面下の3領域をボタンA・B・Cとして扱います。2026年8月7日の出荷分から液晶コントローラがILI9342Eに変わり、公式はM5GFX 0.2.27以上でビルドすることを求めています(Core2の全版のページに同じ変更履歴があります)。古いライブラリでビルドしたファームを新しい個体に書き込んで画面が出ない場合は、原因の候補としてまずM5GFXの版を確認してください。2026年10月時点の最新はM5GFX 0.2.33です。
内蔵センサー・音声機能とベースを外したときの制約
6軸IMU(v1.3はBMI270)、PDMマイク、1Wスピーカー、RTC(BM8563)、振動モーターを内蔵します。IMUとマイクは本体底面のバッテリーベース側にある小基板に載っているため、ベースを外すとIMUとマイクも無くなる点に注意が要ります。
M5Stack Core2のバッテリーと電源管理
Core2の電源は、底面ベースの内蔵電池、PMIC、USB Type-Cの給電の3つで成り立っており、どれも版によって仕様が少しずつ違います。
内蔵バッテリー容量:500mAh、2023年10月の変更前の初代は390mAh
現行の公式仕様表では、初代・v1.1・v1.3のいずれも3.7V・500mAhです。初代の公式ページの変更履歴には「2023.10 Lithium battery capacity changed from 390mAh to 500mAh」とあり、この変更より前に出荷された初代は390mAhです。中古品は製造時期だけで決めつけず、底面ベースの電池の表記で確認してください。「無印は390mAh、v1.1以降は500mAh」という説明は、2023年10月以降の初代を取りこぼしています。
電源ボタンの操作と版ごとの長押し秒数
電源ボタンは本体の左側面にあります。短押しで起動し、長押しで電源が切れます。長押しの秒数は版で違い、初代は6秒、v1.1は4秒です。v1.3の公式ページは「長押し」とだけ書いており、販売店のスイッチサイエンスは6秒と記載しています。v1.3は初代と同じAXP192なので、6秒で切れなければ押し続けてください。底面のRSTボタンは再起動だけで、電源は切れません。
充電と外部電源供給(USB Type-C)
充電と給電はUSB Type-C(5V・500mA)から行い、USBを挿している間は充電しながら動作します。初代とv1.3の公式仕様表の充電パラメータは、充電電流0.219A、満充電後の電源オフ時0.055A、電源オン時0.147Aです(v1.1のページにはこの3値の記載がありません)。据置で常時USB給電するなら、バッテリー残量を気にする必要はありません。モバイルバッテリーからの給電もできますが、消費電流が小さい製品は自動で給電を止めることがあり、スリープ中に電源が落ちる原因になります。
駆動時間の目安と計算の前提
M5Stackは連続駆動時間を公表していません。仕様表の「満充電時(電源オン)0.147A」は測定箇所や負荷条件が書かれていないため、ここでは5V入力側の電流と仮定して計算します。電力は約0.74Wで、これを3.7Vの電池でまかなうと約0.2A、500mAhなら約2.5時間という計算になります。変換損失・電池の劣化・負荷の変動を含まない理想化した数字で、実際の駆動時間を保証する値ではありません。Wi-Fiで送信を続ける、画面を最大輝度にする、スピーカーを鳴らすといった使い方では消費が増えます。必要な稼働時間が決まっているなら、USBを外した状態で次章のgetBatteryCurrent()を動作の1周期ぶん記録し、放電電流(負の値)の絶対値の平均(mA)で容量(mAh)を割って見積もってください。
M5GO Bottom2 V1.3への交換とモジュール積層の制約
Core2の内蔵電池は、底面のバッテリーベースに入っています。Core2専用のM5GO Bottom2 V1.3(1,892円・2026年9月28日発売)は、このベースと付け替える交換品です。電池は500mAhなので、500mAhの個体では容量は変わらず、増えるのは390mAhの初代から付け替える場合(110mAh増)だけです。付け替える価値は容量ではなく、RGB LED(SK6812)10個、Grove互換のポート2つ、底面ポゴピンによるチャージベースでの充電が加わる点にあります。BMI270とマイク(LMD4020)も載っています。旧M5GO Bottom2(IMUはMPU6886)は在庫限りです。長時間の運用は、ベースの交換ではなくUSB給電かスリープ制御で組み立てます。
注意点は積み重ねです。公式は「Core2の振動モーターはBaseシリーズのベースと構造的に干渉する」として、Baseシリーズの機能ベースと重ねないよう求めています。Core2にモジュールを積むときは本体の電池ベースを外す必要があり、電池・IMU・マイクを残したいならM5GO Bottom2を使う、というのがメーカーの案内です。
電源が入らない・すぐ切れるときの対処
- 電源が入らない:電池が空になっている場合があるので、USB Type-Cでしばらく充電してから左側の電源ボタンを短押しします。緑(v1.1は青)の電源LEDが点かなければ、データ通信と給電に対応したケーブルか、別のUSBポートに替えて給電経路を確かめます。
- v1.1で旧ファームが起動しない:PMICがAXP2101に変わったため、AXP192前提でビルドしたバイナリは動かないことがあります。M5Unifiedか、M5Core2ライブラリ0.1.8以降で作り直します。
- 新しい個体で画面が表示されない:2026年8月以降の個体は液晶がILI9342Eの場合があり、古いM5GFXでビルドしたファームでは表示されないことがあります。M5GFX 0.2.27以上でビルドし直して切り分けます。
- すぐ電池が切れる:画面の常時点灯やWi-Fiの常時接続のほか、電池の劣化も原因になります。次章の方法で放電電流と満充電時の電圧を測り、消費が大きければスリープを入れ、電圧が上がりきらなければ電池ベースの交換を考えます。
M5Unifiedによるバッテリー残量・電圧・充電状態の取得
Arduino環境では、全モデル共通ライブラリのM5Unified(2026年10月13日公開の0.2.26が最新)が版を自動判別します。起動時にまずAXP192を探し、応答が無ければAXP2101(v1.1)として初期化する作りなので、同じスケッチが全版で動きます。ただし、読める値の中身は版で違います。以下はタグ0.2.26のPower_Class.inlで確認した内容です。
版ごとに違う残量・電流の求め方
| API | 初代・v1.3(AXP192) | v1.1(AXP2101+INA3221) |
|---|---|---|
| getBatteryLevel() | 電圧からの直線換算 | PMICの残量値 |
| getBatteryCurrent() | AXP192の充放電電流 | INA3221の電池側電流 |
AXP192機の残量(%)は、電池電圧から「(電圧mV-3300)×100÷800」で求めています。3.3V以下が0%、4.1V以上が100%になる単純な換算で、電流を積算する残量計ではありません。電圧で決まるので、Wi-Fi送信などで負荷が増えた瞬間に%が下がり、負荷が消えると戻ります。%も電圧も同じ値の言い換えなので、どちらを使っても負荷による揺れは残ります。電池切れの前にデータ保存などの終了処理を走らせたいなら、負荷をかけた状態で電圧を記録し、終了処理が間に合う電圧をしきい値にします。
また、M5UnifiedはAXP192機の初期化で充電電流を390mAに設定しており、ソースのコメントは「Core2 battery = 390mAh」のままです。500mAhのv1.3でも充電電流の上限設定は390mAのままなので、変えたい場合はM5.Power.setChargeCurrent()で変えられます。電池の許容電流を超えない範囲で使ってください。
電池モニターのスケッチ(arduino-cliでビルド確認済み)
残量・電圧・電流・充電状態とPMICの種類を1秒ごとに表示し、仮想ボタンAで60秒のディープスリープに入るスケッチです。ボタンの取りこぼしを防ぐため、M5.update()は10ミリ秒ごとに回し、表示だけを1秒ごとに更新しています。充電中でなければ「Not charging」と出ますが、USB接続で満充電のときも同じ表示になるので、給電元の判定には使えません。arduino-cli 1.5.1、esp32ボードパッケージ3.3.12(ボード指定 esp32:esp32:m5stack_core2)、M5Unified 0.2.26、M5GFX 0.2.33でコンパイルが通ることを確認しています(実機への書き込みと電流の実測はしていません)。
#include <M5Unified.h>
void setup() {
auto cfg = M5.config();
M5.begin(cfg);
M5.Display.setTextSize(2);
}
void loop() {
M5.update();
if (M5.BtnA.wasPressed()) {
M5.Power.deepSleep(60ULL * 1000 * 1000);
}
static uint32_t prev = 0;
if (millis() - prev < 1000) {
delay(10);
return;
}
prev = millis();
int32_t level = M5.Power.getBatteryLevel();
int16_t mv = M5.Power.getBatteryVoltage();
int32_t ma = M5.Power.getBatteryCurrent();
bool charging = (M5.Power.isCharging() == m5::Power_Class::is_charging_t::is_charging);
const char* pmic = (M5.Power.getType() == m5::Power_Class::pmic_t::pmic_axp2101) ? "AXP2101" : "AXP192";
M5.Display.startWrite();
M5.Display.setCursor(0, 0);
M5.Display.printf("PMIC %s\n", pmic);
M5.Display.printf("Level %3d %%\n", (int)level);
M5.Display.printf("Volt %4d mV\n", mv);
M5.Display.printf("Curr %4d mA\n", (int)ma);
M5.Display.printf("%s \n", charging ? "Charging" : "Not charging");
M5.Display.endWrite();
}
getBatteryCurrent()はAXP192機では充電中が正、放電中が負の値になります。USBを抜いた状態で画面の明るさやWi-Fiの有無を変えながら電流を見ると、どの処理が電池を食っているかがわかります。ビルドや書き込みをコマンドラインやCIで回すならarduino-cliの使い方の手順がそのまま使えます。
deepSleepとtimerSleepの違いと使い分け
M5UnifiedにはlightSleep()もありますが、電池を持たせる目的で比べるのは次の2つです。
M5.Power.deepSleep(マイクロ秒):ESP32のディープスリープです。画面は自動で消され、指定時間かタッチパネルの割り込み(GPIO39)で起きます。起きるとプログラムはsetup()から再開します。画面タッチで復帰させたい端末向けです。M5.Power.timerSleep(秒):RTCにアラームを設定してから、PMICで電源そのものを切ります。指定時間にRTCが電源を入れ直します(M5UnifiedはESP32側のタイマー復帰も同時に設定しています)。ESP32ごと止めるので、定時に起きて計測・送信し、また切る、というセンサー端末向けです。
どちらも起きるたびにsetup()からやり直すため、Wi-Fiの再接続に数秒かかります。数分以上の間隔で計測・送信するならtimerSleep、タッチで即座に起こしたいならdeepSleep、と選びます。逆に、数秒おきに通信する、画面を常に見せるといった用途ではスリープで稼げる時間が短いので、必要な稼働時間を電流の実測から逆算し、足りなければUSB給電にします。
M5Stack Core2の版(初代/v1.1/v1.3)の違いと見分け方
外観はほぼ同じですが、電源まわりは版ごとに違います。公式ドキュメントの各製品ページの仕様表と変更履歴をまとめると次のとおりです。
| 項目 | 初代(K010) | v1.1(K010-V11) | v1.3(K010-V13) |
|---|---|---|---|
| 発売 | 2020年6月 | 2023年11月 | 2026年4月 |
| バッテリー | 390mAh→500mAh | 500mAh | 500mAh |
| PMU | AXP192 | AXP2101+INA3221 | AXP192 |
| IMU | MPU6886 | MPU6886 | BMI270 |
| 電源LED | 緑 | 青 | 緑 |
| RTC用電池 | 2023年2月に廃止 | あり | あり(MS412FE) |
| 電源オフの長押し | 6秒 | 4秒 | 長押し(秒数の記載なし) |
| 販売状況 | 生産終了 | 生産終了 | 販売中・8,129円 |
手元の個体を見分けるいちばん早い方法は電源LEDの色で、青ならv1.1です。緑の場合は初代かv1.3で、上の電池モニターのスケッチを動かすとPMICの種類が表示されます(どちらもAXP192なので、ここでは区別できません)。初代とv1.3は、底面ラベルの型番かIMUの型番(MPU6886かBMI270か)で見分けます。公式の比較表では、RTC用電池を持つv1.1は電源を切っても正確に時を刻み、持たない初代は「電源切断後に時間がずれる」とされています。
M5Stack Core2でできること・用途例
タッチ画面・Wi-Fi・IMU・マイク・スピーカー・RTCが1台に揃っているので、次の作例は配線なしか、Groveケーブル1本で組めます。電源の取り方まで決めておくと、試作から実運用に移すときの手戻りが減ります。
| 作例 | 使う機能 | 電源の取り方 |
|---|---|---|
| 室内の温湿度・CO2表示 | Groveセンサー+画面 | USB常時給電 |
| 交通・天気の朝ダッシュボード | Wi-Fi+画面 | USB常時給電 |
| 定時の計測とクラウド送信 | RTC+Wi-Fi | 電池+timerSleep |
| 歩数・転倒の検知 | IMU+振動 | 内蔵電池 |
| 音声トリガーの呼び出しボタン | マイク+スピーカー | USB給電か電池 |
| 設備の操作パネル(HMI) | タッチ+Grove | USB常時給電 |
朝ダッシュボードは、AWSがbuilders.flashの2025年10月号で、公共交通オープンデータと天気APIの情報をAWS IoT Core経由でCore2に表示する構成を公開しています。
向かない用途もはっきりしています。電池だけで数日動かす屋外センサーや、ミリアンペア以下の待機電流が求められる機器では、画面と昇圧回路を持つCore2は不利です。その場合は、画面の無いESP32ボードやRaspberry Pi Pico Wのような小型ボードを選ぶ方が設計しやすくなります。Core2で作った試作を業務の現場に入れる段階で、センサー・通信・クラウドの構成を詰めるなら、AI/IoTソリューションの開発支援も相談先になります。
開発環境(UIFlow2/Arduino IDE/PlatformIO)と導入手順
| 環境 | 言語 | 向いている人 |
|---|---|---|
| UIFlow2(2.5.3) | ブロック/MicroPython | ブラウザで書いてすぐ試したい |
| Arduino IDE/arduino-cli | C++ | 既存のArduino資産を使いたい |
| PlatformIO/ESP-IDF | C/C++ | CIや細かい電源制御をしたい |
UIFlow2は、M5BurnerでCore2用のファームウェアを書き込み、ブラウザからブロックかMicroPythonで書きます。2026年10月時点の最新版は2.5.3(9月11日公開)です。Arduino IDEなら、ボードマネージャでESP32のボードパッケージを入れてボードに「M5Core2」(esp32:esp32:m5stack_core2)を選び、ライブラリマネージャでM5Unifiedを入れれば、上の電池モニターをそのまま書き込めます。旧来のM5Core2ライブラリより、全版を自動判別するM5Unifiedを使う方が版差でつまずきません。Go言語で書きたい場合はTinyGoのインストールと組み込み開発も選択肢です。
よくある質問
M5Stack Core2のバッテリーはどれくらい持ちますか?
公式は駆動時間を公表していません。仕様表の電源オン時0.147Aを5V入力側の値と仮定すると、500mAhで約2.5時間という計算になりますが、損失や負荷の変動を含まない数字です。実際の値はgetBatteryCurrent()で電流を測って見積もり、長く動かすなら画面を消してtimerSleepで間欠動作させます。
バッテリーは交換できますか?
内蔵電池は底面のバッテリーベースに入っており、ベースごと付け替えます。交換用のM5GO Bottom2 V1.3(1,892円)も500mAhなので、現行の個体では容量は増えません(390mAhの初代からなら110mAh増)。
外部電源から給電しながら使えますか?
USB Type-Cから5V・500mAで給電でき、挿している間は充電しながら動きます。消費が小さいと給電を止めるモバイルバッテリーでは、スリープ中に電源が落ちることがあります。
v1.1とv1.3はどちらを選べばよいですか?
スイッチサイエンスで新品を買えるのはv1.3だけです(2026年10月19日時点)。v1.3は電源管理ICが初代と同じAXP192に戻り、IMUがBMI270になりました。中古でv1.1を使う場合は、AXP2101に対応したライブラリ(M5Unifiedなど)でビルドしてください。
Core2 for AWSとの違いは何ですか?
Core2 for AWS v1.3は、Core2 v1.3本体に、暗号チップATECC608Bと500mAh電池を持つM5GO Bottom2 v1.3を組み合わせたキットで、9,438円で販売中です。AWS IoTの証明書を安全に保管したい場合に選びます。