1. 導入・概要
こんにちは、IoTLTアドベントカレンダー25日目の記事です!
・M5StackTab5をArduino環境で使い倒す(願望)ための情報を共有するものです。
・私と同じようにこのパワフルなマシンの様々な機能&大きな画面を使いたいと思っている方向けに情報を共有していければと思っています。
・当初はこの大きな画面を使って、きれいなLVGLライブラリを使ったアプリを作成したいと思ったのですが、初心者にはLVGLの世界だけでも難しく感じたため、3つのStep(1_基礎編、2_Network編、3_GUI編)に分けて進めることとしました。
・この記事は1_基礎編となります。それぞれ私のGitHub上にソースを公開していますので、MITライセンスで活用してください。
残念ながら執筆時点(12/24)では、ArduinoIDE上でカメラ機能は利用できません。カメラを利用したい方はM5Unifiedライブラリ、ArduinoIDE環境でのカメラ対応を待つか、ESP32-P4の公式ESP-IDF上での開発となります。
2. M5StackTab5の概要
スペック
- メインCPU:RISC‑V アーキテクチャのESP32-P4 SoC (16MB Flash・32MB PSRAM 搭載)
- 無線:Wi‑Fi 6 対応の ESP32-C6-MINI-1U (P4側には無線機能がないため、別途C6が搭載されています)
- MIPI‑DSI インターフェースを備えた 5 インチ 1280×720 IPS タッチスクリーン
- MIPI‑CSI インターフェース接続の SC2356 2MP カメラ(1600×1200)
- 外部端子:USB Type‑A(Host)&USB Type‑C(OTG)両搭載でマウス・キーボード等の周辺機器も利用可能
- 産業向けIO:RS‑485(SIT3088 + 端末 120Ω 切替スイッチ)バス通信対応
HY2.0-4P、M5-Bus、GPIO_EXT ピンヘッダー、microSDカードスロット、STAMP パッド(Cat.M/NB‑IoT/LoRaWAN 等拡張対応)など - AV 面:ES8388音声コーデック、ES7210(AEC エコーキャンセラー)デュアルマイクアレイ&3.5mm イヤホン+スピーカー搭載で高音質録音・再生・音声認識可能
- BMI2706 軸センサ(加速度+ジャイロ)による動作トラッキング・姿勢検出
- クロック&パワーマネジメント:RX8130CERTC、底部 NP-F550 着脱式リチウムバッテリー

画面ドライバ変更
2025 年 10 月 14 日以降、Tab5 の従来の独立表示ドライバ ILI9881C およびタッチドライバ GT911 は、ST7123 表示タッチ一体型ドライバに変更されます。一部の初期コンパイル済みファームウェアは正常に動作しない場合があります。現在の最新バージョンの M5Unified および M5GFX はこの画面ドライバに対応しており、旧プログラムは最新の M5Unified と M5GFX を使用して再コンパイルすることで互換性を確保できます。
Tab5 製品の背面ラベルを確認することで、デバイスのドライバモデルを確認できます。
購入先
- M5Stackファミリーなので主にスイッチサイエンスさんなどになるかと思います。私は今年のMakerFairのM5Stackブースで値引き価格で入手させていただきました。
- リチウムバッテリーはセットになったものもありますし、NP-F550はソニーが開発した汎用性の高いリチウムイオン充電池なので、類似品含めアマゾンなどで購入することが可能です。
3. 開発環境の構築
開発環境比較
開発環境は複数あり、今回はArduinoIDEを使っての開発を想定しています。
- AruduinoIDE:初心者向けの開発環境。今回はこちらを利用します
- UiFlow2:グラフィカル開発環境(初心者にはいいですが、GUIを駆使する場合には制約が多いです)
- PlatformIO:VSCode上の環境でWindowsの場合、AruduinoIDEのコンパイルが遅くてこちらを使うことがありました。
- ESP-IDF:チップメーカ公式の環境(なので対応するドライバの機能は一番豊富です)
- Home Assistant:M5公式で最近追加された開発環境(HOMEアシスタントを作成できるようです)
AruduinoIDE環境の構築
- AruduinoIDEインストールについては公式のこちらを参照してください
- つぎに、IDE上でM5Stackボードマネージャのインストールをします。こちらを参照ください
- 最後に必要なライブラリを適宜インストールします。まずは最低限M5Unifiedをインストールします。こちらを参照ください
- プログラムのコンパイルとアップロード、公式のこちらを参照ください
4. プログラムの解説(1_基礎編)
コードはGithubにMITライセンスとして公開しています。それぞれReadme.mdを入れていますので。参考にしてください。
基本機能
まずはM5Unifiedライブラリを導入して、基本的な描画の確認。M5GFXによる画面描画を試します
| No. | プログラム名 | 主要機能 |
|---|---|---|
| 1 | M5Unified | Hello World + カウンター |
| 2 | BarGraph | カラフルなバーグラフアニメーション |
1. M5Unified
M5Unifiedを使ったカウントアップのアプリ。
まずはTab5の初期化と画面表示、画面の書き換えサンプルです。カウント部分の文字を書き換えています。
出典はM5社にあるM5Unifiedライブラリの説明ページとなります。
2. BarGraph
64本のバーが正弦波パターンでアニメーションするカラフルなバーグラフ表示。
リアルタイムバーグラフアニメーション。カラフルなグラデーション表示、滑らかなアニメーション効果など、M5GFXを用いた高速な画面描画のサンプルです。M5Unifiedライブラリ内でM5GFXは読みだされているので、別途Incledeする必要はありません。
出典はM5GFXのサンプルプログラムです。

