OpenRGBとWLEDをE1.31でつなぎ全てのLEDを同期して光らせる【DMX512 over IP network】

タイトル

OpenRGBはパソコンにつながるゲーミング機器 キーボード マウス マザーボードなどのLEDをコントロールします。コントロールできるものは既製品が多く自分で作ったLEDを光らせるのは大変です。
WLEDはワンチップマイコンESP32でアドレッサブルRGB LEDをコントロールするプロジェクトです。安価なWS2812BのLEDテープを光らせる事ができます。
今回はOpenRGBでWLEDをコントロールできるようにします。これで全てのLEDはOpenRGBで同期します。

ゲーミング仕様のLEDが派手に光る製品がたくさんあります。今ではマザーボードも普通に光ります。メーカー毎に独自のコントロールソフトウエアでLEDを光らせるのでマザーボードとキーボードのメーカーが異なるとエフェクトを同じにすることができないなど不満が出てきます。OpenRGBはゲーミング機器のLEDをメーカーを問わずコントロールするプロジェクトです。LEDをコントロールする方法を公開しているメーカーはほぼ無いので独自に解析してコントロールしているようです。
そのため、好きなLEDをパソコンにつなげて自由に光らせるのは難しいです。

WLEDはワンチップマイコンESP32を使ってLEDをコントロールするプロジェクトです。アドレッサブルRGB LEDを好きなようにつなぐことができます。ESP32のWiFiを使ってネットワーク経由でLEDをコントロールできます。

OpenRGBからWLEDをコントロールできれば全てのLEDを同期させられます。

sACN E1.31

コンサートや舞台などでは多くの照明機器が音楽や進行に合わせて光ります。それらの機器は独自のネットワークで接続されコントロールしています。標準規格でDMX512というものがあります。ネットワークといってもパソコンのイーサネットやWiFiとは異なるものです。長い距離のケーブルを使ってもノイズで誤動作しないとか、乱暴に扱っても壊れないようになっています。

DMX512は512チャンネルのデータを扱えます。チャンネルとは制御するパラメータ一つの事だと思えばよいでしょう。照明の明るさをコントロールするのに一つのチャンネル、色をコントロールするのにもう一つのチャンネル、照明の向きを変える機能があるならパンに一つのチャンネル、チルトにもう一つなどというようにチャンネルを割り当てます。
1チャンネルは1バイトのデータと思えばソフト屋さんは考えやすいでしょう。全部で512チャンネル 512バイトのデータを扱います。データはシリアル通信で送っていて照明機器はデイジーチェーン、数珠つなぎになっています。

DMX512を拡張して行ってWiFiやパソコンのネットワークに載せられるようにしたものにstreaming ACNというものがあります。ANSI E1.31で標準規格になっています。
PythonのPyPIにも簡易モジュールが入っています。

universeとchannel

DMX512では512channelのデータを扱えます。これでは数が少ないという事でuniverseというものを作りました。512channelの一つのデイジーチェーンを1ユニバースとして扱います。ユニバースは16bitで区別するので全部合わせるととんでもない数のチャンネルを扱うことができます。

ARGB LEDとE1.31

アドレッサブルRGB LEDには赤緑青の3つのLEDが入っています。それぞれ1バイト、3バイトで一つのLEDとして色を出しています。RGBの各データをE1.31のチャンネルに割り当てればE1.31でARGB LEDをコントロールできるわけです。3チャンネルで一つのARGB LEDの色が決まります。

1universeは512channelです。ARGB LED一つでは3channel使うので最大で170個のARGB LED、510channelを扱えます。170個を超えるARGB LEDを使いたければ2つ目のuniverseを使います。340個を超えれば3つ目というようにuniverseを増やします。
OpenRGBではLEDの数に合わせてuniverseを自動で追加してくれます。WLEDもLEDの数に合わせて連続したunivereseを一つとして扱ってくれます。

アドレッサブルLEDには RGBにW (White)を加えた4色のRGBW LEDもあります。この場合は一つのLEDで4channel必要です。すると一つのuniverseに128個、512channnelのデータが入ります。ですがOpenRGBではRGBW LEDの設定が無いようなので使えないみたいです。

OpenRGBとWLED

OpenRGBはE1.31で送信できます。WLEDはE1.31の受信ができます。つまりOpenRGBからWLEDをコントロールできます。WLEDは好きなようにアドレッサブルRGB LEDをつなげられます。OpenRGBで好きな数のARGB LEDをコントロールできるという事です。

OpenRGBとWLEDでE1.31の設定ができたならOpenRGBで全てのLEDをコントロールできます。
OpenRGBのExperimental版ではSettingsタブにE1.31 Deviceがあるので追加します。Start UniverseとStart Channelは1で良いでしょう。Universe Sizeは510にします。TypeはLinearにします。
Keepalive Timeは1000程度にしておきます。データに変化が無いときにデータを再送信する時間です。下のビデオでは数十としています。色がコロコロ変わる効果を使わないなら1000くらいにした方が無駄なパケットがネットへ流れないので良いでしょう。コロコロ変わるなら数十でも同じです。

WLEDにもE1.31の設定があります。Config → Sync Interfacesと進みます。
Network DMX inputのTypeをE1.31にします。Start UniverseとStart ChannelはOpenRGBの設定と同じにします。DMX modeはmulti RGBにします。

ARGB LEDで作った16ドットx16ドットのLEDマトリクスをOpenRGBで光らせます。
OpenRGBにVisual Map Pluginを追加するとLEDの配置を自由に定義できます。Effects Pluginの中にはLEDマトリクスを想定したエフェクトがあります。
Audio Visualizerエフェクトを使うと音楽に合わせたグラフィック・イコライザーを表示できます。

ビデオ









コメント

最近のコメント

Threaded Recent Comments will be here.