概要
技適取得後なかなか発売されていなかったM5StickC Plus2がやっと発売されました。おそらくPlusの在庫が減るのを待っていたと思うのですが、古いのが欲しい人向けに在庫が残っているときに販売しても良かったのになと思います。
完全な互換性はありませんのでご注意ください。
製品

上記がスイッチサイエンスさんの販売ページになります。国内だと総代理店のため、ここから買うのが無難です。
公式ストアは上記になります。

上記がAliExpressの公式サイトです。現状の為替を考えると送料を含んでも中国から購入したほうが安い状態に戻りましたね。少し前は国内は為替の影響を受ける前の価格だったのですが、ここでちゃんと為替の調整をしてきたようです。

箱型からブリスターパックに変更されています。付属品はなく本体のみとなります。

左がM5StickC、真ん中がPlus、右がPlus2になります。思ったより黄色っぽいオレンジですね。

外観などはM5StickCなどと変わりません。時計バンドなどもすべてそのまま使えそうなサイズでした。
ドキュメント
上記が公式ドキュメントになります。スイッチサイエンスさんの商品ページにも情報がありますが、ここの情報を翻訳しているのでオリジナルの情報を見たほうが正確な場合が多いです。
ちなみに中国サイトは重い場合があるので、スイッチサイエンスさんがミラーサイトを作ってくれています。

上記でその情報が公開されていますね。ただし、商品ページからのリンクはすべて中国サイトになっているので、このミラーサイトの場所を知るのは結構面倒なんですよね。
開発環境
Arduino + M5StickCPlus2
上記になります。中身はM5Unifiedをラッパーしているようですね。個別ライブラリ風のクラス名に変換しているだけです。既存の#include “M5StickCPlus.h”を使っていた人がM5StickCPlus2.hに書き換えることで同じように使えるためのラッパーライブラリだと思われます。
Arduino + M5Unified
基本はこちらを使うのをおすすめします。上の個別ライブラリも実際の中身はこのM5Unifiedになります。
UIFlow

なんとUIFlowの1系でサポートがありません。2.0はアルファバージョンなのでまだおすすめはしません。UIFlowで使えないのであればPlus2はもう少し早くだして、Plusと併売してほしかったですね。

あとUIFlow2系はログインしていないと使えません。書き込もうとすると上記のエラーがでます。M5Burnerの右上にある人っぽいアイコンから登録とログインが可能です。個人的には面倒なので普段はログインしていません。
【追記】2023/12/21にUIFlow1系にも対応しました

Plusとの差
ハードウエア
| M5STICKC PLUS | M5STICKC PLUS2 | |
|---|---|---|
| SoC | ESP32-PICO-D4 | ESP32-PICO-V3-02 |
| Memory | 520KB SRAM 4MB Flash | 520KB SRAM 2MB PSRAM 8MB flash |
| Power management | AXP192 | |
| Battery Capacity | 120mAh | 200mAh |
| UART Chip | CH522 | CH9102 |
| Body Color | orange red | orange |
| LED Color | Red | Red / Green |
SoC
ESP32-PICO-D4からESP32-PICO-V3-02に変更になっています。

中身自体はESP32なのでほぼ変わらないはずですが、データシートを確認するとチップのリビジョンが違うのと、フラッシュが4Mから8Mに増えているのと、PSRAMが2MB追加されています。

