M5Stack LjPlay の DMX が止まる原因の解析と改修

2026-10-19 の試験(約 50 分の録画 2 本)から。止まったのは M5 ではなく、DMX 受信機(USB-DMX-PRO 互換)。計測の案内・不良個所・原因・修正内容を、時間軸つきでまとめた / スタッフ限定・社外に出さないこと

この試験の目的

LjPlay は、M5Stack のような簡易な ESP32 の機器で、LjStudio で作った照明のデータを SD カードから読み込んで再生する装置です。別に作ったカレンダータイマー(季節と時間帯のスケジュールでシーン番号を出す)から指令を受けて、時間単位でいろいろなシーンを動かすことを想定しています。

設置したあとは人がいない状態で、何か月も動き続けること(無人運転)が基本です。そのため、DMX が止まらずに安定して出続けること、時刻がずれないこと、止まっても自分で戻ることを、出荷の前に段階を踏んで確かめる必要があります。

この頁は、その出荷前の試験プログラムの記録です。2026-10-19 の試験で見つかった不良(DMX が止まって見えた件)の原因と直した内容をまとめ、より精度の高い、より安定したものになるまで、検査と修正を続けて、出荷できる完全なものに仕上げていきます。当面の目標は 12 時間の連続運転で途切れ 0 回、最終の目標は 4 か月の無人運転です。

この頁で分かること
  1. 動画で見る(約 11:06)
  2. 結論(先に)
  3. 計測の案内(構成・手順・画面の見方・表示の読み方)
  4. 時間軸(いつ何が起きて、何を直したか)
  5. 不良個所と原因と修正内容(①〜⑥)
  6. 受信機のファーム担当への改善要望(ウォッチドッグ)
  7. M5 側で確認が要る点(calc・OVERRUN)
  8. 残っている課題と次の一手
  9. 使った機器・道具・資料の場所
  10. 追記 ― 外部 12V(電池)の関与(給電)

0. 動画で見る

LjPlay 出荷前の検査 ― 目的と試験のしくみ ― 動画公開準備中

検査の目的と試験のしくみ(1 時間の試験の 1 回目の結果つき・約 5:44・音声つき・VOICEVOX:No.7)

  1. 0:00 はじめに / 0:13 LjPlay とは / 0:35 無人運転が基本 / 1:01 試験の段階 / 1:27 試験台の構成 / 2:01 監視画面
  2. 2:25 試験中の録画(オシロの DMX 波形) / 2:50 3 台の時計がそろっている / 3:26 S1 1 回目の結果 / 4:22 受信機 COM86 が止まった瞬間 / 4:36 今日分かった課題 / 5:16 これから
M5Stack LjPlay の DMX 止まりの解析 ― 動画公開準備中

計測の案内つき・不良個所と原因と修正内容(約 11:06・音声つき・VOICEVOX:No.7)

  1. 0:00 はじめに / 0:17 測定の構成 / 0:52 計測の手順 / 1:29 監視画面の見方 / 2:24 表示の読み方 / 3:03 止まりの年表
  2. 3:53 11:36 A が無音・M5 は動作中 / 4:24 受信機を直接読む / 4:55 13:33 受信機のリセットで復旧 / 5:16 13:58 B が無音・COM74 は動作中
  3. 6:01 不良① 受信機が固まる / 6:41 不良② 一致の表示 / 7:16 不良③ 基準と表示精度 / 7:51 不良④ C が 0 に戻らない / 8:39 不良⑤ 録画の切り離し
  4. 9:08 M5 の calc と OVERRUN / 10:06 受信機への改善要望 / 10:35 まとめ

0-2. 試験の進め方(出荷までの検査計画)

段階ごとに時間を延ばし、条件を本番に近づけます。NG(DMX の途切れ)が出た段階は、原因を直したあと最初からやり直します。

段階内容合格
S11 時間 × 3 回連続(試験台)途切れ 0 回 × 3
S212 時間(夜間)途切れ 0・送出失敗 0・再起動 0・2 台の時刻のずれ ±1 秒
S372 時間・途中で監視の PC を再起動監視が止まっても M5 は出し続ける
S4外乱(電源の瞬断・USB/SD/DMX 線の抜き差し・温度)自分で戻る(戻るまでの秒数を記録)
S57 日・本番の電源と配線・灯体あり(人の立会い)途切れ 0・時刻のずれが決めた方式で ±1 秒
S630 日・本番相当・遠隔監視月次点検の手順で問題なし

1. 結論(先に)

訂正: 当初の記録(同日の連絡ファイル)では「COM73 の DMX が線の上で止まった」と書いたが、取り消し。止まっていたのは受信機側だった。

2. 計測の案内

2-1 測定の構成

M5 の DMX は XLR で USB の受信機に入り、PC の監視が読む。LjStudio-play(C)は Art-Net で PC の中で受ける。
M5 の DMX は XLR で USB の受信機に入り、PC の監視が読む。LjStudio-play(C)は Art-Net で PC の中で受ける。

