Simple DIY DMX-Interface
Find a file
HendrikRauh 198c835c50 fix(workflow): checkout before local action and remove nested checkout
Add top-level `actions/checkout` to jobs so local action files are available, and remove redundant checkout from `install-nix` composite action. Prewarm flake devShell remains in the action.
2026-03-06 14:49:23 +01:00
.github fix(workflow): checkout before local action and remove nested checkout 2026-03-06 14:49:23 +01:00
assets chore(format): reformat files with new setup 2026-03-06 11:29:53 +01:00
components chore(format): reformat files with new setup 2026-03-06 11:29:53 +01:00
data chore(format): reformat files with new setup 2026-03-06 11:29:53 +01:00
main chore(format): reformat files with new setup 2026-03-06 11:29:53 +01:00
.clang-format add(pre-commit): add configuration files for pre-commit, markdownlint, and codespell; update README with setup instructions 2026-03-06 11:26:47 +01:00
.codespellignore add(pre-commit): add configuration files for pre-commit, markdownlint, and codespell; update README with setup instructions 2026-03-06 11:26:47 +01:00
.editorconfig add(format): implement formatting and format check tasks for source files 2026-03-05 23:03:04 +01:00
.envrc chore(format): reformat files with new setup 2026-03-06 11:29:53 +01:00
.gitignore Add sdkconfig.defaults and tasks.py for project configuration and build automation 2026-03-05 16:29:29 +01:00
.markdownlint.json add(pre-commit): add configuration files for pre-commit, markdownlint, and codespell; update README with setup instructions 2026-03-06 11:26:47 +01:00
.pre-commit-config.yaml add(pre-commit): add configuration files for pre-commit, markdownlint, and codespell; update README with setup instructions 2026-03-06 11:26:47 +01:00
.prettierignore add(format): implement formatting and format check tasks for source files 2026-03-05 23:03:04 +01:00
.prettierrc.json add(format): implement formatting and format check tasks for source files 2026-03-05 23:03:04 +01:00
CMakeLists.txt add(storage): implement LittleFS initialization and static file handling 2026-03-05 19:50:59 +01:00
dependencies.lock add(dmx): initialize DMX component 2026-03-05 22:00:22 +01:00
flake.lock add initial flake configuration and environment setup 2026-03-05 15:50:51 +01:00
flake.nix add(pre-commit): add configuration files for pre-commit, markdownlint, and codespell; update README with setup instructions 2026-03-06 11:26:47 +01:00
partitions.csv init esp-idf project 2025-11-15 22:15:54 +01:00
README.md add(pre-commit): add configuration files for pre-commit, markdownlint, and codespell; update README with setup instructions 2026-03-06 11:26:47 +01:00
sdkconfig.defaults add(storage): implement LittleFS initialization and static file handling 2026-03-05 19:50:59 +01:00
tasks.py add(pre-commit): add configuration files for pre-commit, markdownlint, and codespell; update README with setup instructions 2026-03-06 11:26:47 +01:00

DMX-Interface

Art-Net interface for controlling DMX devices via WiFi or Ethernet.


🛒 Parts

Count Part
1x ESP32
2x RS485
1x W5500-ETH
1x LED-Button
1x ♂️-DMX-socket
1x ♀️-DMX-socket

Additionally you need: some wires, soldering equipment, 3D-printer, small screws, shrink tubing, hot glue gun


📱 Implemented microcontrollers

  • Lolin S2 mini
  • ESP 32 WROOM
  • ESP 32 C3

For other microcontrollers you may need to adjust the platformio.ini


🔌 Wiring

You have to short-circuit R0 on the RS485 boards to enable the termination resistor required for DMX before the first and after the last device in line.

Circuit diagram

GPIO Usage
GND GND to others
3,3V VIN on RS485
5V/VBUS VIN on W5500
0 Onboard Button
5 Ext. Button
7 Ext. LED
15 Onboard LED
17 U1TXD
18 U1RXD
21 U0TXD
33 U0RXD
34 SPI CS
35 SPI MOS
36 SPI SCK
37 SPI MISO

🚀 Installation

  1. make sure you have PlatformIO installed
  2. open the project folder in PlatformIO
  3. click Upload Filesystem Image
  4. click Upload and Monitor
  5. 🏁 you are done 🎉

🧑‍💻 Development

Required tools

  • ESP-IDF (includes idf.py)

  • invoke (for project tasks)

  • Optional but recommended for development:

    • pre-commit (for code quality hooks)
    • clang-format (C/C++)
    • prettier (JavaScript/CSS/HTML/YAML)
    • svgo (SVG optimization)
    • nixfmt (Nix formatting)

Environment setup

This repository includes a flake.nix with a ready-to-use development shell.

nix develop

Alternatively, you can use direnv to automatically enter the development shell when you cd into the project directory.

Without Nix, install ESP-IDF and Python dependencies manually (especially invoke) and ensure idf.py is available in your shell.

Run invoke --list to see all available tasks.

Examples:

invoke flash
invoke reset
invoke config

Pre-commit hooks

This project uses pre-commit to automatically check code quality, formatting, and common mistakes before committing.

Setup:

# Install pre-commit hooks
pre-commit install

# Optionally, run all hooks on all files
pre-commit run --all-files

📦 Case

All print files (STL, STEP, X_T) can be found in assets/case. Alternatively you can view the project on OnShape where you can export the files in a format you like.

Prusa Slicer with case loaded


💡 Status LED

LED Description
off no power; LED deactivated
static powered on; normal
slow startup; warning
fast resetting; error

⚙️ Default config

To reset the settings, hold down the button and connect the ESP to the power supply, the LED will flash quickly. After 3 seconds the LED should light up static and the settings are reset. If you release the button early you abort the reset and the LED flashes slowly.

Setting Value
TYPE WiFi AP
SSID ChaosDMX-□□□□
PASSWORD mbgmbgmbg
IP-Address 192.168.4.1
DMX1 (Left) OUTPUT; Universe 1
DMX2 (Right) INPUT; Universe 2
LED Brightness 10 %

🤝 Contributing

Contributions, issues and feature requests are welcome!
Feel free to check the issues page.


👥 Authors

Chaostreff Backnang

@HendrikRauh

@RaffaelW

@psxde