PSRAMが増えているのが非常に嬉しいのですが、これによってPSRAM用にGPIO9と10が使えなくなっています。その他の変更もありますので、PIN配置がボード全体でみると結構変わっています。
Memory
メインメモリに変更はありませんが、PSRAMとして低速ですが追加で2MB使えるようになりました。画像処理などをするときにはこの2MBが以上に便利に使えると思います。
あとフラッシュが4MBから8MBに増えています。プログラム自体ではそれほど使わないと思いますが、画像データなどを内蔵したり、SPIFFSとかでデータを保存したりと便利に使えます。
Power management
M5Stack Core2ではAXP192からAXP2101に変更になっていましが、Plus2では無くなっています。総合管理の電源ICではなく、レギュレーターや充電管理ICなどを組み合わせたものに変更されています。
構成的にはCoreInkやM5Paperなどに似た構成になっています。この影響で若干操作感に差がでているはずです。電源周りは複雑なので別途解説をしたいと思います。
Battery Capacity
120mAhから200mAhに増えています。容量で1.6倍になっていますが、電源管理が変わったことにより用途によってはもっと長く使えるようになる場合もあると思います。
UART Chip
CH522から最新のM5Stack Core系と同じCH9102に変更になっています。CH522は転送速度が特殊だったので使いにくかったのですが、CH9102であればわりとどの速度でも転送可能なはずです。ドライバーもシリーズで共通化して導入しやすいですね。
Body Color
オレンジレッドからオレンジに変更になりました。無印M5StickCに近いですが違う色です。画面サイズが違うのでそこまで問題にはならないと思います。
LED Color
赤の他に電源用の緑LEDが追加されています。既存の赤LEDはピンも変更になっていて、IRと共通ピンに変わっています。そのためIRを使うとLEDも光るように変更されています。
ピン設定
| M5STICKC PLUS | M5STICKC PLUS2 | |
|---|---|---|
| IR | G9 | G19 |
| LED | G10 | G19 |
| TFT | MOSI(G15) CLK(G13) DC(G23) RST(G18) CS(G5) | MOSI(G15) CLK(G13) DC(G14) RST(G12) CS(G5) |
| BUTTON A | G37 | G37 |
| BUTTON B | G39 | G39 |
| BUTTON C(WAKE) | Normal buttons, non-programmable | G35 |
| HOLD | / | G4 |
| Battery Voltage Detection | Read via AXP192 configuration | G38 |
IR/LED
ピン番号が変更されているのと同時に同じピンに統合されています。元々使っていた9と10はPSRAMのために使えなくなったので移動されています。
同時に光ることになるので注意してくださし。IR利用時にLEDも光るのはわかりやすくていいのかもしれませんが、LEDをIRの周波数に近いところで光らせるとまわりのIRに影響が出る可能性があるので注意してください。
TFT
こちらも一部変更されていますがTFTライブラリ内で吸収されており、あまり意識する必要はありません。
BUTTON
AとBに変更はありません。Plusでは電源ボタンはAXP192に接続されており、I2C経由で取得することができました。Plus2ではGPIO35が個別に割り当てられています。ただし、電源系のキーと共有しているので完全に自由に使えるわけではないので注意してください。
HOLD
CoreINKなどを触ったことがあればわかりやすいのですが、電源ONを維持するためにHOLDという機能が追加されています。起動した直後にGPIO4をHIGHにすることで電源ONであることを宣言します。明示的にGPIO4をLOWにすることで電源OFFであることを宣言し、実際に電源が落ちる動作になります。
プログラムから電源を落とすための機能なのですが、USBが接続されているとOFFにできなかったりとちょっとわかりにくいです。
Battery Voltage Detection
PlusはAXP192にI2Cでバッテリー電圧を取得できましたが、Plus2ではGPIO38の電圧を取得することで判定をします。PlusではUSB接続があるかなどもAXP192から取得できたのですが、Plus2では取得できなくなっています。
電源周りの差
| Product Name | M5STICKC PLUS | M5STICKC PLUS2 |
|---|---|---|
| Power on | 電源ボタンを2秒長押し | (1) 電源ボタンを2秒長押し (2) RTCからのタイマー起動 (3) USBケーブルを接続する (4) 5V INに電源を接続する (5) 3V3に電源を接続する ※起動後すぐにHOLD(GPIO4)をHIGHにする必要がある |
| Power off | 電源ボタンを6秒長押し | (1) 電源ボタンを6秒長押し (2) プログラムでHOLD(GPIO4)をLOWに ※USB、5V IN、3V3接続中の場合には画面は消えるが電源OFFにはならない |
| サスペンド | (1) USB、5V IN、3V3接続中に電源ボタンを6秒長押し ※何もできなくなっている状態 |
電源ON
電源ボタンからの起動か、RTCからのタイマー起動ができます。ライブラリを利用していれば自動的にHOLD処理をしてくれるはずです。ライブラリを利用しない場合には自分でHOLD(GPIO4)をHIGHにする必要があるで注意してください。
あと電源を供給しても電源ONになります。Grove経由では電源を受け取りませんが、5V INか3V3に電源入力をすると起動します。バッテリーがあるので3V3からの供給は基本的にはおすすめしませんし、起動だけして電流は流れていませんでしたので、バッテリー駆動っぽい動きとなっていました。
電源OFF
電源ボタンからか、プログラムから電源OFFができます。ただし、USB、5V IN、3V3接続時に時は完全な電源OFFにはならないので注意してください。そしてUSB、5V IN、3V3接続中かはプログラムから判定はできなかったと思います。
電源接続中ではない場合には6秒押すと緑のLEDが一瞬光ってから電源が落ちると思います。
サスペンド(緑LED点灯)
USB接続中にボタンを6秒長押しすると緑のLEDが光ったままの状態になります。この状態はESP32が死んでいるので何もできません。RTCタイマーイベントが起こるのを待つか、電源接続を停止して電源OFF状態まで戻す必要があります。
開発環境
Arduino M5Stackボードマネージャー
https://m5stack.oss-cn-shenzhen.aliyuncs.com/resource/arduino/package_m5stack_index.json
通常のESP32ボードマネージャーではなく、M5Stack専用のボードマネージャーを利用したものになります。2023/12/12リリースのバージョン2.0.9以降であればM5StickC Plus2が追加されているはずです。

