M5Stack M5StickC Plus2発売

概要

技適取得後なかなか発売されていなかったM5StickC Plus2がやっと発売されました。おそらくPlusの在庫が減るのを待っていたと思うのですが、古いのが欲しい人向けに在庫が残っているときに販売しても良かったのになと思います。

完全な互換性はありませんのでご注意ください。

製品

M5StickC Plus2
M5StickCを大画面にしたアップグレード製品「M5StickC Plus」の最新バージョンです。ESP32-PICO-V3-02を搭載し、BluetoothとWi-Fi通信が可能です。コンパクトなボディに、赤外線、RTC、マイクロフォン...

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

M5StickC PLUS2 ESP32 Mini IoT Development Kit
Description M5StickC PLUS2 is an iterative version of M5StickC PLUS, featuring the ESP32-PICO-V3-02 chip as the main con...

公式ストアは上記になります。

2893.0¥ |Iot ミニ開発キット,m5スタックの公式アプリケーション,m5kc,lus2,p32,公式| | - AliExpress
Smarter Shopping, Better Living! Aliexpress.com

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

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

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

外観などはM5StickCなどと変わりません。時計バンドなどもすべてそのまま使えそうなサイズでした。

ドキュメント

m5-docs
The reference docs for M5Stack products. Quick start, get the detailed information or instructions such as IDE,UIFLOW,Ar...

上記が公式ドキュメントになります。スイッチサイエンスさんの商品ページにも情報がありますが、ここの情報を翻訳しているのでオリジナルの情報を見たほうが正確な場合が多いです。

m5-docs
The reference docs for M5Stack products. Quick start, get the detailed information or instructions such as IDE,UIFLOW,Ar...

ちなみに中国サイトは重い場合があるので、スイッチサイエンスさんがミラーサイトを作ってくれています。

ECシステム開発チーム、M5Stackのミラーサイト構築でやったこと
スイッチサイエンスのシステムエンジニアたちは、自社ECサイトの開発に従事する傍ら、多岐にわたる業務に取り組んでいます。そんな彼らの活動の中で、今週は「M5Stackのサイトが見られない!」というユーザー様のSNS投稿を受け、急遽始まったミラ...

上記でその情報が公開されていますね。ただし、商品ページからのリンクはすべて中国サイトになっているので、このミラーサイトの場所を知るのは結構面倒なんですよね。

開発環境

Arduino + M5StickCPlus2

GitHub - m5stack/M5StickCPlus2
Contribute to m5stack/M5StickCPlus2 development by creating an account on GitHub.

上記になります。中身はM5Unifiedをラッパーしているようですね。個別ライブラリ風のクラス名に変換しているだけです。既存の#include “M5StickCPlus.h”を使っていた人がM5StickCPlus2.hに書き換えることで同じように使えるためのラッパーライブラリだと思われます。

Arduino + M5Unified

GitHub - m5stack/M5Unified: Unified library for M5Stack series
Unified library for M5Stack series. Contribute to m5stack/M5Unified development by creating an account on GitHub.

基本はこちらを使うのをおすすめします。上の個別ライブラリも実際の中身はこのM5Unifiedになります。

UIFlow

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

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

【追記】2023/12/21にUIFlow1系にも対応しました

Plusとの差

ハードウエア

M5STICKC PLUSM5STICKC PLUS2
SoCESP32-PICO-D4ESP32-PICO-V3-02
Memory520KB SRAM
4MB Flash
520KB SRAM
2MB PSRAM
8MB flash
Power managementAXP192
Battery Capacity120mAh200mAh
UART ChipCH522CH9102
Body Colororange redorange
LED ColorRedRed / Green

SoC

ESP32-PICO-D4からESP32-PICO-V3-02に変更になっています。

https://www.espressif.com/sites/default/files/documentation/esp32-pico_series_datasheet_en.pdf

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

https://www.espressif.com/sites/default/files/documentation/esp32-pico_series_datasheet_en.pdf

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 PLUSM5STICKC PLUS2
IRG9G19
LEDG10G19
TFTMOSI(G15)
CLK(G13)
DC(G23)
RST(G18)
CS(G5)
MOSI(G15)
CLK(G13)
DC(G14)
RST(G12)
CS(G5)
BUTTON AG37G37
BUTTON BG39G39
BUTTON C(WAKE)Normal buttons,
non-programmable
G35
HOLD/G4
Battery Voltage DetectionRead via AXP192 configurationG38

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 NameM5STICKC PLUSM5STICKC 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回路図

https://m5stack.oss-cn-shenzhen.aliyuncs.com/resource/docs/schematic/Core/M5StickC_Plus/StickC_Plus_20200616.pdf

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

M5StickC Plus2回路図

https://m5stack.oss-cn-shenzhen.aliyuncs.com/resource/docs/products/core/M5StickC%20PLUS2/%E5%8E%9F%E7%90%86%E5%9B%BE.pdf

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がでたのでまた触ってみたいと思います。

コメント