USB-DMX-PRO 受信機で DMX を 1 フレームずつ測る ― LjPlay 2 台の 85 分記録
2026-10-23 夜の試験。受信機のファームを FW2.9 にして、DMX の線の周期・BREAK・MAB・実際の長さ・誤りを全フレーム、時刻つきで記録した。数値には〔実測〕〔推定〕を付けている。
結論
① 触らずに置いた 85 分 (約 15 万フレーム × 2 台) は、乱れ 0〔実測〕。COM74 (CoreS3 + DMX-BASE) の線も、COM23 (Core2) の線も、誤り・余分な BREAK・長さの変化・周期の外れ・途切れが 1 回も無かった。
② この夜に見えた乱れ (21:21・21:43・21:48) は、どれも本人の操作か接触のときだった。乱れの形は「0.1 秒の間に 2 フレームが途中で切れる」。
③ 受信機が出した「長さ 350・306・221」は、送り側の M5 ではなく、受信機 (esp_dmx) が一度縮めた長さを戻さない癖だった。受信機を起動し直すと 512 に戻った〔実測〕。
④ WIO で見た「長さ変化 3227 回」(COM74 の線) は、いつ起きたかの記録が無いので、この夜の記録からは原因を言えない。今後は受信機の記録で時刻つきで捉えられる。
0. 動画で見る
公開準備中
USB-DMX-PRO 受信機で DMX を 1 フレームずつ測る (約 5 分 30 秒・音声と字幕つき)
- 0:00 はじめに / 0:12 結論 / 0:41 きっかけ: WIO の長さ変化 3227 / 1:07 試験の構成 / 1:41 記録の窓の検査の行(映像) / 2:29 ch41〜50 の時刻
- 2:50 DoctorMX で確かめる / 3:07 この夜の出来事 / 3:45 受信機の長さの固着 / 4:10 85 分の記録 / 4:44 フレームの周期 / 5:04 まとめと次の一手
1. 何をしたか
試験の構成。LjPlay 2 台がタイマー (COM33) の BLE で同じショーを再生し、それぞれの DMX を受信機 1 台ずつで受けて PC に記録した。
- 受信機のファーム FW2.9 (SuperMini S3 の USB-DMX-PRO 互換機 COM96・COM115): PC から命令したときだけ、全フレームについて「BREAK の時刻 (周期)・BREAK と MAB の長さ・実際の長さ・誤り」を通し番号つきで送る。配線は足していない (受信ピンの割込みで BREAK・MAB を測る)。命令しなければ前の FW2.8 と同じ動き。
- LjPlay の ch41〜50 (COM23・COM74): ビルド日時・今の時刻 (タイマーに BLE で合わせた時刻)・1/100 秒・COM 番号を毎フレーム出す。ch1〜40 は演出。受信側は「ありえない値 (化け)・時刻の戻り・飛び」でフレームの割れを見つけられる。
- 記録の窓 (tool_cs の DmxUsbProMonitorM5): 受信機ごとに 1 秒 1 行の CSV に残す (Hz・長さ・誤り・周期・BREAK・MAB・化け・戻り・飛び・途切れ)。
2. きっかけ: WIO の「長さ変化 3227」
WIO Terminal の DMX モニター 2 台 (本人撮影)。左下の数は「隣のフレームと長さが違った回数」の累計。半日で COM74 の線 3227 回 / COM23 の線 3 回〔実測〕。数だけで、いつ起きたかは残らない。
COM74 側の送信機 (LjPlay) は、同じ時間に送り出しの失敗 0・周期超過 0 だった〔実測、STATUS〕。M5 の中からは乱れが見えないので、線の上を全フレーム測る受信機を作った。
3. ch41〜50 と DoctorMX
受信の窓 2 つと LjPlay の液晶。ch41〜45 = ビルド (26/10/23 20:19 と 20:49)、ch46〜49 = 今の時刻 (20:53:59.54 と 20:53:59.56)、ch50 = COM 番号 (74 と 23)。2 台の時刻の差は 0.02 秒〔実測〕。
市販の DoctorMX で COM74 の線を見たところ: BREAK 177µs・MAB 12µs・512ch・30Hz。受信機 FW2.9 の測り値 (BREAK 171〜183µs・MAB 7〜20µs) と合う。規格 (DMX512-A) は BREAK 92µs 以上・MAB 12µs 以上。
4. この夜の出来事
| 時刻 | 線 | 出来事 | 区分 |
| 20:19 / 20:50 | COM74 / COM23 | LjPlay に ch41〜50 の修正版を書込み | 準備 |
| 21:09 / 21:11 | 受信機 | COM96・COM115 に FW2.9 を書込み | 準備 |
| 21:21:02 | COM74 | 46 秒ほど無信号 → 21:21:48 に電源投入で起動 | 本人の操作 |
| 21:24〜21:44 | COM74 (COM115) | 受信機が長さ 350 (349〜351ch) と報告し続ける | 受信機の癖 (5 章) |
| 21:43:54 | COM23 (COM96) | 0.1 秒で 2 フレームが途中で切れる → 長さ 221ch に固着 | 接触の見込み |
| 21:45 | 受信機 | 2 台を起動し直し → 長さ 512 に戻る | 確認 |
| 21:48:07 | COM23 (COM96) | 2 フレームが途中で切れる → 306ch に固着 | 本人が COM115 に接触 |
| 21:48:40 | COM115 | 受信機が USB ごと外れる | 本人の接触 |
| 21:52:20 | 両方 | 長時間の記録を開始 (21:51 に COM96 を起動し直し) | 記録 |
| 23:17:50 | 両方 | 記録を終了。この間の乱れ 0 | 結果 |
1 秒ごとの受信数 (Hz)。灰色は受信機を起動し直していた間。29〜31 の細かい上下は、1 秒の区切りとフレームの区切りのずれで、乱れではない。
5. 受信機の「長さの固着」
受信機が測った実際の長さ (1 秒ごとの最小)。一度縮むと、受信機を起動し直すまで戻らない。
- 受信機のライブラリ esp_dmx は、フレームの途中で次の BREAK が来ると「期待する長さ」をそこまでに縮める。縮んだ後は、その長さに届いた時点で 1 フレームとみなすので、後のフレームが全長でも長さを直さない (esp_dmx 4.1 のソースで確認)。
- 21:21 は COM74 の電源断で最後のフレームが約 349 スロットで切れ、21:43・21:48 は接触で切れた。そこで縮んだ。
- PC へ送る 512ch のデータは、受信機のバッファに全部たまるので、ほぼ正常に見える (後半の ch が 1 フレーム古いことがある)。長さを出さない限り気づけない。
- 次の一手: 受信機が自分で 512 に戻る直し (本人の判断待ち)。
6. 85 分の記録 (触らずに置いた)
| 項目 | COM74 の線 (受信機 COM115) | COM23 の線 (受信機 COM96) |
| 記録した時間 | 21:52:23〜23:17:49 (5127 秒) | 21:52:23〜23:17:51 (5129 秒) |
| 受けたフレーム | 153,811 | 153,869 |
| 周期 (BREAK の始まりどうしの差) 最小〜最大 | 33.085〜33.662 ms | 33.171〜33.491 ms |
| 1 秒の中の周期の揺れ (最大 − 最小、中央値) | 0.30 ms | 0.10 ms |
| BREAK の長さ | 171〜183 µs | 167〜181 µs |
| MAB の長さ (※割込みの揺れ ±5µs 込み) | 7〜20 µs | 6〜20 µs |
| 実際の長さ | 512〜512 ch | 512〜512 ch |
| 枠の誤り / 余分な BREAK / 短い BREAK | 0 / 0 / 0 | 0 / 0 / 0 |
| 長さの変化 / 周期の外れ / 記録の抜け / 途切れ | 0 / 0 / 0 / 0 | 0 / 0 / 0 / 0 |
| ch41〜50 の 化け / 戻り / 飛び / 大飛び | 0 / 0 / 0 / 0 | 0 / 0 / 0 / 0 |
乱れの合計: COM74 の線 0 / COM23 の線 0〔実測〕。
フレーム周期 (1 秒ごとの最小〜最大)。点線が 33.333ms (30Hz)。
まだ分からないこと: COM74 の線は、1 秒の中の周期の揺れが COM23 の線の約 2.9 倍ある (0.30ms と 0.10ms)。規格の上では問題にならない幅だが、原因 (CoreS3 の送り方か、DMX-BASE か) は調べていない〔未調査〕。
7. 次の一手
- 受信機が「長さの固着」から自分で戻る直し (本人の判断待ち)。
- WIO の「長さ変化」がまた増えたら、同じ時刻の受信機の記録で、どの乱れかを照らし合わせる。
- COM74 の線の周期の揺れの原因を、送り方を変えて比べる。
- PicoScope (dmxwave) で、乱れた瞬間の波形を残す (道具の直しは検討中)。
8. 資料
- 受信機の仕様 (0xF5〜0xF7):
Dmx_Tool_M5/stamps3-EnttecPro-Clone/DOCS/USB_DMX_PRO_独自拡張仕様.md
- 受信機のファーム:
stamps3-EnttecPro-Clone/src_fd/main_fd.cpp (env supermini-s3-usbpro-fd)
- LjPlay の ch41〜50:
LjPlay/src/main.cpp の fillInfoCh()
- 記録 (CSV):
e:\tmp\ai_dmxpromon\rxstat_2_20261023_215220.csv・rxstat_3_20261023_215221.csv
- 経過の記録:
LjPlay/DOCS/LjPlay_継続検査_給電条件記録.md
- PC 側の道具:
Dmx_Tool_M5/tools/usbdmx_watch.py