上記のように選択できます。通常はこちらを使うのが無難だと思います。
Arduino ESP32ボードマネージャー
https://espressif.github.io/arduino-esp32/package_esp32_index.json
標準のESP32ボードマネージャーを利用した場合にはまだM5StickC Plus2がありません。

ESP32 Dev Moduleで問題がないかと思います。これまでのM5StickCはCH522を使っていたために、Upload Speedで921600の利用ができませんでした。そのためにボードを正しく選択する必要がありましたがPlus2は一般的な速度で転送ができるために、あまりどのボードを選択するかに関係がなくなりました。
変更点としてPSRAMを利用する場合にはEnableに、デフォルトのフラッシュが4MBなのをもっと使いたい場合には8MBに変更をするぐらいで利用できると思います。
スケッチ例
ライブラリ無しLチカ
void setup() {
// HOLD ON
pinMode(4, OUTPUT);
digitalWrite(4, HIGH);
// LED Setup
pinMode(19, OUTPUT);
// Serial Setup
Serial.begin(115200);
delay(1000);
// Memory Test
Serial.printf("heap_caps_get_free_size(MALLOC_CAP_SPIRAM) : %6d\n", heap_caps_get_free_size(MALLOC_CAP_SPIRAM));
Serial.printf("heap_caps_get_free_size(MALLOC_CAP_INTERNAL) : %6d\n", heap_caps_get_free_size(MALLOC_CAP_INTERNAL));
Serial.printf("heap_caps_get_free_size(MALLOC_CAP_DEFAULT) : %6d\n", heap_caps_get_free_size(MALLOC_CAP_DEFAULT));
Serial.printf("heap_caps_get_largest_free_block(MALLOC_CAP_SPIRAM) : %6d\n", heap_caps_get_largest_free_block(MALLOC_CAP_SPIRAM));
Serial.printf("heap_caps_get_largest_free_block(MALLOC_CAP_INTERNAL) : %6d\n", heap_caps_get_largest_free_block(MALLOC_CAP_INTERNAL));
Serial.printf("heap_caps_get_largest_free_block(MALLOC_CAP_DEFAULT) : %6d\n", heap_caps_get_largest_free_block(MALLOC_CAP_DEFAULT));
}
void loop() {
digitalWrite(19, HIGH);
Serial.println("HIGH");
delay(1000);
digitalWrite(19, LOW);
Serial.println("LOW");
delay(1000);
}
こんな感じでPSRAMが使えているかの判定とLEDのLチカができます。回路図と実際の動作を確認したところ、LEDはHIGHで光るように変わっています。PlusはLOWで光る負論理でした。
M5StickC Plus回路図

D7をLOWにすることで光る負論理の回路でした。
M5StickC Plus2回路図

