Intern

Node-REDとLeDMX4 MAXでLEDテープを虹色にしてみた

今回は LeDMX4 MAXというArtNet対応のDMXコントローラーと、Node-REDを使って、LEDテープに虹色グラデーションを表示させる方法に挑戦しました。

使用機材・ソフト一覧

名称用途備考
LEDテープ(WS2812B)光らせる対象255ピクセル
LeDMX4 MAXArtNet→LED出力変換LAN接続で制御
PC(Windows)Node-RED動作・送信側IPは 192.168.1.100 に設定
LANケーブルPCとLeDMX4 MAXを接続ルーター不要(直接接続)
Node-REDノーコード系開発環境ブラウザ操作
eDMX MAX Configuration v2.5LeDMX4 MAXの設定ツール必須

eDMX MAX Configuration v2.5インストール

【設定ソフト】Windows・MAXシリーズ用 – DMXking 正規代理店 株式会社ラセンス

機材の接続

  1. LEDテープをLeDMX4 MAXのPORT 1に接続
  2. PCとLeDMX4 MAXをLANケーブルで直結
    • ルーターを介さず、PCとコントローラを1対1で接続

ネットワーク設定(PC側)

LeDMX4 MAXとルーターを介さずに直接接続するため、PCに固定IPアドレスを設定します。

💻 Windowsでの設定手順:

  1. 「設定」→「ネットワークとインターネット」→「アダプターのオプションを変更」
  2. 使用中のLANアダプターを右クリック →「プロパティ」
  3. 「インターネット プロトコル バージョン4(TCP/IPv4)」を選択 →「プロパティ」
  4. 以下のように入力:
項目設定値
IPアドレス192.168.1.100
サブネットマスク255.255.255.0
デフォルトゲートウェイ・DNS空欄でOK

LeDMX4 MAXの設定(eDMX Configuration)

networkmodeをStaticIPにする

Scene StreamをArtNetにする(使用するノードによって変える)

Port Operation ModeをDXM-OUTにする

Node-REDフロー(虹グラデーション)

今回はchatgptに聞いて作らせてみました

Node-RED右上のメニューから「インポート」→以下のJSONを貼り付け:

[<br>{<br>"id": "1a2b3c4d5e6f7g8h",<br>"type": "tab",<br>"label": "Rainbow Flow",<br>"disabled": false,<br>"info": ""<br>},<br>{<br>"id": "inject_rainbow",<br>"type": "inject",<br>"z": "1a2b3c4d5e6f7g8h",<br>"name": "Start Rainbow",<br>"props": [<br>{<br>"p": "payload"<br>}<br>],<br>"repeat": "0.1",<br>"crontab": "",<br>"once": true,<br>"onceDelay": "0.5",<br>"topic": "",<br>"payload": "",<br>"payloadType": "date",<br>"x": 150,<br>"y": 100,<br>"wires": [<br>[<br>"function_rainbow"<br>]<br>]<br>},<br>{<br>"id": "function_rainbow",<br>"type": "function",<br>"z": "1a2b3c4d5e6f7g8h",<br>"name": "Rainbow Generator",<br>"func": "// 255ピクセル×4ch = 1020ch → 2ユニバース使用\nconst PIXELS = 255;\nconst CHANNELS_PER_PIXEL = 4;\nconst TOTAL_CHANNELS = PIXELS * CHANNELS_PER_PIXEL;\n\nlet dmx = new Array(TOTAL_CHANNELS).fill(0);\nlet offset = context.get(\"offset\") || 0;\n\nfunction hsvToRgb(h, s, v) {\n let c = v * s;\n let x = c * (1 - Math.abs((h / 60) % 2 - 1));\n let m = v - c;\n let r, g, b;\n\n if (h < 60) [r, g, b] = [c, x, 0];\n else if (h < 120) [r, g, b] = [x, c, 0];\n else if (h < 180) [r, g, b] = [0, c, x];\n else if (h < 240) [r, g, b] = [0, x, c];\n else if (h < 300) [r, g, b] = [x, 0, c];\n else [r, g, b] = [c, 0, x];\n\n return [\n Math.floor((r + m) * 255),\n Math.floor((g + m) * 255),\n Math.floor((b + m) * 255)\n ];\n}\n\nfor (let i = 0; i < PIXELS; i++) {\n const hue = (i * 360 / PIXELS + offset) % 360;\n const [r, g, b] = hsvToRgb(hue, 1, 0.7);\n dmx[i * 4 + 0] = r;\n dmx[i * 4 + 1] = g;\n dmx[i * 4 + 2] = b;\n dmx[i * 4 + 3] = 0; // Wチャンネルは未使用\n}\n\noffset = (offset + 3) % 360;\ncontext.set(\"offset\", offset);\n\nconst u0 = dmx.slice(0, 512);\nlet u1 = dmx.slice(512, 1020);\nwhile (u1.length < 512) u1.push(0);\n\nfunction createArtDMX(universe, data) {\n const header = Buffer.from([\n 0x41, 0x72, 0x74, 0x2d, 0x4e, 0x65, 0x74, 0x00,\n 0x00, 0x50,\n 0x00, 0x0e,\n 0x00,\n 0x00,\n universe & 0xff, (universe >> 8) & 0xff,\n (data.length >> 8) & 0xff, data.length & 0xff\n ]);\n return Buffer.concat([header, Buffer.from(data)]);\n}\n\nreturn [\n { payload: createArtDMX(0, u0), ip: \"192.168.1.83\", port: 6454 },\n { payload: createArtDMX(1, u1), ip: \"192.168.1.83\", port: 6454 }\n];",<br>"outputs": 2,<br>"timeout": "",<br>"noerr": 0,<br>"initialize": "",<br>"finalize": "",<br>"libs": [],<br>"x": 360,<br>"y": 100,<br>"wires": [<br>[<br>"udp_out"<br>],<br>[<br>"udp_out"<br>]<br>]<br>},<br>{<br>"id": "udp_out",<br>"type": "udp out",<br>"z": "1a2b3c4d5e6f7g8h",<br>"name": "ArtNet送信",<br>"addr": "",<br>"iface": "",<br>"port": "",<br>"ipv": "udp4",<br>"x": 580,<br>"y": 100,<br>"wires": []<br>}<br>]

結果

LEDテープがグラデーションを描きながら、滑らかに色を変化していきます。

まとめ

Node-REDとLeDMX4 MAXを使えば、複雑なプログラムなしに本格的なLED演出が作れます。