Skip to the content
2 layers106 × 55 mmIoboard 4ports isolated, the printed circuit board in 3D

RP2040-based USB DMX dongle with integrated web server

Size
106 × 55 mm
Copper layers
2
Thickness
1.6 mm
Parts
60
Nets
40
Pads
230
Tracks, vias
465, 233
Pours
7
Routed
Yes
KiCad
KiCad 8.0 (file 20240108)
Created
9 Feb 2021
Updated
31 Mar 2025

Overview

Ioboard 4ports isolated is an open-source printed circuit board by OpenLightingProject, from the OpenLightingProject/rp2040-dmxsun repository on GitHub, published under the Apache-2.0 licence. It is a 2-layer board of 106 × 55 mm with 60 parts on 40 nets, routed with 465 tracks and 233 vias.

It is built around the CRE1S0505DC and M24C64-RMN6TP. Its parts include 20 resistors, 14 connectors, 12 capacitors and 7 ICs. It belongs with the lEDs and displays boards and the RP2040 boards of this library.

Main components

2

README

README.md

rp2040-dmxsun: A USB-DMX device based on RaspberryPi's RP2040 micro-controller with modular hardware

drawing

What is it?

The rp2040-dmxsun is a multi-purpose DMX-512-A toolbox to control stage lighting systems. It's most common use-case is to transmit the DMX data generated on a PC, Raspberry Pi or similar in a format that the lighting fixtures on stage can understand. In the most simple case, it's an USB-DMX interface.

DMX-512-A works in networks called universes and each universe can contain up to 512 slots of data. dmxsun can transmit up to 16 universes, meaning you can control 8192 slots of DMX data at the same time.

Dmxsun is usually connected to its host via a single USB connection that also powers the device. To the computer, the dmxsun device looks like a network card (it uses the CDC NCM interface) and the integrated DHCP-server assigns an IP-address to the host machine so they can talk to each other.

To find out dmxsun's IP address, have a look at your kernel log on Linux (run dmesg) or hover over the Disconnect USB device icon in Window's task bar or check the network device properties on macOS.

You can browse to this IP address in your web browser to access the integrated web server or you can send ArtNet or E1.31/sACN packets to the IP address to make dmxsun send this data as DMX data.

Furthermore, you can attach an nRF24 radio module to the base board to send or receive up to 4 universes wirelessly to or from another dmxsun device. That also means that the device can also work stand-alone, receiving DMX data from another dmxsun device and outputting it on local ports.

Why is it called dmxsun?

The idea came when thinking about a suitable icon for the pages on the integrated web server. You can think about the dmxsun as being a central device and 16 rays of light coming out of it.

Sun could also be seen as an acronym for sixteen universes :D

Maybe it's also because outdoor lighting technicians absolutely love the sun since they can perfectly set up their light show while the sun is shining bright ;)

What does it look like?

The hardware consists of a base board into which the Raspberry Pi Pico-board plugs in to. To get a quick overview of the board's status, 8 RGB status LEDs are attached to the base board.

3D rendering of the base board without the Pico board plugged in

Attached to this base board can be 0 to 4 IO boards that carry the actual RS-485 drivers and XLR connectors:

3D rendering of an IO board without the XLR connectors

If all 4 IO boards are attached to the base board, you can have 16 output ports fitting into 1U of an 19" rack:

3D rendering of base board + 4 IO boards

How is configuration data handled?

The complete configuration of the device, including IP address, patching and wireless configuration can be stored on any of the IO boards or on the base board.

When the device powers up, it scans the 4 IO board slots in order for connected boards and the configuration stored on them. As soon as a valid and non-disabled configuration is found, it is loaded and used. If no IO board has a valid configuration, it tries to load the config from the flash memory of the Pico board. If this also doesn't seem valid, a fallback configuration is applied.

The status LEDs on the base board indicate which IO boards have a valid configuration and which configuration is currently active.

All the configurations can be managed via the integrated web server.

Where can I buy it?

Short answer: You can't. There is not (yet) a ready-made piece of hardware that can be bought and is ready to use. However, you are invited to build your own. Read on ;)