2-2 手順(4 ステップ)

監視を起動 → 「0 から全部スタート」→「● 録画 開始」→ 止まったら診断を読む
監視を起動 → 「0 から全部スタート」→「● 録画 開始」→ 止まったら診断を読む

2-3 監視画面の見方

番号は図の下の説明と同じ。ずれの精度は ±3 ms 程度なので、小数は出さず整数で表示する。
番号は図の下の説明と同じ。ずれの精度は ±3 ms 程度なので、小数は出さず整数で表示する。

2-4 表示の読み方(正常と異常)

受信は A・B が 30/秒、C が 40/秒なら正常。診断が「受信機が無音・M5 は動作中」なら受信機の停止。
受信は A・B が 30/秒、C が 40/秒なら正常。診断が「受信機が無音・M5 は動作中」なら受信機の停止。
録画中は、エクスプローラーでファイルのサイズが 0 のままに見えるが、実際は書けている(開いている間は一覧が更新されない)。サイズを見るのは録画を止めてから。

3. 時間軸(いつ何が起きて、何を直したか)

録画から 1 分ごとに受信の有無を数えた。緑=受信中・赤=録画があるのに無音・灰色=録画なし/監視を入れ替えていた(不明)
録画から 1 分ごとに受信の有無を数えた。緑=受信中・赤=録画があるのに無音・灰色=録画なし/監視を入れ替えていた(不明)
時刻出来事区分メモ
09:21 / 09:32 / 10:01A(受信機 COM86)の受信が 0 になる。監視の開き直しで戻る場合と戻らない場合不良①当初は「M5 の出力が止まった」と見立てたが、後に受信機側と判明
10:15受信機を開き直すタイマーが一度も動かないバグを修正(5 秒の再受信要求が同じ時計を戻していた)修正別の時計に分けた
10:21録画を監視から切り離す(映像は別プロセス rec_video.py)修正 ⑤監視を止めると録画も止まる問題
10:27データの突き合わせ(全 ch)を追加。「データ ★不一致」の表示修正 ②時刻だけ見て「一致」としていた問題
10:4650 分の連続録画を開始。B(COM61)は 65 分間、一度も受信できない不良①録画で確認
10:49監視を起動し直す(録画は同じ録画の続きに入る)確認 ⑤切り離しの確かめ
10:50「0 から全部スタート」ボタンを追加・実行。A・B は 0 に戻り、C(LjStudio-play)は途中から不良 ④C のタイマー ch が 36 秒進んだまま
11:36A の受信が 0(以降 12:51 まで)。M5 の液晶は RUNNING・TX 30Hz のまま不良①動画 clipA
11:50録画停止(約 64 分)
12:51見張りが `startall` を送り直す → A・B が復活M5 の再スタートで受信機が再同期した可能性
13:08「0 から全部スタート」が LjRun へ `restart` も送るようにする修正 ④その後の 0 スタートで 3 つの時刻が 0.1 秒以内に揃う
13:142 本目の録画を開始(約 48 分)
13:20ずれの基準を A から LjStudio-play(C)に変更修正 ③A が常に 0 で、基準が違った
13:22A の受信が 0(13:33 まで約 11 分)不良①
13:27ずれ・幅・ドリフトを整数表示にする(精度は ±3 ms 程度)修正 ③小数 2 桁は精度に見合わない
13:30監視を止めて受信機を直接読む。COM86 は 0 バイト(問い合わせには返事)、COM61 は 4 秒で 122 フレーム原因の切り分け受信機は USB では生きている
13:33COM86 を物理リセット → A の受信が戻る確認動画 clipB
13:35受信機を入れ替え。両方受信中確認
13:53–13:59B(COM61)が 6 分間無音。COM74 の液晶は RUNNING のまま。13:59 に COM86 を抜き差しすると A と B が同時に戻る不良①USB の接続・給電の関与も残る。動画 clipC
13:58M5 本体の同時観察(3 秒ごとに状態を問い合わせ)と診断を追加修正 ①受信機が無音で M5 が動作中なら「受信機の停止」と出す
14:02録画停止(約 48 分)
14:05受信機のファーム担当(Ws)へ、ウォッチドッグの改善要望を依頼要望E:\_ai_requests\

4. 不良個所と原因と修正内容

① 受信機(USB-DMX-PRO)が固まる

