ESP32 LED時計 + BLEコンソール + タイマー機能 要求仕様(整理版)

Version: v0.1 (仕様検討段階) Generated: 2026-07-28 (JST)
1. 表示仕様(3ゾーン構成、既存ハードウェア: 9台のMAX7219 8x8マトリクス)
Zone1(4デバイス): 日付表示エリア 兼 ステータス表示エリア
- 通常時: 西暦+曜日 ⇔ 和暦+曜日 を交互に表示
- 例:
2026/07/28(火)→R08.07.28(火) - ノンストップ、ブランクなしでスクロール(前の文字列が画面外に出たら即座に次の文字列が入ってくる。停止時間・空白時間を挟まない)
- 1周ごとに西暦→和暦→西暦…と順に切替(既存の
z1_modeトグルと同じロジックを継続使用)
- 例:
- BT接続設定モード時: 日付表示を中断し、ステータス表示専用エリアに切替
- 表示内容(案): 接続状態、コマンド実行結果、設定中のTMR番号など
- タイマー設定モード時:
TMR01 ON/TMR02 OFFのようにスロット番号+ON/OFF種別を表示
Zone2(3デバイス): 時刻表示エリア
- 24時間制固定(
HH:MM) - 既知の課題: 標準フォントだと3モジュール(24ドット)幅に収まらず、分の下一桁が欠ける
- 対策:
charSpacing=0を適用済み。それでも欠ける場合はZone3から1モジュール譲る(モジュール再配分)で対応(前回のv3で暫定対応コード済み、実機再検証が必要)
- 対策:
Zone3(2デバイス): 秒表示エリア
- 理想: 1桁ずつの縦スクロール。2桁同時に切り替わる場合もブランクを挟まず、連続した回転ドラム風の見た目
- MD_Parolaの標準スクロール効果(
PA_SCROLL_UP等)ではテキスト単位の切替になるため、厳密な「ブランクなし連続回転」は標準機能では再現困難 - 今回の方針(暫定デフォルト): 段階的に実装する
- Phase A(まず動作優先): 演出なしの瞬間切替(00→01→02…とただ表示更新するだけ)
- Phase B(余裕があれば): MD_MAX72xxを直接制御した自前のドラム風縦スクロールを追加実装
- 理由: ドラム演出は難度が高く、他機能(タイマー・BLE)を安定させてから取り組んだほうがリスクが低いため
2. BTコンソール接続時の挙動
- BLE UART(Nordic UART Service互換)は常時起動(前回の単体テストで動作確認済み: 接続安定性・双方向通信OK)
- BLEクライアントが接続し、設定コマンドを送信するモードに入ったら、Zone1を時計表示からステータス表示に切替
- 具体的なコマンド体系(何を打つとどう反応するか)は別途設計(下記セクション4参照)
3. タイマー機能(TMR00〜99)
3.1 基本構造
- スロット番号:
TMR00〜TMR99(最大100件) - 各スロットに ON時刻 と OFF時刻 を設定
- 設定モード中は、Zone1に
TMR01 ONのようにスロット+種別、Zone2にその時刻を表示
3.2 繰り返しパターン(理想仕様)
各スロットに以下のいずれかの繰り返し条件を設定したい:
| 種別 | 内容 |
|---|---|
| 日にち指定 | 毎月の特定日(例: 毎月15日) |
| 月指定 | 特定の月(例: 4月のみ) |
| 曜日指定 | 特定の曜日の組み合わせ(例: 月・水・金) |
| 常時指定 | 毎日 |
3.3 排他制御・警告
- スロット同士で時間帯が重複する場合、警告フラグを立てる
- 「重複」の具体的な判定基準は要検討(例: 同じ曜日/日付条件下でON〜OFFの時間帯が重なる場合、等)
3.4 今回の暫定方針(要件確認待ちのためデフォルト採用)
- 制御対象: 現時点では専用の外部出力ハードウェア(リレー等)の言及がないため、LED表示+オンボードLED通知のみをデフォルトとする(既存の
ALARM_PINと同じ仕組みを流用)- 外部機器のON/OFF制御が本当に必要な場合は、リレーモジュール等の追加ハードウェアと専用GPIOが必要になるため、別途ご確認ください
- 必要件数: データ構造は将来100件まで拡張可能な設計にしつつ、初期実装・BLEコンソールでの動作確認は**少数件(例: 5〜10件)**からスタートすることを推奨
- 理由: 100件全てに(ON時刻・OFF時刻・繰り返し種別・曜日/日付/月のマスク)を持たせると、BLEコンソールでのテキスト入力・確認が非常に煩雑になるため、まず少数で操作フローを固めてから件数を拡張する方が手戻りが少ない
-

4. 未決事項(次に詰めるべきポイント)
- BLEコンソールのコマンド体系: まだ未設計。例えば以下のような形式が考えられます(たたき台):
TMR01 ON 07:00 MON,WED,FRIのような1行コマンドで登録TMR01?で現在の設定を問い合わせTMR LISTで一覧表示TMR01 DELで削除
- 排他制御の判定ルール: 「重複」の定義(時間帯だけ見るか、曜日/日付条件も含めて判定するか)
- Zone3ドラム演出: Phase Aで一旦様子を見て、Phase Bに進むかどうかは実装後に再判断
- TMR ON/OFFの実際の制御対象: 外部出力(リレー等)が将来的に必要になるか

5. 実装の進め方
要件が多岐にわたるため、以下の順序で段階的に進めることを検討します。
- Step1: Zone1(西暦/和暦+曜日、ノンストップスクロール)とZone2(24時間表示、桁欠け対策の再検証)の表示ロジックを先に固める
- Step2: Zone3は演出なし(瞬間切替)でまず組み込み、他機能を安定させる
- Step3: BLE UARTを常時起動として統合し、接続時にZone1をステータス表示に切替える処理を追加
- Step4: TMR機能を少数件(5〜10件)からBLEコンソールコマンドで実装し、動作確認
- Step5: 件数拡張・繰り返しパターン(日/月/曜日/常時)・排他制御警告を順次追加
- Step6(余裕があれば): Zone3のドラム風演出を追加実装





