どーも、ぐるたか@guru_takaです。
USBDMXProとMaxでDMX送受信する機会があり、自前で実装しました。そのときに学んだことを備忘録としてまとめます。
- 情報が古い
- 受信側に対し、時々不具合っぽいのがある
- 商用ではコンタクト必要
DMX送信について
DMX送信では、以下のような配列を送ると、指定したDMXアドレスに値を送信できます。
下記は最低限の配列値になります。
126 6 2 0 0 $1 231
意味は以下の通りです。
126 | メッセージ開始の合図(16進数:0x7E) |
6 | メッセージのタイプ |
2 | DMXチャンネル数のLSB (配列内の送信チャンネル数+1を256で割ったときの余り) |
0 | DMXチャンネル数のMSB (配列内の送信チャンネル数+1を256で割ったときの商) |
0 | DMXチャンネル0の値(使用しないが、常に存在) |
$1 | DMXチャンネル1に送信する変数値 |
231 | メッセージ終了の合図(16進数:0xE7) |
上記で紹介したのは、DMXの全体のチャンネル数が1としたものです。もし2つの場合は、126 6 3 0 0 $1 $2 231
となります。
詳細は公式のDMX USB Pro Widget API Specificationをご覧ください。色々なメッセージのタイプも載っています。
以下、公式ドキュメント内にあるDMX USB Pro Widget API Specificationの説明テーブルです。
126 6 245 1 0 …
となるので、注意しましょう!DMX受信について
DMX受信のデータ配列はこちらになります。下記は最低限の配列値です。
126 5 3 0 0 0 $1 231
意味は以下の通りです。
126 | メッセージ開始の合図(16進数:0x7E) |
5 | メッセージのタイプ |
3 | DMXチャンネル数のLSB (配列内の送信チャンネル数+2を256で割ったときの余り) |
0 | DMXチャンネル数のMSB (配列内の送信チャンネル数+2を256で割ったときの商) |
0 | DMXチャンネル0の値(使用しないが、常に存在) |
0 | DMXの受信ステータス(0:正常、1:異常) |
$1 | DMXチャンネル1に送信された変数値 |
231 | メッセージ終了の合図(16進数:0xE7) |
送信と異なるのは、メッセージのタイプと、DMX受信ステータスがあることでしょう。こちらも、公式のDMX USB Pro Widget API Specification 1.44に記載されていますので、チェックしてみると良いです。
公式ドキュメントでは、DMX受信にて、以下のようにLabel5と書かれいており、また受信ステータスの詳細もあります。
受信については、日本語での情報が殆どない中で、以下のopenFrameworksでのDMX受信を確認するソースが参考になりました。実際にMaxでシリアル通信して、受信データを確認してみると、直感的に理解できるので、オススメですよ!
参考
Receive DMX-512 with openFrameworksnakayasu.com
最後に
以上になります。データの送受信に関して理解するときは、公式ドキュメントを読むのが1番の近道かもしれないなぁ…と思いました。
それくらい日本語や海外の情報が少なかったです。特に受信側はほぼ皆無で泣きそうになりました。なんだかんだ最後に頼れるのは、公式ですね!
DMX送信のパッチは以下のGitHubが参考になりますので、気になる方は参考にしてみて下さい!
参考
thomasfredericks/DMX_USB_PRO_MAXGitHub
コメントを残す