センサー・入力
内部センサーの利用例となります
| No. | プログラム名 | 主要機能 |
|---|---|---|
| 3 | IMU | 加速度・ジャイロセンサー表示 |
| 4 | IMU_BallBox | ボール物理シミュレーション |
| 5 | Touch_GUI | タッチセンサー検出 |
| 6 | Touch_Drawing | タッチテスト(クリアボタン付き) |
| 7 | Touch_Multi | マルチタッチ対応 |
| 8 | MIC | マイク録音・再生機能 |
3~4. IMU関連
加速度センサーとジャイロスコープのリアルタイムデータを表示。
加速度データは(X, Y, Z軸)のどちらの方向に動いたか。ジャイロスコープデータは(X, Y, Z軸)中心にどの角度に回転したかを取得でき、リアルタイム更新をしています。
IMU_BallBoxはIMUセンサーのデータを使用したボール物理シミュレーションになります。

5~7. Touch関連
Tab5の画面タッチを検出するサンプルです。
5.シンプルな画面タッチ
6.画面タッチによる画面描画サンプル
7. 複数のタッチポイントを同時に検出するマルチタッチ機能のサンプル
8. MICによる音声入力
マイクで録音し、タッチで再生するプログラム。
リアルタイム音声録音と音声波形の表示。画面タッチで録音・再生の切り替えができます。
プログラムではM5.Micクラスを使用して、マイクの録音と再生機能を制御しています。録音時には波形がリアルタイムで更新され、画面をタッチすると録音を停止して再生します。また、タッチ後の再生内容は今回の録音およびそれ以前の全ての録音データを含みます。
出力・表示
画面描画の例としてテキスト、スプライトの活用とスピーカ出力のサンプルです
主にM5GFXライブラリののサンプルとなります。
| No. | プログラム名 | 主要機能 |
|---|---|---|
| 9 | Speaker | スピーカーテスト |
| 10 | Sprite | スプライト(メモリ描画領域)デモ |
| 11 | LongTextScroll | 長いテキストのスクロール表示 |
| 12 | TextLogScroll | テキストログの縦スクロール |
| 14 | SpinTile | スピンタイルアニメーション |
9.Speaker出力
Tab5の内蔵スピーカーを使用して、様々な周波数の音を出力するテストプログラムです。
スピーカーの動作確認と音階テストに使用できます。
10.Spriteによるちらつき防止
Tab5の大きな画面を更新したときに、単純に画面を書き換えると画面のちらつきが発生します。そこで、ちらつきを抑えるために一度メモリ領域を書き換えて、準備ができたら一気に画面に表示を行うことでちらつきを防止することができます。
このサンプルはメモリ描画領域(スプライト)を使用した描画デモプログラムです。直接描画とメモリ描画の違いを視覚的に比較できます。
14.SpinTile スプライトによる高速アニメーション
スプライトでは画像要素に対して背景とは独立して移動、回転、拡大・縮小などの操作も可能です。この機能を用いてTab5の画面に回転するタイル(タイル)アニメーションを表示するプログラムです。
11.LongTextScroll - 長いテキストのスクロール表示
このプログラムは、M5Stack Tab5の画面に長いテキストを横方向にスクロール表示します。画面幅を超える長いテキストを滑らかにスクロールさせて表示します。日本語テキストにも対応しています。
12.TextLogScroll - テキストログの縦スクロール
このプログラムは、M5Stack Tab5の画面に複数のテキスト行を縦方向にスクロール表示します。ログ形式のテキストを上から下へスクロールさせて表示します。キャンバス(スプライト)を使用して滑らかな表示を実現しています。
ゲーム・エンターテインメント
インタラクティブな例
| No. | プログラム名 | 主要機能 |
|---|---|---|
| 15 | GameOfLife | ライフゲーム |
| 16 | MP3Player | MP3プレイヤー |
15.GameOfLife - ライフゲーム
Conway's Game of Life(ライフゲーム)を実装したプログラムです。
このプログラムは、1970年にイギリスの数学者ジョン・ホートン・コンウェイによって考案されたセルオートマトン「ライフゲーム」を実装しています。セル(細胞)の生死のルールに基づいて、世代ごとにパターンが進化していきます。
16.MP3Player - MP3プレイヤー
SDカード上のMP3ファイルをM5Stack Tab5(M5Unified)で再生するためのタッチUI付きプレーヤーです。ファイル一覧表示・選択・再生制御を行えます。
利用時にはSDカードのルートフォルダにMP3ファイルを保存してください。SDカードを読み込みフォルダ内のファイルをリスト表示します
システム・通信
| No. | プログラム名 | 主要機能 |
|---|---|---|
| 17 | Power | バッテリー管理・監視 |
| 18 | RTC | リアルタイムクロック |
| 19 | SD | SDカード機能 |
| 22 | Serial | シリアル通信サンプル |
17.Power プログラム解説
このプログラムは、M5Stackデバイス(特にM5Tab5)の電源管理機能を使用して、バッテリーの充電状態、電圧、残量を監視し、ディスプレイに表示するプログラムです。電源管理IC(PMIC)の状態をリアルタイムで確認できます。
18.RTC プログラム解説
このプログラムは、M5StackデバイスのRTC(Real-Time Clock)を使用して、手動で時刻を設定し、ディスプレイに時刻を表示するプログラムです。SNTPプログラムとは異なり、ネットワーク接続なしでRTCの時刻を設定・表示します。
このプログラムではRTCの設定時にタイムサーバにアクセスしていません、そのため時刻はサンプルデータとなっています。SNTPを利用した時刻同期については2_Network編で解説予定です。
19.SD - SDカード機能
M5Stack Tab5のSDカード機能を使用して、ファイルの読み書きとPNG画像の表示を行うプログラムです。
このプログラムは、M5Stack Tab5のSDカードスロットを使用して、SDカード内のファイルを読み書きし、PNG画像を表示するデモプログラムです。テキストファイルの作成とPNG画像のループ再生を行います。
microSD カードを FAT32 形式でフォーマットし、ルートディレクトリに解像度 720x1280 の PNG 画像を2枚配置し、TestPicture01.png、TestPicture02.png と命名してください。(サンプル画像1、サンプル画像2 を直接ダウンロードしても構いません。画像の解像度が 720x1280 でない場合、プログラムの設定によって表示方式が変わり、表示が崩れる可能性があります。)
この SD カードを Tab5 に挿入してください。SD カードの端子面は Tab5 のスクリーンと同じ方向に向けます。上記コードを Arduino IDE にコピーしてコンパイルし、Tab5 に書き込みます。
このプログラムは SD カードに WriteTest.txt というテキストファイルを作成して文字列を書き込み、その後 SD カード内の PNG 画像2枚をループ再生します。
21.Serial - シリアル通信サンプル
M5Unified 対応のシリアル通信サンプル。LED制御とディスプレイ表示を組み合わせた基本サンプル。
機能:
- シリアル通信(115200bps)
- LED制御(GPIO 3)
- ディスプレイ出力
- M5Unified ライブラリ対応
USB Host
USB入力の活用
| No. | プログラム名 | 主要機能 |
|---|---|---|
| 23 | USB_Keyboard_Host | USB キーボード入力(EspUsbHost) |
| 24 | USB_Mouse_Host | USB マウス入力(EspUsbHost) |
23.USB_Keyboard_Host - USB キーボード入力
EspUsbHost ライブラリを使用した USB キーボード入力サンプル。USB Type-A ポートにキーボードを接続して入力を処理します。
機能:
- USB キーボード入力の受信
- 文字入力の画面・シリアル表示
- 修飾キー(Shift, Ctrl, Alt など)の検出
- 特殊キー(Enter, Backspace など)の処理
24.USB_Mouse_Host - USB マウス入力
EspUsbHost ライブラリを使用した USB マウス入力サンプル。USB Type-A ポートにマウスを接続して入力を処理します。
機能:
- USB マウス入力の受信
- マウス移動量の画面表示(カーソル表示)
- ボタンクリックの検出
- マウス接続状態の表示
Unit系デバイス
M5Unit活用例。手持ちデバイスだけなので偏っていますが。すべて実機確認しています。
| No. | プログラム名 | 主要機能 |
|---|---|---|
| 25 | UnitRFID2 | RFIDカード読み取り(PICCタイプ表示) |
| 26 | UnitRFID2_UID | RFID UID表示(シンプル版) |
| 27 | UnitRFID2_ReadWrite | RFIDカード読み書き |
| 28 | UnitByteSwitch | 8スイッチ・LED制御 |
| 29 | UnitQRCode_i2c | QRコード読み取り |
| 30 | HEX_SK6812 | Unit HEX LEDストリップ制御 |
25.UnitRFID2 - RFIDカードリーダーサンプル
M5Stack Tab5とUnit RFID2を使用してRFIDカードを読み取り、PICCタイプとUIDを表示するサンプルプログラムです。
このプログラムは、M5Stack Unit RFID2を使用してRFIDカードやタグを読み取り、以下の情報を表示します:
- PICCタイプ: カードの種類(MIFARE Classic、MIFARE Mini、MIFARE 4Kなど)
- UID: カードの一意の識別子(16進数形式)
26.UnitRFID2_UID - RFID UID表示(シンプル版)
M5Stack Tab5とUnit RFID2を使用してRFIDカードのUIDのみを表示するシンプルなプログラムです。
このプログラムは、M5Stack Unit RFID2を使用してRFIDカードやタグを読み取り、UID(一意の識別子)のみを画面に表示します。UnitRFID2.inoのシンプル版で、PICCタイプのチェックなどを行わず、UIDのみを表示します。
27.UnitRFID2_ReadWrite - RFIDカード読み書き
M5Stack Tab5とUnit RFID2を使用してRFIDカードの読み書きを行うプログラムです。タッチ操作でセクター/ブロック番号を選択し、データの読み書きが可能です。
このプログラムは、M5Stack Unit RFID2を使用してMIFARE Classicカードの読み書きを行います。画面をタッチしてセクター/ブロック番号を選択し、指定したブロックのデータを読み書きできます。シリアルモニターから書き込みデータを送信することも可能です。
28.UnitByteSwitch - Unit ByteSwitch制御
M5Stack Tab5とUnit ByteSwitchを使用して8つのスイッチとLEDを制御するプログラムです。
このプログラムは、M5Stack Unit ByteSwitchを制御して、8つのスイッチの状態を読み取り、各スイッチに対応するLEDの色を制御します。画面には各スイッチの状態が表示され、LEDは1秒ごとに色が変化します。
29.UnitQRCode_i2c - QRコードリーダー
M5Stack Tab5とUnit QRCodeを使用してQRコードを読み取るプログラムです。I2C通信でUnit QRCodeと接続し、自動または手動でQRコードをスキャンできます。
このプログラムは、M5Stack Unit QRCodeを使用してQRコードを読み取り、その内容を画面とシリアルモニターに表示します。自動スキャンモードと手動スキャンモードの両方に対応しており、読み取り状態もリアルタイムで表示されます。
30.HEX_SK6812 - Unit HEX LEDストリップ制御
M5Stack Unit HEX(SK6812 LEDストリップ)を制御して虹色のグラデーションエフェクトを表示するプログラムです。
このプログラムは、M5Stack Unit HEXに接続されたSK6812 LEDストリップ(37個のLED)を制御し、虹色のグラデーションエフェクトを表示します。色相値が時間とともに変化し、美しい虹色のアニメーションを実現します。
5. プログラム解説(2_ネットワーク編、3_GUI編)
・ネットワーク系サンプル(WiFi, HTTPS, MQTT など)Tab5_Network
・ GUI 系サンプル(LVGL)は、それぞれ Tab5_GUI になります。
6. まとめ
謝辞
サンプルプログラムの多くはM5Stack公式からの情報や、先人たちのプログラムをベースに、自分なりに整理したものとなっています。皆様に感謝です。
また、なるべく原典を記載していますので、より詳細に把握したい方はLinkを活用ください。
とりあえず1_基礎編以外のコードもすでにGit上に上げていますが、ネットワーク編、GUI編についても記事として整理して共有できればと思っています。公開できるレベルになったらこの記事にリンクをつけていきたいと思っていますので、それまでは実際にTab5で試すなど使い倒して、情報共有いただけると嬉しいです。それではメリークリスマス&よいお年を。
Links
このプロジェクトのサンプルは、以下の資料やWebサイトを参考に作成されています。
公式ドキュメント
サンプル別参考リンク
GameOfLife
MP3Player
IMU / IMU_BallBox
Unit系デバイス (RFID, QRCode, ByteSwitch, HEX)
- M5Stack Unit RFID2
- M5Stack Unit QRCode
- M5Stack Unit Byte
- M5Stack Unit HEX
- FastLED ライブラリ GitHub
- MFRC522 I2C ライブラリ
























