Skip to content

About

Open-source ESP DMX Controller for ESP32-S3 / M5Stack CoreS3SE. 512-channel DMX512 lighting control with touchscreen, Wi-Fi web UI and presets.

Topics

Resources

Stars

1 star

Watchers

0 watching

Forks

Repository files navigation

ESP DMX Controller — ESP32-S3 / M5Stack CoreS3SE

PlatformIO DMX512 M5Stack License

An open-source, portable ESP32 DMX512 lighting controller for the M5Stack CoreS3SE. Control all 512 DMX channels from the touchscreen or an offline Wi-Fi web interface, with presets, blackout, battery monitoring and synchronized settings.

Important

Recommended and tested: M5Stack CoreS3SE + Unit DMX (U183) + M5GO Bottom3.

Warning

Base DMX support is experimental. Random output glitches occurred on the Base DMX unit tested during development, even with static channel values and simplified firmware. The same CoreS3SE, fixtures and cabling worked without those glitches using Unit DMX. M5Stack support is investigating; this does not establish that all Base DMX units are affected.

ESP32 DMX Controller – M5Stack CoreS3SE portable DMX512 lighting controller with Wi-Fi web interface

M5Stack CoreS3SE portable DMX controller with Unit DMX U183
CoreS3SE + Unit DMX
M5Stack CoreS3SE DMX controller with M5Stack DMX Base
CoreS3SE + Base DMX (experimental)

Device Screenshots

ESP DMX Controller startup screen
Startup
ESP DMX Controller main DMX channel screen
Main Screen
ESP DMX Controller precision value editor
Value Editor
ESP DMX Controller preset management screen
Presets
ESP DMX Controller device settings screen
Settings
ESP DMX Controller additional settings screen
Additional Settings

v0.3.0 — Wi-Fi & Web Control

Connect to the controller's Wi-Fi using the credentials shown in its physical Settings screen, then open http://192.168.4.1/. The web interface works offline on desktop, tablet and mobile browsers, including iPhone Home Screen mode. Web Editor, Presets, Settings and Status share live controller state.

  • Editor: All 512 channels, with faders, fine adjustments and numeric entry.
  • Presets: Load (double-tap), save and delete P1–P8. Overwrites and deletions require confirmation.
  • JSON Backup: Transactional export/import of all eight preset slots, with timestamped downloads and progress dialogs. Import replaces every slot, including empty ones, without changing live DMX output. Keep the browser tab active during transfers.
  • Blackout: Transmits zeros while preserving the entry snapshot. Leaving blackout restores that snapshot; edits made during blackout are discarded.
  • Settings & Maintenance: Live previews, persistent settings saved on release, physical/web synchronization, browser preferences and confirmed restart/power-off. Maintenance actions allow five seconds for physical CANCEL.
  • Wi-Fi Configuration: Credential changes require physical OK within 60 seconds. A two-second HOLD RESET WIFI schedules a Wi-Fi-only reset on the next explicit restart; presets and device settings are retained.

Web Interface Screenshots

ESP32 DMX Controller desktop Web Editor
DMX Editor
ESP32 DMX Controller desktop presets and backup
Presets & Backup
ESP32 DMX Controller desktop device and Wi-Fi settings
Device Settings

Mobile Interface Screenshots

ESP32 DMX Controller mobile Web Editor
DMX Editor
ESP32 DMX Controller mobile presets and backup
Presets & Backup
ESP32 DMX Controller mobile device and Wi-Fi settings
Device Settings

Firmware & Updates

Two factory images are built from the v0.3.0 release source:

  • CoreS3SE-DMX-Unit-v0.3.0.bin — recommended, Unit DMX U183 + Battery Bottom.

  • CoreS3SE-DMX-Base-v0.3.0.bin — experimental, Base DMX + external PSU.

  • From v0.2.0: Erase the entire flash and install the matching factory BIN at 0x0. Presets and settings will be lost.

  • For the tested current-format v0.3.0: An application-only update without erase preserves presets and settings. Do not use a factory BIN for a data-preserving update: it also covers the NVS area.

  • Downgrading: Export your data first. v0.2.0 cannot read the generation-backed preset storage used by v0.3.0.

Security & Known Limitations

Caution

Change the predictable factory Wi-Fi password before use in untrusted environments. Anyone who can join the access point can access DMX control, presets and maintenance. Physical approval protects Wi-Fi configuration changes only; connected clients otherwise share control access. HTTP/WebSocket traffic has no application-layer encryption.

The device runs as a Wi-Fi access point with embedded HTTP/WebSocket assets and automatic connection recovery (no STA/AP+STA mode or OTA updater). Mobile browser zoom is intentionally restricted to avoid an iOS gesture regression. A slow TCP/WebSocket client can temporarily block web control, and external DMX timing/coherence validation remains outstanding.

Intel AX200 compatibility: Driver 24.20.2.1 has a user-reported SoftAP issue. Verified client workaround: Device Manager → Intel Wi-Fi 6 AX200 → Advanced → MIMO Power Save Mode → No SMPS. This is not a confirmed firmware defect.

Documentation: Installation & Updates · Changelog · Release Notes · Known Issues · Preset Backup Guide


Hardware & Power

Recommended: CoreS3SE + Unit DMX U183 + M5GO Bottom3.

Experimental: M5Stack Base DMX.

Important

The tested Unit DMX setup requires the battery bottom to power the DMX hardware; Base DMX requires an external power supply.

The M5GO Bottom3 has a 3.7 V / 500 mAh battery. The tested configuration ran for approximately 5 hours, depending on brightness, activity and battery condition.