Longer answer: JLCPCB or a similar PCB factory. The schematics and PCB layout files are in the hardware folder (KiCad format) and you can send them to any PCB fab to have it produced for you. Then it's a bit of soldering on your side, plugging in a RaspberryPi Pico board and you're good to go.

If you just want to have a brief look at the schematics without cloning the repo and opening the files in KiCad, take a look at the kicad-export action: https://github.com/OpenLightingProject/rp2040-dmxsun/actions/workflows/kicad-exports.yml. It will generate a zip-archive containing all sort of PDFs.

!!! Upcoming, incompatible hardware change: In the current schematics, we are using 256 byte large I2C-EEPROMs to store personality and configuration data. With the release of the Pico W and the need to store WiFi SSIDs and passwords, this will no longer be enough and the EEPROMs should provide 4096 byte in the future !!!

How can I try it out without spending much?

Very good question! All you need is a RaspberryPi Pico board, a microUSB cable and a PC, Laptop or RaspberryPi. You won't be able to actually control lighting fixtures, but you can get an idea of how this project works.

  • Download the latest UF2-file (for example from here: https://github.com/OpenLightingProject/rp2040-dmxsun/actions/workflows/pico-build.yml) and flash it to your Pico board (see above)
  • Wait until the board has rebooted and your PC has finished setting up the emulated network connection
  • Find out the dmxsun's IP address as described in the What is it?-section
  • Open your web browser, browse to the IP address. You should see a web page with status information
  • Using the navigation bar at the top, browse to Console and start changing values. Or fire up your favourite lighting control software (such as OLA or QLC+), configure it to send ArtNet or E1.31/sACN to the dmxsun's IP address and watch the values change in your web browser. It might seem laggy but that's only because the web interface only updates every second.
  • If you're curious and have such devices, connect a logic analyzer or RS-485 driver to GPIOs 6 to 21. Those are the pins where the DMX data comes out. If you attach an RS-485-driver to one of those, you can also attach and control real fixtures.

How do I compile the firmware?

If you just want to get started quickly find the most recent action run from the branch you're interested in, extract the attached artifact zip file (from https://github.com/OpenLightingProject/rp2040-dmxsun/actions/workflows/pico-build.yml ) and copy the rp2040-dmxsun.uf2 file to the Pico board when it's in bootloader mode.

Since this is a project that adheres to the guidelines set by Raspberry Pi for its pico-sdk (hopefully), you are best off following the detailed documentation at https://datasheets.raspberrypi.com/pico/getting-started-with-pico.pdf.

The build process will also build the React App for the integrated Web UI. For this to work, you will need to have NodeJS 14+ and NPM installed. React and all other JavaScript dependencies will be downloaded during the build, so make sure you are connected to the Internet.

With all dependencies installed, the following steps should suffice (example is for Linux, might differ for other OS):

text
git clone --recursive https://github.com/OpenLightingProject/rp2040-dmxsun.git
cd rp2040-dmxsun
mkdir build
cd build
cmake ..
make -j$(($(nproc)+1))

This should result in an .uf2-file being generated that you can flash to your Pico-board as described in Raspberry Pi's documentation.

If you are seeing build errors, please make sure you are using pcio-sdk v1.5.0 (released 2023-02-11)

How does the data flow internally?

Dmxsun uses a pretty flexible architecture, consisting of mainly 24 DMX buffers acting as the main data storage. Data can come in via USB (either via the emulated Ethernet or some other, emulated protocol), wirelessly via the nRF24 module or from one input port and is then, depending on "patching" stored in one or more DMX buffers.

From there, again depending on "patching", the data is sent to one or more of the local DMX ports, to the nRF24 wireless module or to the host PC via Art-Net or E1.31/sACN.

The patching is currently fixed but will be made fully configurable in the future. The current patching works like this: Universes 1-16 from USB or emulated Ethernet go to internal DMX buffers 1-16 which go to the 16 local DMX ports. Additionally, the first 4 universes are also broadcast via the nRF24 module, should one be connected. Data coming in via the wireless module is sent to DMX buffers 5-8 and will as such appear on the local DMX ports 5-8.

What are the upcoming features?

The best overview of planned features is to have a look at the GitHub issues: https://github.com/OpenLightingProject/rp2040-dmxsun/issues.

Since the hardware is modular, we do have the option to also support DMX input (currently work-in-progress) or universes with RDM support. There would also be the possibility to drive up to 6 WS2812b-based LED-strings instead of conventional DMX-512-A right off the board.

For the wireless part, mesh support is planned so you can add additional nodes forwarding the data when the wireless range is insufficient. It would also be great if we could talk to other, existing wireless DMX systems.

What might also help to make it easier to use is if dmxsun could emulate other, existing, USB DMX dongles. Then, it could also be used with other software that is not able to send Art-Net or E1.31/sACN but supports other dongles. The disadvantage here is that only a few dongles support more than 4 universes, while dmxsun supports 16.

As said above, the internal patching is hardcoded and cannot be changed by the user. This will change in the future, so that the current patching can be seen and changed in the integrated web interface.

How is the project licensed?

This source code, schematics and board layouts is licensed under the Apache-2.0 license.

Parts of the original example code (stdio_usb.*, ...) is:

text
 * Copyright (c) 2020 Raspberry Pi (Trading) Ltd.
 * SPDX-License-Identifier: BSD-3-Clause

Parts taken and modified from TinyUSB (tusb_config.h, usb_descriptors.c) is:

text
 * The MIT License (MIT)
 * Copyright (c) 2019 Ha Thach (tinyusb.org)

This project proudly uses the following libraries and thanks the respective developers for their amazing work:

  • jsoncpp, MIT license
  • libb64, Public domain
  • lwIP, Modified BSD License
  • Pico-DMX, BSD 3-Clause "New" or "Revised" License
  • RF24, RF24Network and RF24Mesh, GPL-2.0. Since this is not compatible with our Apache-2.0 license, this dependency will be removed in the future. dmxsun was GPL-licensed in the past
  • snappy, The 3-Clause BSD License

And for the integrated Web UI:

What else do I need to know?

If you attach an nRF24-board, you yourself are responsible to make sure you don't violate any local laws or regulations. Not all channels and transmit powers that the nRF24 module can use may be allowed to be used in your area. The Open Lighting Project cannot be held responsible should you break the law by using this project's hardware and/or software. Also, we did not run any EMC tests on the hardware. It might not be legal to operate the board without FCC, CE or similar certification, depending on where you live.

Parts

60
QtyValueFootprintReferences
12100nFCapacitor_SMD:C_0603_1608MetricC1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12
8680RResistor_SMD:R_0603_1608Metric_Pad0.98x0.95mm_HandSolderR1, R2, R7, R8, R11, R12, R17, R18
40RResistor_SMD:R_0805_2012Metric_Pad1.20x1.40mm_HandSolderR3, R4, R13, R14
40R-DO_NOT_MOUNTResistor_SMD:R_0805_2012Metric_Pad1.20x1.40mm_HandSolderR9, R10, R19, R20
4120RResistor_SMD:R_0603_1608Metric_Pad0.98x0.95mm_HandSolderR5, R6, R15, R16
4ADM2483xRWPackage_SO:SOIC-16W_7.5x10.3mm_P1.27mmU4, U5, U6, U7
4Conn_01x03Connector_PinHeader_2.54mm:PinHeader_1x03_P2.54mm_VerticalJ6, J7, J12, J13
4MountingHoleMountingHole:MountingHole_3.2mm_M3H1, H2, H3, H4
4XLR3Connector_Audio:Jack_XLR_Neutrik_NC3FAAH_HorizontalJ2, J4, J8, J10
4XLR3NC3FD-H:Jack_XLR_Neutrik_NC3FD-H_HorizontalJ3, J5, J9, J11
2CRE1S0505DCConverter_DCDC:Converter_DCDC_Murata_CRE1xxxxxxDC_THTU2, U3
2MEE1S0503SCConverter_DCDC:Converter_DCDC_Murata_CRE1xxxxxx3C_THTPS1, PS2
18P8CRJ45_Sparkfun:RJ45_SparkfunJ14
1Conn_02x06_Odd_EvenConnector_PinHeader_2.54mm:PinHeader_2x06_P2.54mm_VerticalJ1
1Logo_Open_Hardware_SmallSymbol:OSHW-Logo2_7.3x6mm_SilkScreenSYM1
1M24C64-RMN6TPPackage_SO:SOIC-8_3.9x4.9mm_P1.27mmU1

More from OpenLightingProject/rp2040-dmxsun

3
  • 2 layers106 × 55 mmIoboard 4ports unisolated, the printed circuit board in 3D

    Ioboard 4ports unisolated

    OpenLightingProject/rp2040-dmxsun

    RP2040-based USB DMX dongle with integrated web server

    56 parts128Apache-2.0
  • 2 layers106 × 55 mmIoboard 2ports rdm isolated, the printed circuit board in 3D

    Ioboard 2ports rdm isolated

    OpenLightingProject/rp2040-dmxsun

    RP2040-based USB DMX dongle with integrated web server

    33 parts128Apache-2.0
  • 2 layers106 × 55 mmIoboard 2ports unisolated, the printed circuit board in 3D

    Ioboard 2ports unisolated

    OpenLightingProject/rp2040-dmxsun

    RP2040-based USB DMX dongle with integrated web server

    32 parts128Apache-2.0

Similar boards

  • 2 layers107.6 × 29.5 mmAIL TSAL, the printed circuit board in 3D

    AIL TSAL

    columbia-fsae/2021_Accumulator_Electronics

    This repository contains all the PCBs embedded inside the accumulator container of Columbia University's 2021 Formula SAE electric racecar. They were designed in KiCAD by Sabin Zarrandikoetxea and Bert Steyaert.

    29 parts1
  • 2 layers139 × 113.5 mmEmber, the printed circuit board in 3D

    Ember

    kenyoshizoe/ember

    32Key Hall Effect Keyboard for Gaming

    112 parts36MIT
  • 4 layers80 × 50.5 mmLoeti, the printed circuit board in 3D

    Loeti

    elagil/loeti

    Soldering equipment for JBC irons

    110 parts5
  • 2 layers52 × 36 mmCyphalPicoBase CAN, the printed circuit board in 3D

    CyphalPicoBase CAN

    generationmake/CyphalPicoBase-CAN

    Board for the Raspberry Pi Pico to connect via CAN using OpenCyphal and UCANPHY Micro

    62 parts5CERN-OHL-W-2.0
  • 4 layers60 × 73.5 mmAnthracite bottom, the printed circuit board in 3D

    Anthracite bottom

    trope-oshw/anthracite

    MIDI-controllable fuzz pedal: open hardware (CERN-OHL-S-2.0), firmware (GPL-3.0-or-later)

    224 parts5CERN-OHL-S-2.0
  • 4 layers243.8 × 243.8 mmTangenta, the printed circuit board in 3D

    Tangenta

    vmetodiev/tangenta

    Micro ATX motherboard for Toradex Verdin iMX8M Mini

    577 parts5
  • 4 layers25 × 25 mmLaserCAN Board, the printed circuit board in 3D

    LaserCAN Board

    GrappleRobotics/LaserCAN

    59 parts3GPL-3.0
  • 4 layers85 × 54 mmIntegrated motor controller, the printed circuit board in 3D

    Integrated motor controller

    kgieselman/integrated_motor_controller_pcb

    Integrated Motor Controller for a robotics competion hosted by my work. The competitions changes each year so this board is flexible and contains mutliple headers for expanding to daughter boards.

    150 partsCERN-OHL-S-2.0

Questions

How big is the Ioboard 4ports isolated PCB?

It measures 106 × 55 mm and has 2 copper layers, 1.6 mm thick.

What parts does the Ioboard 4ports isolated use?

60 parts, built around the CRE1S0505DC and M24C64-RMN6TP. The full list of its parts is on this page, with links to each part's symbol and footprint where PCBKit's library has them.

Where can I download the Ioboard 4ports isolated KiCad files?

From the OpenLightingProject/rp2040-dmxsun repository on GitHub, at the commit this page was made from: the board is hardware/ioboard_4ports_isolated/ioboard_4ports_isolated.kicad_pcb and its schematic hardware/baseboard_2slots/baseboard_2slots.kicad_sch. PCBKit opens the board in the browser, with nothing to install.

Can I use the Ioboard 4ports isolated design in my own project?

Its repository publishes it under the Apache-2.0 licence: you may reuse it on that licence's terms (keep the author's notice, and for a copyleft licence share your changes alike).