Close
0%
0%

LumiGate — Art-Net / sACN to DMX512 Gateway

ESP32-based Art-Net & sACN to DMX512 gateway with live web UI, WebSocket push, OTA updates, and manual DMX control.

Similar projects worth following
0 followers
LumiGate turns a $5 ESP32 into a full-featured Art-Net and sACN (E1.31) to DMX512 gateway with a live browser-based control UI. No expensive proprietary nodes, no closed protocols, no SD-card-only configuration — just flash the firmware, connect over WiFi, and start sending DMX.

LumiGate turns a $5 ESP32 into a full-featured Art-Net and sACN (E1.31) to DMX512 gateway with a live browser-based control UI. No expensive proprietary nodes, no closed protocols, no SD-card-only configuration — just flash the firmware, connect over WiFi, and start sending DMX.

What it does

  • Receives Art-Net (UDP/6454) and sACN/E1.31 (multicast/5568) from any lighting controller — QLC+, MagicQ, GrandMA, Resolume, TouchDesigner, Chamsys, anything Art-Net compliant.
  • Outputs full 512-channel DMX512 over isolated RS485 to your fixtures.
  • Runs both protocols simultaneously with conflict detection when multiple senders are active.
  • Exposes a live web UI that shows all 512 channels at 25 fps via binary WebSocket frames — no polling, no lag.
  • Lets you take manual control from the browser: click any channel, drag the slider, see fixtures respond instantly. Blackout button kills all channels in one click.
  • OTA updates via three paths: browser upload, ArduinoOTA from your IDE, or one-click "update from latest GitHub release" — no USB cable needed after the first flash.

Why I built it

Commercial Art-Net nodes cost €150–€400 and ship with web UIs that haven't been redesigned since 2010. Open-source firmware exists but usually targets a single protocol, lacks live visualization, or assumes you're already a DMX expert. I wanted something that:

  1. Works out of the box on any €8 ESP32 DevKit + €5 isolated RS485 module
  2. Shows you exactly what's coming in on the wire, in real time
  3. Catches conflicts (two senders fighting for the same universe) before they ruin a show
  4. Updates itself from the internet, because climbing back behind a rigging truss to re-flash is not fun

Hardware

  • ESP32 DevKit v1 (or ESP32-S3 DevKitC-1 — both targets are built by CI)
  • Waveshare TTL-to-RS485 (C) — galvanically isolated, auto-direction, no DE/RE pin to manage
  • XLR-3 or XLR-5 panel socket
  • Total BOM cost: ~€20

Full BOM with Amazon links, wiring diagram, pinout tables, and assembly instructions are in the GitHub README.

Software stack

ESP32 firmware in C++ with PlatformIO. Custom build pipeline that converts HTML pages and PNG assets into PROGMEM arrays so the entire web UI ships inside the firmware binary — no SPIFFS, no LittleFS, no separate filesystem image to flash. Web UI is Bootstrap 5 dark theme + vanilla JS. WebSocket pushes a packed 528-byte binary frame containing fps, RSSI, heap, uptime, jitter, conflict flag, and all 512 DMX values.

Persistent config (universe, protocol, hostname, OTA password, LED type/pin) is stored in NVS and survives reboots. First-boot WiFi setup runs a captive portal AP via WiFiManager. mDNS makes the device reachable as dmx-gateway.local so you don't need to look up its IP.

GitHub Actions builds release firmware on every push to master — bootloader, partition table, boot_app0, and firmware binaries are all attached to the latest release tag for download.

Tested with

  • QLC+ (open-source lighting console) — Art-Net Universe 0, "Full" transmission mode
  • sACN senders on the same LAN running in parallel
  • DMX fixtures: LED PARs, moving heads, fog machines, generic dimmer packs

Status

Working, stable, in active use. Firmware version 1.x with OTA. Roadmap (in the GitHub repo) includes scene presets, fade engine, MQTT/Home Assistant integration, RDM support, and multi-universe via additional RS485 ports.