11:36 の録画。右下の監視画面で A の受信が 0/秒。左上の M5 液晶(COM73)は RUNNING・TX 30Hz で時間も進んでいる。
11:36 の録画。右下の監視画面で A の受信が 0/秒。左上の M5 液晶(COM73)は RUNNING・TX 30Hz で時間も進んでいる。
13:58 の録画。B(受信機 COM61)は 13:53 から受信 0/秒。COM74 の液晶は RUNNING・TX 30Hz。
13:58 の録画。B(受信機 COM61)は 13:53 から受信 0/秒。COM74 の液晶は RUNNING・TX 30Hz。
13:30 に監視を止めて受信機を直接読んだ結果。COM86 は DMX 0 バイト(問い合わせには返事)、COM61 は 4 秒で 122 フレーム。
13:30 に監視を止めて受信機を直接読んだ結果。COM86 は DMX 0 バイト(問い合わせには返事)、COM61 は 4 秒で 122 フレーム。
13:33 COM86 を物理リセットした直後。A の受信が 30/秒に戻った。
13:33 COM86 を物理リセットした直後。A の受信が 30/秒に戻った。
各枠の「M5 本体」の行: 応答あり・経過時間・診断(正常/受信機の停止/M5 側を疑う)
各枠の「M5 本体」の行: 応答あり・経過時間・診断(正常/受信機の停止/M5 側を疑う)
受信機M5 本体診断
無音動作中★受信機(USB-DMX-PRO)の停止
届いている応答なし制御側(USB)だけの問題
無音応答なし★M5 側を疑う

② 「一致」と出るのに、データは違う

修正後の表示。見出しに「データ ★不一致」。下に全 ch の突き合わせ結果。
修正後の表示。見出しに「データ ★不一致」。下に全 ch の突き合わせ結果。

③ ずれの基準が A のままだった / 小数が出ていた

基準 C に対するずれ。A・B は +65〜+93 ms 前後(C より進んでいる)。
基準 C に対するずれ。A・B は +65〜+93 ms 前後(C より進んでいる)。

④ LjStudio-play(C)が 0 に戻らない

最初の 0 スタートで、C だけ途中から(ch12 のタイマーが 36 秒進んでいた)。
最初の 0 スタートで、C だけ途中から(ch12 のタイマーが 36 秒進んでいた)。

⑤ 監視を止めると、録画も止まる

映像は別のプロセス(rec_video.py)が撮る。監視が止まっても映像は続き、起動し直すと同じ録画の続きに入る。
映像は別のプロセス(rec_video.py)が撮る。監視が止まっても映像は続き、起動し直すと同じ録画の続きに入る。

⑥ 表示の精度(③と同じ修正)

「1 ms 未満は出さない」と画面に書いた。精度が不明な数字は表示しない、という方針。

5. 受信機のファーム担当への改善要望(ウォッチドッグ)

Ws へ依頼済み(E:\_ai_requests\2026-10-19_tool_cs_to_Ws_USB-DMX-PRO受信機が固まる_ウォッチドッグ改善要望.md)
Ws へ依頼済み(E:\_ai_requests\2026-10-19_tool_cs_to_Ws_USB-DMX-PRO受信機が固まる_ウォッチドッグ改善要望.md)
  1. ウォッチドッグ: 直近 3 秒、DMX フレームを 1 つも受けない → 受信側(UART・esp_dmx)を再初期化。10 秒で戻らなければ esp_restart()(USB から見ると物理リセットと同じ)。頻発しないよう間隔を広げ、回数を数える。
  2. USB 送信を詰まらせない: 書き込みにタイムアウト。ホストが読まないときは古いフレームを捨てて最新だけ送る。DTR の再接続で受信を再開。
  3. 診断の出口: 最後に受けてからの ms・フレーム数・BREAK 数・オーバーフロー数・再初期化回数・USB 書込タイムアウト回数。「ライン上の活動はあるのにフレームが来ない」か「ラインが無音」かで、固まりの場所が切り分けられる。
受け入れ条件: 受信機 2 台で LjPlay 2 台の DMX(512 固定長・30Hz)を 60 分連続で受け、無音が 2 秒を超えた回数が 0 を 3 回連続で完走(rec_marathon.py で判定)。人為的に固めた後(ホストを 20 秒読まない・XLR を抜き差し)も 10 秒以内に自己復帰して 30Hz に戻る。

6. M5 側で確認が要る点(calc・OVERRUN)

左=10:46 開始の録画(calc 1466µs・2485µs・OVERRUN なし)/ 右=13:14 開始の録画(calc 47636µs・66154µs・RUNNING [OVERRUN])
左=10:46 開始の録画(calc 1466µs・2485µs・OVERRUN なし)/ 右=13:14 開始の録画(calc 47636µs・66154µs・RUNNING [OVERRUN])

7. 残っている課題と次の一手

8. 使った機器・道具・資料の場所

9. 追記 ― DMX-BASE の外部 12V(電池)の関与(2026-10-19 夕方)

この頁の結論「止まったのは M5 ではなく受信機」との関係は、整理中です。 下の事実が分かったため、時間軸の「止まり」のうち、電池で説明できるものと、受信機の固着で説明できるものを、ログで分けて確かめています。分け終わったら、結論の文言と動画の説明を直します。

最終更新 2026-10-21 07:21(9 章を追記) / スタッフ限定。写真は、照明を接続せず、試験台の機器だけで撮った画面(右端ディスプレイのみ)。時刻と数字は、監視のログ・録画・試験の表示から拾いました。