On-Device Controls

DMX Channel Editor

Select a channel on the main screen and adjust its value with the slider, or tap EDIT for precise control:

  • + / −: Adjust the value, or hold for continuous adjustment.
  • STEP: Select increments of 1, 5, 10 or 25.
  • Numeric entry: Tap the value to enter an exact number from 0–255.
  • Fader: Adjust the channel value directly; BACK returns to the main screen.

Changes are sent immediately to the live DMX output. The main screen includes a DMX activity/heartbeat indicator.

Physical Presets

Eight presets (P1–P8) are stored persistently in ESP32 NVS.

  • Load: Double-tap a preset.
  • Save: Select a slot and hold SAVE for approximately one second. Releasing early cancels the operation.
  • Copy / Clear: Long-press an occupied slot. COPY only targets an empty slot; CLEAR requires a hold action.

Physical Blackout

Double-tap BLACKOUT to send zero values while saving the current DMX universe. Double-tap again to restore the saved values. The first tap prompts TAP AGAIN to prevent accidental activation.

Device Settings & Power

Setting Options Notes
Brightness 1 / 2 / 3 / 4 / 5 Five levels
Screen Timeout 1 / 2 / 3 / 4 / ON ON keeps the display on
Volume 0 / 1 / 2 / 3 / 4 0 mutes UI sounds

Settings are stored persistently and include touch and startup sounds. Physical RESTART and POWER OFF require a double tap.

Battery Monitoring

The screen shows battery percentage, charging/external-power status and estimated remaining runtime.

Battery Level Indicator
36–100% Green
21–35% Yellow
0–20% Red

Runtime estimates appear after calibration has collected enough discharge data and are smoothed over a rolling window. Visual and audible warnings occur at approximately 20% and 10%; warning tones use a fixed high volume regardless of the normal UI volume.

Known touchscreen limitation: Slow continuous fader movement may intermittently stall near the touch-acquisition layer. No application-level cause has been demonstrated, and occurrence in the original firmware is unconfirmed. The raw-coordinate correction remains; diagnostic tools are opt-in and THDIFF register-write experiments are suspended. See Testing.


Development & Builds

DMX Hardware Profiles

The same firmware source supports two PlatformIO build environments. Hardware-specific UART and direction-control pins differ:

Signal Unit DMX U183 (Port A) Base DMX (M-Bus)
DMX TX GPIO 2 GPIO 7
DMX RX GPIO 1 GPIO 10
Direction / Enable -1 (not used) GPIO 6
PlatformIO environment cores3se_unit (default) cores3se_base

Unit DMX handles RS-485 direction internally; Base DMX uses the M-Bus pins from M5Stack's original DMX512Tools example.

PlatformIO Commands

# Build
pio run -e cores3se_unit
pio run -e cores3se_base

# Upload
pio run -e cores3se_unit -t upload
pio run -e cores3se_base -t upload

Software Dependencies

Reproducible Builds & Release Identity

Repository-local PlatformIO hooks apply and verify the reviewed ESP32-S3 compatibility and TX ownership/RS485_CLASH patches to upstream esp_dmx v2.02. Do not manually edit .pio/libdeps. Compressed web assets are built deterministically into the firmware; no filesystem upload is needed.

The read-only /status endpoint and web Status page show the version, build environment, Git commit, modified-input flag and source fingerprint. Release binaries must match committed source and checksums. Pre-commit builds are marked modified; rebuild after committing to obtain a clean release identity. Historical release candidates, source archives and receipts must not be relabeled.

Only Unit/Base production builds are packaged; diagnostics are developer checks. Two OTA slots reserve space but do not implement an OTA updater or validated rollback. Slow synchronous WebSocket sends, upper-flash writes, external DMX timing/coherence testing and physical fader precision remain documented limitations or deferred work. See Release Notes and Testing.


Roadmap

Potential future work includes:

  • Wireless DMX: ESP-NOW transmitter, ESP32/AtomS3 receivers, pairing, signal-quality indication and multiple receivers.
  • Protocols: Art-Net / sACN support and CRMX-compatible hardware exploration.
  • Usability: Fixture profiles, named channels and additional battery statistics.

Acknowledgements

Based on and extensively developed from M5Stack's DMX512Tools example in the M5Module-DMX512 repository, originally published under the MIT License. Thanks to M5Stack for making the example available.

License & Third-Party Notices

This project is distributed under the MIT License. LICENSE retains the original Copyright (c) 2022 M5Stack, the upstream license text and the additional-project notice.

Third-party notices detail audited libraries, SDKs and runtime components. Some M5GFX subcomponents carry BSD or other terms, and Arduino-ESP32 is LGPL-2.1-or-later; the project's MIT License does not replace those obligations.

Firmware distribution must include the required notices and full license texts. Before publishing binaries, follow the source/relink delivery guide and build-material inventory. See Publication Readiness for final commit and source/binary checksum requirements.

Contributing

Issues, test results and pull requests are welcome. For Base DMX reports, please include the CoreS3SE host model, Base revision (if known), PSU, fixture, termination, build environment, esp_dmx version and whether glitches occur with static channel values. Avoid generalizing a single tested Base DMX issue to all hardware without reproducible evidence.

Disclaimer

DMX512 controls lighting and related equipment. Test new firmware safely before using it at a live event. This is an independent community project, not an official M5Stack product.

About

Open-source ESP DMX Controller for ESP32-S3 / M5Stack CoreS3SE. 512-channel DMX512 lighting control with touchscreen, Wi-Fi web UI and presets.

Topics

Resources

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages