Arduino DMX-512 I/O Shield

By Max


Breadboard is Great and All, But it’s not going to survive a six week run with actors tripping over it and that kid’s show that runs on Sunday mornings.  So here’s a shield that can fit onto your Arduino and securely hold all your connections in place.  It is tested and working with the dmx reception software I wrote for the Arduino.


  • Same hardware be used to receive or send DMX, so you only have to build one shield.
  • Onboard termination switch.
  • Reset switch brought to top of shield for easy access.
  • Pin 13 LED brought to shield for status/error messages.
  • Two tact switches allow in-the-field addressing, without permanently disabling any pins.
  • Header sockets for easy prototyping.
  • Solder through-holes for permanent installations.

Note: I changed the pin assignments slightly from early versions of the software to allow easier routing.  Pins 3 and 4 in the software are now pins 2 and 3, respectively.  As of Rev11 this change has been made, get the latest version here.

Continue reading for the parts and instructions…

Pages: 1 2

22 Responses to “Arduino DMX-512 I/O Shield”

  • E. Roth Says:

    I’ve been waiting for something like this for some of my projects! It’s not at the top of my list, but I’ll definitely be putting one of these shields together sometime.

  • Mickey Says:

    Hi,have just got Rev 13 working on a 328 (Duemilanova) with Arduino 15 with the modified libraries. It works with an Artistic licence Microscope DMX tester and again with Magic Q + Enttec Pro. Will test with some Avolites desks but am sure it will be fine. Fantastic stuff. Thanks Mickey

  • Michael Says:

    Hi, Just wondering if you’ve considered supporting RDM? It would allow you to patch intelligent fixtures, change behaviour mode, invert axes, and so on – all from the comfort of your arduino sketch. What d’you think? (Email me)

  • Max Says:

    RDM is something I’m interested in doing, and the hardware has been designed to accommodate this functionality. But it’s not really a priority of mine, given that there isn’t a major console that supports it, and in the long run RDM is an evolutionary dead end anyway. In ten years, as intelligent lighting becomes a standard feature of every show, we won’t still be daisy chaining cable that costs $1.50 a foot everywhere. I hope.

  • halfdaft Says:

    Hi Max – this looks great, nice work. I’m planning on adding DMX input to a device I’ve been working on (for theatre use), have you used your adruino/DMX shield combo to pass DMX through, i.e allow the arduino/shield device to live within a DMX chain?

  • my shield/program Says:

    I actually haven’t used this board in a real-world application at all. I seem to be getting larger shows all of a sudden where I don’t have time to do custom stuff like this, I either have to rent something or do without :( (but if you have a project that requires bespoke technology, drop me a line!)

    There’s no real magic to the pass-through, you just connect the five wires on the male and female together 1-to-1. Other people have reported it works for them. Good luck!

  • Dan Says:

    Hi there,

    I was recently trying to see if I could use this to receive DMX via the UART (as you have coded it) and then use NewSoftSerial with rx attached to pin 9 and tx attached to pin 10 so that I could send messages to an xbee at 56700 baud rate.

    So far this does not seem to be working. From my tests it seems that after the USART and TIMER2 setup the NewSoftSerial library will not work.
    Have you peaked at this code before?

  • ISO-B Says:


    I build DMX I/O shield. I managed to change dmx address, but I don’t get dmx signal. I am sending with other arduino with DMX shield. It sends fading values for every channel. But I still don’t receive nothing. DMX shield is tested with dmx tester and it is working.

    Does DMX-512 I/O Shield works with Duemilanove328?

  • GZT Project Says:


    Just want to say thanks, i’ve been loosing my patience trying to do it myself :)

    Works great for me and my project: (a bit clumsy google translation…)

  • CustardCat Says:

    Very cool! I like this a lot.

  • Erick Nava Aldana Says:

    Recently buy parts to make DMX shield from CuteDigi, three questions:

    I have DMX 3 pin LED bars, its compatible?
    How to connect from 3 to 5 pin and viceversa?
    Need to make some changes in code?


  • Psysoul Says:


    Do you have any dmx board to sell? Even without the parts..I’d buy it, please send me an e-mail.


  • Psysoul Says:

    Nevermind..I found this at cutedigi, this is great.

  • JasonK Says:

    First, my thanks to Mr. Pierson for developing this board and software. I’m really just a carpenter working as a TD for a non-profit theatre in Washington, DC, and I’m just trying to put some simple DMX effects together.

    I’ve been successful with sensors, wireless, wav files and motors thanks to shields/tutorials from another site- so I’m not totally helpless (though if this thing were made out of wood I’d be more comfortable!).

    I bought 2 PCBs from cutedigi, and the parts from the list, but the cutedigi boards have some extra holes (above and below the Max485 for example, and just above the reset button). Are these holes to be left open, or are they for optional/added components?

    If anyone has a picture of a functional, assembled cutedigi board, I guess that’d be enough, too.

    For the record, I am using the Arduino Uno.


    The cutedigi board, front:

  • Max Says:

    Hi Jason,
    I think the holes would be extra in this case– the board as I laid it out has holes for jumper wires on the top (single sided board), while the cutedigi board is double sided. I’d be interested to know how the build goes with their product, be sure to post back with your experience (I’m not affiliated with them in any way).

    Someone mentioned that the code as written does not work with the Uno, I don’t have one to test with myself. But the processor is the same so I would think that adapting the code would be fairly straightforward, if any adaptation was needed at all. Again, I would be interested to know what you experience is.

    Best of luck!

  • Michael Says:

    Hi, very interesting project. I was just wondering whether this could be used so that I could plug in my DMX output from my lighting desk into the input of the shield and the output of the shield to my demultiplexer (My school doesnt own any “DMX” lighting fixtures). This way, I could control many interesting things from one simple input from the desk (Lets say a flash button being pushed) could trigger all manner of interesting chases and scenes, co-ordinated to the second.

  • dargs Says:

    Hi Max… I’m wondering what changes I would need to make to use timer1 for the dmx receive code ?

    I’ve got a LEDStrip demo working, but it uses timer2 for PWM, *adafruit RGB led strip*


  • Matt Says:

    Thanks for the great resource!
    Will this retain the DMX address with a power loss or simple reset? Sorry if this is a simple question :)

  • Max Says:

    Hey Matt,
    The latest version of the code does indeed store the address in eeprom, if you go to the main post you can download it there.

  • Matt Says:

    It took some doing, but I got this to compile and upload to my Arduino. I’m trying to use the received DMX to output PWM on 9-11 for RGB values. Whatever it’s receiving, it’s just causing my LED’s to flash intermittently. I’m thinking there’s 2 causes: I’m using an UNO and I’m using the latest Arduino software. Any thoughts? Should I try this with an older (pre-1.0) release?

  • Max Says:

    Hi Matt,
    For troubleshooting purposes, I’d start with a simpler circuit, e.g. turn an LED on when a level greater than 128 is received. And, yes, I would start with revision 0023 of the Arduino IDE. I’ve added a note to that effect to the post text, this post is now more than four years old :)

  • Joe Dunfee Says:

    I came across another web site that gave a great explanation of the issue.

Leave a Reply