Get it

Issues, ideas, and PRs welcome.

demo.mp4

Web UI

MPEG-4 Video - 1.60 MB - 06/04/2026 at 23:24

Download

  • 1 × ESP32 DevKit v1 ESP32-WROOM-32, 30-pin board with CH340 or CP2102 USB-serial. Alternative: ESP32-S3 DevKitC-1 (firmware builds for both targets)
  • 1 × Waveshare TTL to RS485 (C) module Galvanically isolated (2500 V RMS), automatic direction control (no DE/RE pin needed), 3.3 V or 5 V TTL
  • 1 × XLR-5 female panel socket Standard DMX output connector. XLR-3 also works — same pinout
  • 1 × Project enclosure (optional) Any small project box or DIN-rail housing

  • 1
    Build it

    Step 2 — Wire the ESP32 to the RS485 module

    Connect the four signals between ESP32 and the Waveshare TTL-to-RS485 (C) module:

    • ESP32 3.3 V → Module VCC
    • ESP32 GND → Module GND
    • ESP32 GPIO17 → Module TXD
    • ESP32 GPIO16 → Module RXD

    Use 3.3 V, not 5 V — the ESP32's GPIOs are not 5 V tolerant. Keep the TTL wires short (under 20 cm); long unshielded wires on the TTL side pick up noise.

    Do not connect DE/RE — the Waveshare (C) module handles direction automatically. Wiring DE/RE will break transmission.

    Step 3 — Wire the XLR connector

    Connect the RS485 module's screw terminals to the XLR panel socket:

    • Module A (RS485+) → XLR pin 3 (DMX Data+)
    • Module B (RS485−) → XLR pin 2 (DMX Data−)
    • Module GND → XLR pin 1 (Shield/Ground, optional but recommended)

    XLR-5 and XLR-3 use the same pin numbering for the DMX signals. Use a female panel socket — DMX sources output via female XLR; receivers use male.

    Step 4 — Termination resistor (optional)

    For DMX cable runs longer than about 10 m, solder a 120 Ω resistor between pins 2 and 3 (A and B) inside the last fixture in your DMX chain. Most professional fixtures include this internally.

    Step 5 — Flash the firmware

    Two options:

    Option A — Pre-built firmware, no toolchain needed. Download the latest release from GitHub (firmware.bin, bootloader.bin, partitions.bin, boot_app0.bin) and flash with esptool. A one-line PowerShell script for Windows is provided in the repo that installs Python + esptool automatically and walks you through the flash.

    Option B — Build from source. Install PlatformIO with the VS Code extension, clone the repo, and run pio run --target upload. PlatformIO handles toolchain and library downloads.

    Before flashing, put the ESP32 into download mode: unplug USB, hold the BOOT button, plug USB back in while holding BOOT, release after about one second.

    Step 6 — First boot and WiFi setup

    On first boot the device starts an open WiFi access point named DMX-Gateway. Connect with your phone or PC — a captive portal opens automatically (or browse to 192.168.4.1). Select your home WiFi, enter the password, set your Art-Net universe (default 0), and save. The device reboots and joins your network.

    Step 7 — Open the web UI

    Browse to http://dmx-gateway.local from any device on the same network. You'll see the live status page with framerate, RSSI, active senders, and all 512 DMX channels as a color-coded grid. Click any channel to take manual control. Configuration, OTA updates, and WiFi reset live under /config and /reset.

    Step 8 — Send Art-Net or sACN to it

    Point your lighting controller (QLC+, MagicQ, Resolume, TouchDesigner, etc.) at the device's IP and Universe 0. For QLC+ specifically: in the Inputs/Outputs tab, set Output → ArtNet, target IP = the device's IP, universe = 0, transmission mode = Full. Move a fader — the corresponding cell in the web UI lights up cyan and the connected DMX fixture responds.

View all instructions

Enjoy this project?

Share

Discussions

Similar Projects

Does this project spark your interest?

Become a member to follow this project and never miss any updates