はじめに
本ドキュメントはM5Stack製品のうち、ESP32を搭載するデバイスについて述べています。2024/2現在の情報をもとに記述しています。
表記について
- Core
特に補足がない場合はBasic/Gray/Go/Fireのことを示します。 - 製品名にM5StackやM5が含まれるものは、本ドキュメント内では省略しています。
M5Stackとは?
M5Stackは、電子工作やプログラミングのプロジェクトに使用される小型のモジュール型開発キットです。このシステムは、スタック可能なモジュール設計を採用しており、さまざまな機能のブロックを重ねることで、ユーザーが必要とするデバイスを簡単に組み立てることができます。M5StackはESP32チップをベースにしており、Wi-FiやBluetoothなどの通信機能を内蔵しています。これにより、スマートホームデバイス、ウェアラブル、ロボット制御など、幅広い用途での使用が可能です。
ESP32とは?
ESP32は、低コストで低消費電力を特徴とするWi-FiおよびBluetoothを内蔵したマイクロコントローラの一種です。このチップはEspressif Systemsによって開発されました。ESP32は、ESP8266の後継としてより多くの機能とより強力な性能を提供します。
ESP32には以下の特徴があります:
- Wi-FiとBluetoothの双方に対応しており、IoT(モノのインターネット)プロジェクトに非常に適しています。
- 低消費電力で動作するため、バッテリー駆動のプロジェクトに最適です。
- 複数のGPIO(汎用入出力)ピンがあり、センサーやアクチュエーターなどの外部デバイスを直接接続できます。
- 内蔵のADC(アナログ・デジタル変換器)、DAC(デジタル・アナログ変換器)、I2C、SPI、UARTなどの通信インターフェースをサポートしています。
- 32ビットのLX6マイクロプロセッサを搭載し、最大240MHzまでクロック速度を上げることができます。
- プログラミングはArduino IDEやEspressifのESP-IDF、MicroPythonなど複数の開発環境で行うことができます。
ESP32はWi-FiやBluetoothを使用したプロジェクトを手軽に始めることができる魅力的な選択肢です。その多機能性と拡張性により、様々な応用が可能で、スマートホームデバイス、ウェアラブルデバイス、センサーネットワークなど、多岐にわたるプロジェクトに利用されています。
ESP32/ESP32C3/ESP32S3の違い
ESP32、ESP32-C3、およびESP32-S3は、Espressif Systemsによって開発されたマイクロコントローラーであり、それぞれが異なる機能セットを提供します。これらの主な違いを理解することで、プロジェクトの要件に最適なモデルを選択できます。
ESP32
- CPU: Tensilica Xtensa LX6 デュアルコアプロセッサ
- 無線機能: Wi-Fi (802.11 b/g/n) と Bluetooth 4.2 (Classic + LE)
- GPIOピン数: 34(ストラッピングGPIO:5, 入力専用:6, Flash/PSRAM用:6)
- 特徴: 高い処理能力と汎用性を持ち、多くのI/Oポートを備えています。広範なアプリケーションで利用可能で、特に複雑な処理が必要なプロジェクトに適しています。
ESP32-C3
- CPU: RISC-V シングルコアプロセッサ
- 無線機能: Wi-Fi (802.11 b/g/n) と Bluetooth 5 (LE)
- GPIOピン数: 22 または 16
- 特徴: RISC-V アーキテクチャを採用し、低コストで低消費電力のプロジェクトに適しています。Bluetooth 5に対応しており、IoTデバイス向けに最適化されています。
ESP32-S3
- CPU: Tensilica Xtensa LX7 デュアルコアプロセッサ
- 無線機能: Wi-Fi (802.11 b/g/n) と Bluetooth 5 (LE)
- GPIOピン数: 45
- 特徴: AIアクセラレーション機能を備え、デュアルコアプロセッサを採用しています。ESP32よりも多くのGPIOピンを持ち、USBインターフェースに対応しています。高い処理能力と多機能性を必要とするプロジェクトに適しています。
ESP32シリーズ比較の要点
- 処理能力: ESP32-S3 ≒ ESP32 > ESP32-C3
- 無線機能: すべてWi-FiとBluetoothをサポートしていますが、ESP32-C3とESP32-S3は新しいBluetooth 5に対応していますがBluetooth Classicには対応していない点に注意が必要です。
- コアアーキテクチャ: ESP32とESP32-S3はTensilica Xtensa、ESP32-C3はRISC-Vを採用しています。
- 適用分野: ESP32は汎用性が高く、ESP32-C3はコストと消費電力が重視される場合、ESP32-S3は高性能と拡張性が求められる場合に適しています。
プロジェクトの具体的な要件(処理能力、無線機能、GPIOの必要数、コストなど)に基づいて、これらのマイクロコントローラーの中から最適なものを選択することが重要です。
ESP32関連デバイスについて
※ 図ではESP32-PICOはESP32に分類しています。
デバイスの特徴と注意点
Coreシリーズ
- Core
M5Stackで最初に発売されたCore
共通仕様: 2インチの液晶, 3つの物理ボタン, 電源/リセット兼用ボタン, PMUはI2C用にカスタムされたIP5306, スピーカー, TFCardスロット, Port.Aを搭載。- Basic
GPIOが2.54mmピンで取り出せるようになっているBottomが付属しているモデル。 - Gray
Core BasicにIMUを追加したモデル - Go
GrayのBottomをGrove互換のPort.B, Port.C及びRGBLEDを10個、マイクを備えたGoBottomに変更したモデル - Core Fire
Goに更にPSRAMを追加したモデル
- Core2
Coreを改良したモデル。
共通仕様: 2インチの液晶、タッチパネル(320x240液晶 + 40x240のボタン領域), 電源ボタン, リセットボタン, LED, RTC, スピーカー, Port.A- Core2
M-BusのカバーにIMUとPDMマイクが搭載されている。M-Busを使用する場合は取り外さなければならない点に注意。 - Core2 for AWS
AWSにIoT機器としてアクセするための暗号化チップが搭載されているM5GoBottom2が付属している。Go/Fireと同様にPort.B,Port.CとIMU、PDFマイク、RGBLED10個
- Tough
紫外線や防水の耐久性を重視した製品。防水であるが水没は想定されていない
。タッチパネルを装備しているがCore2の40x240のボタン領域はない点に注意。外部との接続は防水のM12のコネクタを通してUSBで行う。 - Station
工場等の操作パネルを想定して設計された製品。RS-485に接続して利用するタイプと、18650を2本内蔵できるタイプがある。Grove PortA,B,Cを2つずつ装備している。1.14インチのLCD(135x240), 物理ボタン3つ, ON/OFFボタン, 7つのRGBLED, PMICはAXP192, IMU - CoreS3
MCUをESP32-S3に変更したモデル。タッチパネル(Core2の40x240のボタン領域はない。)、カメラ、デュアルマイク、IMU、近接センサー、スピーカーを内蔵。
Stickシリーズ
Coreシリーズをコンパクトにした製品、HATと呼ばれる2.54mm x 8pinのコネクタを持っているセンサー等を接続できる。
共通仕様:HAT, GrovePort, 2つの物理ボタン, IMU, RTC, LED, IR LED, ブザー, マイクを内蔵している。
- StickC
0.96インチの液晶(80x160pixel), PMIC: AXP192 - StickC PLUS
StickCの液晶を1.14インチ(135x240)にしたモデル。PMIC: AXP192 - StickC PLUS2
StickC PLUSのAXP192がEOLになったため、充電管理ICに変更されたモデル。それにより、電源ボタンが3つ目の物理ボタンとして利用可能。その他Flashメモリは8MB, PSRAM 2MBに変更された。
Atom
Stickシリーズを更にコンパクトにしたシリーズ。バッテリーは省かれている。
共通仕様: 物理ボタン, リセットボタン, IRLED, GPIOはGrovePortと2.54mmの1 x 5と1 x 4のピンを背面に持つ, AtomBaseと呼ばれるデバイスと接続することにより様々な拡張ができるようになっている。
※ AtomBaseはAtom MatrixとAtom EchoはGPIOの競合により、基本的に使用できないので注意
- Atom Lite
RGBLED x 1 - Atom Matrix
RGBLEDを25個並べたパネルを装備、パネルを押すと物理ボタンが動作する。IMUを内蔵しているが裏面のGPIO G22,G25を共用している点に注意。 - Atom Echo
AtomLiteをベースに, マイク, スピーカーを内蔵したモデル。裏面のGPIOのうち、G19,G22,G23,G33を内蔵のアンプとマイクのI2Sで利用しているためAtomBaseではほぼ使えない点に注意。 - Atom U
USB-A端子があり、PCに直接接続可能なのが特徴のデバイス。Atomシリーズの特徴である裏面の9ピンのGPIOは存在しない。6pinの2.54mm端子でGPIOを取り出せるようになっている。RGBLED, PDMマイク - AtomS3 Lite
Atom LiteのMCUをESP32-S3に変更したデバイス。RGBLED x1 - AtomS3
Atom MatrixのMCUをESP32-S3に、画面を0.85inchの液晶パネル(128x128)に変更したデバイス。裏面のGPIO 38,39は内蔵I2Cデバイスと共有している。 - AtomS3 U
Atom UのMCUをESP32-S3に変更したデバイス。
Stampシリーズ
- StampPico
切手サイズの組み込み用デバイス。USB-C端子はなく、書き込みはESP32 Downloader Kitで行う。 - StampC3
切手サイズStampPicoのMCUのESP32-C3に変更したもの。縦長になり、GPIOも増えている。CH9102Fを内蔵している。 - StampC3 U
StampC3の書き込み用CH9102Fを無くし、ESP32-C3のUSB-CDCを使って書き込むように変更されたデバイス。
その他
- CoreInk
1.5inch 電子ペーパーディスプレイ(白黒200x200)を搭載。多機能ボタン、物理ボタン、ブザー、バッテリーを内蔵 - Paper
グレイスケール16階調対応の540 x 960 4.7インチの電子ペーパーを搭載。タッチパネル、多機能ボタン、温湿度センサー、物理ボタン、TFCardスロット、RTCを内蔵 - Station
1.14 インチ IPSディスプレイパネル、入力ボタン3個+電源ボタン、拡張端子を内蔵。
M5StampS3搭載デバイス
StampS3を組み込んだデバイスです。
- Capsule
- Cardputer
- Dial
- AirQ
FlashメモリとPSRAM
Flashメモリとは
ESP32のFlashメモリは、プログラムコード、データ、設定などを保存するための非揮発性の記憶領域です。非揮発性とは、電源を切っても情報が失われない性質を意味します。この特性により、ESP32は電源がオフになってもプログラムや設定を保持できます。ESP32に搭載されるFlashメモリは4MB〜16MBです。
PSRAMとは
ESP32におけるPSRAM(Pseudo Static Random Access Memory)は、外部の拡張メモリの一種で、ESP32チップの内蔵メモリ(SRAM)を補完するものです。PSRAMは、静的RAM(SRAM)のようにアクセスできますが、実際には動的RAM(DRAM)の技術を用いてコストを抑えつつ大容量のメモリを提供しています。
PSRAMを使用する際のデメリットは、消費電力が高くや内蔵SRAMよりもアクセス速度が遅いという点です。特性を理解し、プロジェクトの要件に合わせて適切に利用することが重要です。
M5Stackデバイスの搭載FlashメモリとPSRAM
下記の図のように、FlashメモリとPSRAMのサイズや搭載有無が異なります。使用する用途によって最適な機種を選択できます。
デバイスドライバについて
各OSでのインストールと名称の違いを説明。
ダウンロードモードへの入り方
ESP32機種のダウンロードモードの入り方
ESP32は、G0-GNDを短絡して電源を入れるまたはリセットを行うとダウンロードモードに入ります。
ESP32S3機種のダウンロードモードへの入り方
ESP32-S3のデバイスは、特にUSBHostとしての機能を使って開発を行う場合、PCから書き込めなくなる場合があります。その際はダウンロードモードにして起動すると書き込めるようになります。書き込み終了後はダウンロードモードを解除するために、リセットや再起動が必要です。
- CoreS3
リセットボタンを6秒長押し(ボタン裏の緑色のLEDが点灯する。) - AtomS3/Lite/U
リセットボタンを6秒長押し(ボタン裏の緑色のLEDが点灯する。) - StampS3
G0ボタンを押しながら、USBケーブルを差して電源を入れる。 - Dial
G0ボタンを押しながらリセットボタンを押す。 - AirQ/Cardputer/Capsule
G0ボタンを押しながら電源を入れる。
GPIO
Grove互換Port(HY-2.0-4P)
Groveポート。VCCが5Vで信号レベルは3.3Vである点に注意が必要です。2024現在、Port.A〜Eの5種類あります。
?> M5StackのGrove互換ポートは、VCCが5VでGPIOは3.3Vです。他社製のセンサーを接続する場合は、電圧変換やレベル変換が必要になることがあります。
- Port.A
赤色のGrove互換ポート。I2Cデバイスを接続するように設計されている。 - Port.B
黒色のGrove互換ポート。INPUT/OUTPUTを利用するために設計sれている。CoreのGPIO36は入力専用なので注意が必要。 - Port.C
青色のGrove互換ポート。UARTデバイスを接続するように設計sれている。 - Port.D
汎用Grove互換ポート。Ext for Core2で使用 - Port.E
汎用Grove互換ポート。Ext for Core2で使用 - Port
StickシリーズやAtomシリーズ等、Groveポートが1つのものは白色で汎用GPIOが出ています。(それぞれのデバイスで異なります。)
Grove互換ポートのGPIO
Coreシリーズ
Basic/GrayはPort.Aのみ、Go/FireはPort.A/B/C
HY-2.0-4P Port | pin 1 | pin 2 | pin 3 | pin 4 |
---|
Port.A | 22(SCL) | 21(SDA) | 5V | GND |
Port.B | 36(IN) | 26(OUT) | 5V | GND |
Port.C | 16(RXD2) | 17(TXD2) | 5V | GND |
Core2シリーズ
Core2(白)はPort.Aのみ、Core2 for AWSはPort.A/B/C
HY-2.0-4P Port | pin 1 | pin 2 | pin 3 | pin 4 |
---|
Port.A | 33(SCL) | 32(SDA) | 5V | GND |
Port.B | 36(IN) | 26(OUT) | 5V | GND |
Port.C | 13(RXD2) | 14(TXD2) | 5V | GND |
CoreS3シリーズ
CoreS3はPort.A/B/C
HY-2.0-4P Port | pin 1 | pin 2 | pin 3 | pin 4 |
---|
Port.A | 1(SCL) | 2(SDA) | 5V | GND |
Port.B | 8(IN) | 9(OUT) | 5V | GND |
Port.C | 18(RXD2) | 17(TXD2) | 5V | GND |
Groveポート1つ
Device | pin 1 | pin 2 | pin 3 | pin 4 |
---|
StickC/C PLUS | 33 | 32 | 5V | GND |
StickC PLUS2 | 22 | 21 | 5V | GND |
Atom Lite/Matrix/Echo/U | 32 | 26 | 5V | GND |
AtomS3/Lite/U | 1 | 2 | 5V | GND |
StampPico | 33 | 32 | 5V | GND |
StampS3 | 1 | 2 | 5V | GND |
Groveポート2つ
Device | Port.1 pin 1 | pin 2 | pin3 | pin 4 | Port.2 pin 1 | pin 2 | pin 3 | pin 4 |
---|
Stamp C3/C3U | 0 | 1 | 5V | GND | 18 | 19 | 5V | GND |
Port.Aを使用する場合の注意事項
- Core
Port.AはCoreでは内蔵I2Cデバイスと接続を共有している。GPIOとしても利用可能であるが、内蔵I2Cデバイスと同時にアクセスしようとすると不具合が起こる。 - Core2
Port.Aは内部I2Cデバイスとは別のピンとなった。ArduinoFrameworkで利用する場合は、WireとWire1の2系統使用しなければ使えない点に注意。 - CoreS3
Port.Aは内部I2Cデバイスとは別のピンとなった。ArduinoFrameworkで利用する場合は、WireとWire1の2系統使用しなければ使えない点に注意。
MBus
Coreシリーズに用意されている2.54mmピッチの2x25ピンソケットの名称。Core,Core2, CoreS3でピンが異なるので注意。
Core
Core2
CoreS3
その他デバイス特有の拡張ポート
HAT
StickCシリーズ及びCoreInkを拡張するためのポート。2.54mmピッチで8pinあります。
例、M5StickC PLUSのHAT ポート
Device | pin 1 | pin 2 | pin 3 | pin 4 | pin 5 | pin 6 | pin 7 | pin 8 |
---|
StickC | GND | 5V OUT | G26 | G36 | G0 | BAT | 3V3 | 5V IN |
StickC PLUS | GND | 5V OUT | G26 | G36/G25(*1) | G0 | BAT | 3V3 | 5V IN |
StickC PLUS2 | GND | 5V OUT | G26 | G36/G25(*1) | G0 | BAT | 3V3 | 5V IN |
CoreInk | GND | 5V OUT | G26 | G36 | G25 | BAT | 3V3 | 5V IN |
*1 プログラムで切り替えます。GPIO36はInput専用
Atom Lite/Matrix/Echo
AtomU
Device | pin 1 | pin 2 | pin 3 | pin 4 | pin 5 | pin 6 | pin 7 | pin 8 |
---|
Atom U | GND | 5V OUT | G26 | G36 | G0 | BAT | 3V3 | 5V IN |
AtomS3/Lite
AtomS3 Lite

### AtomS3
AtomS3 U
Device | pin 1 | pin 2 | pin 3 | pin 4 | pin 5 | pin 6 |
---|
AtomS3 U | GND | 5V | 614 | G17 | G42 | G40 |
M5StampPico
StampC3/C3U
StampC3
StampC3 U
M5StampS3
その他
CoreInk
Paper
HY-2.0-4P Port | pin 1 | pin 2 | pin 3 | pin 4 |
---|
Port.A | 32(SCL) | 25(SDA) | 5V | GND |
Port.B | 33(IN) | 26(OUT) | 5V | GND |
Port.C | 19(RXD2) | 18(TXD2) | 5V | GND |
Station
HY-2.0-4P Port | pin 1 | pin 2 | pin 3 | pin 4 |
---|
Port.A1 | 33(SCL) | 32(SDA) | 5V | GND |
Port.A2 | 33(SCL) | 32(SDA) | 5V | GND |
Port.B1 | 35(IN) | 25(OUT) | 5V | GND |
Port.B2 | 36(IN) | 26(OUT) | 5V | GND |
Port.C1 | 13(RXD2) | 14(TXD2) | 5V | GND |
Port.C2 | 16(RXD2) | 17(TXD2) | 5V | GND |
よくあるトラブルや細かい仕様変更
GPIO(ESP32機種)
- GPIO34-39は入力専用・出力不可、内蔵プルアップなし。
- アナログ出力はGPIO25,26のみ使用可能。
- CoreFIREにはPSRAMが搭載されているが、PSRAM使用時はGPIO16,17(Port.C)は使ってはいけない。
- GPIO1,3はUSBシリアル入出力に使用されている。
SPIについて
- ESP32はSPIが4系統あるが、SPI0とSPI1はシステムが使用しており、アプリが使用できるのはSPI2(HSPI)とSPI3(VSPI)のみ。
- TFカード(SD)と液晶(LCD)はともにSPI3(VSPI)を使用して接続されている。
- SPI2(HSPI)は未使用のため、ユーザーが任意のピンに割り当てて使用してもよい。
I2Cについて
- ESP32はI2Cが2系統ある。CoreとCore2で使用状況が異なる。
- オンボードの電源IC・IMU・タッチパネルとの通信にI2Cを使用している。
- CoreはI2C0(Wire)をSPIO21,22に割り当てている他、Port.Aにも同じピンが割り当てられている。
つまりPort.Aに接続した機器とオンボードの電源IC・IMU・タッチパネルは同じI2C0上に接続される。I2C1(Wire1)は未使用のため、ユーザが任意のピンに割り当てて使用しても良い。 - Core2はI2C1(Wire1)をGPIO21,22に割当オンボードのI2C機器に使用しているが、Port.AにはI2C0(Wire)をGPIO21,22に割り当てて使用している。つまり、Port.AとのオンボードのI2Cは別系統となる。
画面について
- いわゆるVDPやグラフィックアクセラレータ的なものは存在しない。
- LCD(ILI9342C)の内蔵フレームバッファに表示内容が保持されている。ESP32側にはデータを持っていない。
- 描画はSPI通信によってLCD内蔵フレームバッファにピクセルデータを送り込んで書き換えて実現する。
- 50MHzのSPI通信による書き換えなので画面全体を(320x240ピクセル)をすべて書き換える場合は最低30msecかかる。全画面更新のフレームレートは32fps付近が限界である。
- 「ESP32のメモリ上に320x240ピクセルのフレームバッファを作れば楽になるのでは?」という発送はメモリが足りないので実現はできない。PSRAMを使用すれば可能であるが速度はかなり遅くなる。
機種のバージョン違いに関連するトラブル
M5Stackは、使用IC等のEOLやバグ修正のため、バージョンにより改良を行っている。仕様変更により不具合も発生する場合もあり、2024/1現在判明しているものについて記述する。
Core V2.6
- GPIO18,19,23のESP対策TVSが変更された結果、信号の立ち上がりが遅くなってしまいSPIの通信速度の上限が低下しています。そのため速度を下げないとSDカードアクセスやUSBホストモジュール等のSPI通信でデータバケが生じることがあります。
→ この対策としてM5UnifiedではSPIバスのピンに対し、通常は20mAのドライブ電流を40mAにあげて通信速度の上限を引き上げている。(いつから対策済みかは不明) - Core v2.6〜v2.61まではGPIO16にプルアップ抵抗・GPIO17にプルダウン抵抗がついている可能性がある。(※ PSRAM用の対策部品がPSRAM非搭載モデルにも搭載されている。)
→ そのため、GPIO17にESP32内蔵プルアップを指定しても、プルダウン抵抗のほうが強いためHIGHにならない。
上記はv2.7では実装しなくなっているがv2.61では混在している模様。いつの時点で実装しなくなったかは不明である。
M5Stack Fire
M5Stack Fireでフラッシュメモリへの書き込みが進まずタイムアウトしたり、起動時にflash read errが出る場合、PSRAMが原因の可能性がある。この場合はGPIO16と3.3vを接続するとスムーズに書き込める可能性がある。
この問題については、v2.6以降でプルアップ抵抗が追加されており、この問題は解決しているはずである。