will be read-only starting December 31st, 2018. For more info please look at this Forum Post


DMX512 (Digital Multiplex with 512 pieces of information) is a standard for digital communication between lighting controllers, dimmers, scrollers, scanners, and other stage equipment.

The electronic foundation for DMX512 is differential signaling over RS-485.

Arduino as master device (Sending DMX)


To send DMX data as a differential signal, use a transceiver like the MAX485 or 75176 (a cheaper version of the Max485).



DmxSimple is a library from! for outputting DMX signals. It is compatible with all recent versions of Arduino. By handling DMX frames in the background, DMX can controlled in a similar way to analogWrite.

(to use DmxSimple with arduino 1.0 have a look here:,85547.0.html)

ArtNet (DMX over UDP)

karistouf's library implements the ArtNet protocol for both sending and receiving DMX messages via UDP packets. chris's library also implements receiving DMX, working with EtherCard (i.e. the ENC28J60). Nat's library can receive multiple universes and has examples for the NeoPixel library and OctoWS811 libraries. It works with the standard Ethernet library.

Sending and receiving DMX without assembler programming

DMXSerial is an Arduino Library for building DMX Controllers and Devices. It is just using the hardware serial interface and needs no assembler code. The library supports Arduino 2009, Uno, MEGA and Leonardo Boards. See

Sending and receiving DMX RDM

The DMXSerial2 library supports the DMX-RDM protocol. RDM is the extension for DMX that enables bi-directional communication between the controller and the devices. See

Conceptinetics DMX Library (Master and Slave)

Conceptinetics DMX library is another library which can be used to either program your DMX Master or Slave Arduino. Though this library was written to support their Isolated shield it doesn't keep you from using it for other DMX shields as well. Examples are included in the download. Updates on this project can be found here as well:

Arduino as slave device (Receiving DMX)

Hardware design for how to receive DMX, developed by Max Pierson.

- A very simple DMX receiver, based upon the DMX Receiver C code by Henne Henne's Site, German. Slightly adapted for Arduino, the code allows receiving DMX with an Arduino without using Timer/CTC stuff. Read more

4 Channel DMX Receiver by Dan Fredell, based on a ArDMX. Uses a stopwatch instead of the Timmer class.

DMX to MPX Converter by Dennis Engdahl, based on Arduino Nano. Convert DMX to the old NSI Microplex MPX format. Allows NSI 4600 series dimmers to be controlled by DMX.

dmx_serial_sender by Kevin Deus. A simple program that reads DMX data from a CTC-DRA-10-1 DMX Shield, then sends it to the Serial port. No timers are used, and this example shows how to read the serial signal directly from the pin high/low states. This program is handy if you want to feed the DMX data from the DMX shield on an Arduino Uno to a different Arduino (such as an Arduino Due, for instance).

Arduino four universes DMX library

  • UPDATED - support for MEGA, NANO and UNO ***

Deskontrol four universes DMX library for Arduino Mega, this library allows up to four DMX universes as inputs or outputs, and does not use timers. In the examples can be found as merging two universes into a single output. With Arduino Nano and UNO can only use an input or output.

Example: Arduino Art-net to DMX, 2 universes node *** UPDATED support for MEGA and UNO ***

Example: Arduino small DMX controller

Arduino based ArtNet-Node for led pixels

Arduino based art-net node for led pixels and digital led strips with drivers type WS2811, TM1803, TM1804, TM1809, TM1812.

Arduino art-net node for led pixels *** UPDATED support for MEGA and UNO ***

Early research by Tomek

To send DMX from Arduino we use a driver chip like MAX485 or 75176 (the 75176 is just a cheaper version of the Max 485). The use of these drivers is a common way of transmitting and receiving DMX. You will find them in almost every dimmer/scroller etc.

The following explanations and examples are made for Arduino IDE versions 004 and 005. They will not work with other versions, because of the change in the 'delayMicroseconds'.

-However in the code example section you will find a nice looking piece of code from two great Hungarian guys (Peter Szakal and Gabor Papp ( ) which works for Arduino 008, at least.

-Since evolution keeps going on, here is a very nice code, working for a Duemilanove (tested on 013 and 017), thanks to Jason Ditmars