GPIO19からSS8050トランジスタ経由でLEDとIRが光っています。HIGHにするとトランジスタに流れる正論理ですね。
ライブラリ無し赤外線送信
#include <IRsend.h>
const uint16_t kIrLed = 19;
IRsend irsend(kIrLed); // IR送信を宣言
const uint32_t IR_ADDRESS = 0x0000; // アドレス
const uint32_t IR_COMMAND = 22; // コマンド
void setup() {
// HOLD ON
pinMode(4, OUTPUT);
digitalWrite(4, HIGH);
// シリアル初期化
Serial.begin(115200);
delay(50);
irsend.begin(); // IR初期化
}
void loop() {
// 送信
uint64_t send = irsend.encodeNEC(IR_ADDRESS, IR_COMMAND);
irsend.sendNEC(send, 32, 3);
delay(1000);
}
IRの論理が逆転しているので確かめてみましたが、そのまま動きました。受信側が反転しててもちゃんと処理してくれるようですね。たぶんPlus2が正しい送信信号な気がします。
M5Unified
#include <M5Unified.h>
void setup(void)
{
M5.begin();
}
void loop(void)
{
M5.Power.setLed(255);
M5.Lcd.fillScreen(TFT_RED);
Serial.println("HIGH");
delay(1000);
M5.Power.setLed(0);
M5.Lcd.fillScreen(TFT_BLACK);
Serial.println("LOW");
delay(1000);
}
M5Unifiedの場合です。ちなみに本体が発売されたときに公開されているM5Unifiedだと、デバッグレベルを上げていないと画面が赤ではなく青になると思います。

少し経てば修正されると思いますが、現状のところNoneを使うのをやめてVarboseなどに指定するようにしてください。
まとめ
まだあまり触れていませんが、今後ももう少し確認していきたいと思います。UIFlowであれば機種差があまり影響しないはずなのですが当初1系に対応していないのは残念でした。
ESP32はボードライブラリが3系になったら全体的に調べ直そうと思っていたのですが、Plus2がでたのでまた触ってみたいと思います。



コメント
こんにちは、よく参考にさせていただいております。
Plus2でのLED,赤外LEDのSS8050での同時駆動、
Plusのポートで抵抗なし駆動よりよくなったとは思うのですが、、、
LEDは300Ωなのでバッテリーからだと5mA程度で問題ないと思うのですが
赤外LEDは22Ω、これは使い方を注意しないといけないですよね。。。?
赤外LEDは1.5V程度のVfなのでバッテリー3.7V程度からだと
100mA程流れることになるかと思います。
Plus同様1608の赤外LEDを使ってるのだとすると・・・
許容電流はDCで30mA、パルスではmax0.1ms、duty10%くらいなので
秒単位程度のLチカやってるとちょっと赤外LEDには大電流で
可愛そうかなって気がしますが どうでしょう…
たしかにですね
抵抗とかも結構大きいの入れないと定格厳しそうですね
今度電流どれぐらいかを測定してみたいと思います
ありがとうございます、やっぱりそうですよね。
電流、どうやって測るんでしょか…?
ちょいと興味深いです♪
バッテリーがはいっているのであまり正確にはならないのですが、USBコネクタに接続するタイプの電流電圧テスターが便利です
https://www.amazon.co.jp/dp/B0BRCQ45F1/
上記みたいなのをパソコンとボードに接続するケーブルの間にいれます
データ転送もそのままできるので、とりあえず入れておくとどれぐらい流れているのかの目安になります
時系列で正確に測定するときにはPPK2という機材が少し高いですが正確です
こちらはUSBケーブルを利用せずに、5V INなどの端子から電源接続をして計測します
バッテリーの充電電流が流れちゃうのでそこまで正確ではないですが、それなりに見えます
厳密にやる場合にはバッテリーを切り離しての試験になると思います
なるほど…
そこだけ動かすようなことすれば消費電力から
およそ推定できそうですね
M5stackにその赤LEDと赤外LEDの回路、
それだと使い方に注意がいることになるんじゃないか?
って伝えたら、
Ah, I think the engineer test guys had tested and long time running test this, but I will tell them, thanks very much for your feedback!!!
って返事が返ってきました。
やっと実測してみました
LED/IRを点灯するする前が0.178Aぐらいで、光らせると0.357Aと170mA以上増えていますね。。。
感覚的に流れ過ぎな気がします
LEDは流しても30mAだと思いますし、なんだろう。。。
https://x.com/tnkmasayuki/status/1787785112832360511