引っ越し後にGPSのデバイス制作のため、M5stackを購入。
そういえばプログミングの勉強を開始した時に購入して以来になります。
これで今は亡き祖母の当時在宅介護で寝返りのタイミングを自室に知らせるプログラムを作ったのを今でも覚えています。
ずっとPythonばっかり触っていたので、久しぶりにコンパイル系の言語を触るため、ちょっとドキドキ。
とりあえず動作確認に簡単なストップウォッチを作成しようと思います。
準備
基本的にアルディーノでいいと思います。
他の方法はこちらの記事。
チップにESP32を使っているので、インストールしましょう。
ツール › ボード から ESP32 Arduino › M5Stack-Core-ESP32 を選択。
基本ESP32だけでも出てきます。

これめっちゃ注意してほしいのが、バージョン3以降は動作不安定です。
2のどれかにすると動きました。
次にM5Stackのライブラリをインストール。
ライブラリマネージャーからすぐに見つかります。

ただし、ライブラリは現在M5Unifiedを使うといいそうです。
また、めちゃ重要なことが、アップロード速度を115200にすること。
921600だとエラーでも、落とすと、無事にアップロードできました。

簡単なプログラム
動作確認がてら簡単なストップウォッチでテスト。
真ん中のボタンでスタート、右のボタンでストップ、一番左でリセットのシンプル構成です。
/**
* @file M5Stopwatch_v2.ino
* @brief M5Stack Basic 3ボタン・ストップウォッチ
* BtnA : RESET(00:00 待機)
* BtnB : START
* BtnC : STOP(保持)
* @note ライブラリ : M5Unified
* ボード : ESP32 Dev Module
*/
#include <M5Unified.h>
bool running = false;
uint32_t startMs = 0; // 計測開始時刻
uint32_t holdMs = 0; // 停止保持時刻
// ────────────────────────────────────────────────
void drawTime(uint32_t ms) {
uint32_t sec = (ms / 1000) % 60;
uint32_t min = ms / 60000;
char buf[8];
sprintf(buf, "%02lu:%02lu", min, sec); // 00:00 形式
// 画面中央に大きく表示(font 7 が幅160px 高さ26px程度)
M5.Display.setTextSize(1); // font7 は setTextSize で倍率変化しない
M5.Display.setTextColor(TFT_WHITE, TFT_BLACK);
M5.Display.drawCentreString(buf, 160, 100, 7);
}
// ────────────────────────────────────────────────
void resetScreen() {
running = false;
holdMs = 0;
M5.Display.fillScreen(TFT_BLACK);
M5.Display.setTextColor(TFT_WHITE);
M5.Display.setTextSize(2);
M5.Display.drawCentreString("STOPWATCH", 160, 30, 4);
drawTime(0); // 00:00 表示
}
// ────────────────────────────────────────────────
void setup() {
M5.begin();
M5.Display.setRotation(1); // 横向き
resetScreen();
}
// ────────────────────────────────────────────────
void loop() {
M5.update();
// ① BtnA : RESET
if (M5.BtnA.wasPressed()) {
resetScreen();
}
// ② BtnB : START
if (M5.BtnB.wasPressed() && !running) {
running = true;
startMs = millis();
}
// ③ BtnC : STOP
if (M5.BtnC.wasPressed() && running) {
running = false;
holdMs = millis() - startMs;
drawTime(holdMs);
}
// 計測中はリアルタイム更新
if (running) {
uint32_t now = millis() - startMs;
drawTime(now);
}
delay(50); // 負荷軽減
}

無事に動作チェック完了。

音楽家:朝比奈幸太郎
神戸生まれ。2025 年、40 年近く住んだ神戸を離れ北海道・十勝へ移住。
録音エンジニア五島昭彦氏より金田式バランス電流伝送 DC 録音技術を承継し、
ヴィンテージ機材で高品位録音を実践。
ヒーリング音響ブランド「Curanz Sounds」でソルフェジオ周波数音源を配信。
“音の文化を未来へ”届ける活動を展開中。