ILDAWaveX16 V2 is an all-in-one, dual-processor, high-resolution laser DAC platform built for makers and laser enthusiasts.
It combines ILDA DB25 output, SD-card playback, Ethernet, Wi-Fi, USB, JST XH connectors, and a flexible firmware architecture designed for experimenting with laser protocols and custom workflows.
The board is built around two processors:
- ESP32-S3 - networking, web UI, SD-card playback, protocol parsing, configuration
- RP2354 - real-time buffering, DAC timing, deterministic laser output
For full project documentation, visit: https://stanleyprojects.com/projects/ildawavex16v2
Warning
ILDAWaveX16 is a maker-friendly laser DAC platform, not a finished commercial laser product. The firmware is still under development and may contain bugs, so you should be comfortable flashing firmware, modifying code, and troubleshooting embedded hardware and software issues.
The firmware is split into separate projects:
ILDAWaveX16/
├── firmware/
│ ├── ESP32S3/ # ESP32-S3 FW: networking, web UI, SD, protocols
│ └── RP2354/ # RP2354 FW: real-time DAC output engine
├── hardware/ # schematic, 3D model
├── tools/ # scripts for protocol testing
└── README.md
Note
The ESP32-S3 firmware is also compatible with the original ILDAWaveX16 V1 board. To build for V1, set BOARD_VERSION to 1 in ESP32S3/main/CMakeLists.txt.
Performance on V1 is currently more limited than on V2, so please treat V1 support as experimental.
Recommended development tools:
- Visual Studio Code
- ESP-IDF Extension for VS Code for the ESP32-S3 firmware
- Raspberry Pi Pico Extension for VS Code for the RP2354 firmware
The ESP32-S3 firmware is built with ESP-IDF.
The RP2354 firmware is built with the Raspberry Pi Pico SDK and produces a .uf2 firmware file.
ILDAWaveX16 V2 uses a split architecture to keep the user-facing and real-time parts of the system separated.
The ESP32-S3 handles:
- Web interface
- REST API
- Ethernet / Wi-Fi configuration
- microSD card access
- ILDA file playback
- Protocol parsing
- Test-pattern generation
- Stream conversion and packet forwarding to RP2354
- Runtime configuration and diagnostics
The RP2354 handles:
- Real-time DAC sample output
- SPI packet receiving with PIO
- DMA-based payload handling
- Ring buffer management
- READY hardware flow control
- X/Y mirroring
- Underrun handling
- Safe blanking and hard-zero stop behavior
Incoming data from SD files, test patterns, or network protocols is converted on the ESP32-S3 into a unified internal sample format.
Each laser point is represented as an 8-channel signed 16-bit sample:
X, Y, R, G, B, I, US1, US2
Both microcontrollers are connected to the same USB-C connector.
Depending on the USB-C cable orientation, the port connects either to the ESP32-S3 or to the RP2354.
If the expected device does not appear on your computer, unplug the USB-C cable, rotate it 180 degrees, and plug it in again.
Each microcontroller must be flashed separately.
If building from source, use the ESP-IDF extension in VS Code.
Before building, choose the target board version in: ESP32S3/main/CMakeLists.txt
If flashing a released firmware image, use the web flasher.
The ESP32-S3 should normally enter bootloader mode automatically. If flashing does not start:
- Hold
ESP BOOT - Briefly press and release
ESP RST - Try flashing again
If building from source, use the Raspberry Pi Pico extension in VS Code.
If flashing a released firmware image, enter bootloader mode:
- Hold
RP BOOT - Briefly press and release
RP RST
The RP2354 should mount as a storage drive.
Copy the .uf2 firmware file onto the drive. It will automatically unmount and reboot into the new firmware.
The ESP32-S3 can play .ild files directly from microSD.
ILDA frames are parsed, converted into X/Y/color/intensity samples, and streamed to the RP2354 through the same SPI payload path used by live protocols.
The current implementation loads converted frames into PSRAM-backed memory, which makes playback fast and stable, but limits the maximum file size that can be played.
A future improvement would be continuous batch reading, where only partial chunks of the ILDA file are read, converted, and streamed at a time. This would allow larger files to be played without loading the full converted output into memory.
The firmware includes an experimental IDN / ILDA Digital Network implementation over UDP.
It supports IDN-Hello discovery, allowing compatible software to find the device on the network and identify it as an IDN-capable laser DAC.
Once connected, incoming IDN real-time stream data is parsed, converted into the internal 8-channel sample format, and forwarded to the RP2354 output engine.
This protocol path works, but still needs optimization at higher point rates.
The firmware includes an Ether Dream compatible DAC server, allowing standard laser software to discover and stream point data to the board.
Implemented features include:
- UDP discovery
- TCP control
- TCP streaming
- Point-rate configuration
- Prepare / start / stop behavior
- Ether Dream point conversion into the internal 8-channel sample format
This protocol path works, but still needs optimization at higher point rates.
Both the ESP32-S3 and RP2354 have native USB, so the board can also be used for USB-based applications.
As a proof of concept, a Helios DAC USB protocol implementation was tested and ran reliably directly on the RP2354. Due to licensing concerns, this implementation is not included in the public firmware. However, the test showed that the hardware is suitable for custom USB protocol development, including USB streaming as an alternative to network streaming.
The schematic is published for reference, repair, education, and firmware development.
PCB manufacturing files, production files, and full hardware source files are not published. The ILDAWaveX16 name, branding, documentation, artwork, and released design files may not be used for commercial manufacturing or resale without permission.
For fully open-source hardware, see the previous ILDAWaveX16 generation with complete KiCad source files:
https://stanleyprojects.com/projects/ildawavex16
The firmware source code is released under the GPLv3 license.
You may study, modify, and redistribute the firmware under the terms of the GPLv3 license.
Firmware derivatives must remain open under the same license.
Developers are encouraged to study, modify, optimize, and adapt the firmware for new protocols and workflows.
The community has already done a great job helping shape the project, so join the Discord server, share your ideas, and build something cool with us.