pdf-icon

はじめに

本ドキュメントは 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
        M5-Bus のカバーに IMU と PDM マイクが搭載されている。M5-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
GPIO36 は Input 専用

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
GPIO36 は Input 専用

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 系統使用しなければ使えない点に注意。

M5-Bus

Core シリーズに用意されている 2.54mm ピッチの 2x25 ピンソケットの名称。Core,Core2, CoreS3 でピンが異なるので注意。

Core

FUNC PIN LEFT RIGHT PIN FUNC
GND 1 2 G35 ADC
GND 3 4 G36 ADC
GND 5 6 RST EN
MOSI G23 7 8 G25 DAC/SPK
MISO G19 9 10 G26 DAC
SCK G18 11 12 3V3
RXD0 G3 13 14 G1 TXD0
RXD2 G16 15 16 G17 TXD2
Int SDA G21 17 18 G22 Int SCL
GPIO G2 19 20 G5 GPIO
I2S_SK G12 21 22 G13 I2S_WS
I2S_OUT G15 23 24 G0 I2S_MK
HPWR 25 26 G34 I2S_IN
HPWR 27 28 5V
HPWR 29 30 BAT

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 以降でプルアップ抵抗が追加されており、この問題は解決しているはずである。