Introduction: Artnet LED Pixels With ESP8266

Picture of Artnet LED Pixels With ESP8266

After the success of my last Instructable, ESP8266 Artnet to DMX, I have completely revamped my espArtNetNode code, releasing v2 with new features such as RDM support and WS2812 output. This code is still in beta and there are a few known bugs - and probably a few unknown also.

I have written this Instructable to help with some common questions on setting this device up to control WS2812 pixels.

We will quickly look at how I have laid out and wired my 30 x 15 pixels, then I'll show you which settings you need to get the ESP connected. Next, I'll do a quick run through how to patch the ESP outputs into Jinx so we can get some cool effects running. In the final step, I'll discuss some of the issues I'm currently having and things I'd like to add in the future.

The video here will show you very quickly through all of these steps. I apologize for the poor sound quality - I don't have an external microphone and my laptop fans are really loud.

I'd love to see how you use this. Post some photos, videos and comments below to let me know your experience and any suggestions you may have. I read all the comments I receive and try to reply in a timely manner.

Let's get started....

Step 1: Pixel Layout and Wiring

Picture of Pixel Layout and Wiring

This step is fairly easy but very time consuming.

Find a board to mount everything to - I used a 6mm MDF sheet, 600mm x 1200mm in size.

Work out the best way to lay everything out. I had 3x 5m rolls of tape so decided to do 15x 1m strips. This gave me 200mm at the side for the electronics and PSU. I used small bolts and standoffs to mount the PSU and PCBs. Measure the hole spacing and drill through the MDF - you might want to make a test template using scrap paper first.

I spaced the tape so the LEDs are the same distance apart as they are on the tape. I used the adhesive already on the LED tape to stick it down. Make sure you pay attention to the data in and data out for each strip - have them alternate to make connecting the data lines easier, ending up in a snakelike pattern. Also make sure your ESP location is next to the data in for the first strip.

Now wire all the power up. I chose to run 3 power lines, 1 per 5m of tape, and each with it's own fuse. When using such a large PSU, I'd recommend fuses to ensure you don't damage anything if there's a short. I mounted my fuses to a small piece of perf board to make a basic power distro board. If your runs are longer than about 150 pixels, you'll need to "inject" power along the runs to ensure the LED brightness and colour doesn't suffer. Make sure you insulate any connections so you don't get a short.

Data can now be connected. My code will allow a max of 680 ws2812 pixels per port. Wire the ESP to the data in of the first strip. Wire the data out of the first strip to the data in of the second strip, data out of the second to data in of the third....

To finish it off, I ran a strip of black gaff tape to hold the end down and protect the small data connections when I move it around.

Step 2: ESP8266 Hardware & Firmware

Picture of ESP8266 Hardware & Firmware

The PCB in the photos is of the prototype which I'm currently testing. It is not quite finalised so the PCB files aren't yet public. I have however put the schematic above. There are also earlier schematics available on my github along with a Max485 to Pixel schematic needed if you use this schematic in it's entirety - I bypassed the OK & Max485 in the schematic above for my testing.

Ensure you have the latest ESP8266 Arduino Core files and the latest Arduino IDE version.

You can get the latest source code and pre-compiled binaries for this project from my github. You can also submit bugs or requests using the Issues tab there or you can post in the comments below.


Open the source file, connect the ESP8266 and flash it. I'm not going to cover this here as it's already been covered.

Once you've flashed the ESP, unplug it for a few seconds before repowering it. I find a soft reset doesn't always work for me.

The next time you want to flash firmware, you can do so via the web UI explained in the next step. In the Arduino IDE, goto Sketch->Export Compiled Binary to generate a .bin file in your sketch directory. Then goto the ESP web UI, select the firmware tab and upload it there. This is much easier then connecting a USB-serial programmer each time. You can also use pre-compiled bin files from my github when they're released.

Step 3: EspArtNetNode Config

Picture of EspArtNetNode Config

Now that you've got the device firmware installed, we can start getting everything connected.

Your computer should be able to see a WiFi network called espArtNetNode_xxxxx (the network will have a random number based on the chip's ID). Connect to it - the default password is byMtongnz2017 which can be changed later if you wish.

Once you're connected, open your browser to and you should see the settings UI shown above. The first page gives you a run down of your settings.

Head to the WiFi settings page. Either enter your WiFi SSID and password or you could use stand alone mode. Click save - the save button should turn green to indicate the ESP has saved the settings.

If you need, head to the IP settings page and set a static IP. Once again click save.

Now unplug your ESP, wait a few seconds and repower it. Once again, I find it sometimes doesn't work when using a soft reset.

Reconnect to your main WiFi and you should be able to now point your browser at your ESPs new IP. If you're using DHCP, you may need to check on your routers config page to find the IP. You should see the same settings UI.

Head to the port A and/or port B settings. Choose WS2812 as the port type then click save - you should now have options for your pixel output, filled with the defaults which should be fine for most people.

First set the protocol - I use Artnet but you can use sACN if desired. sACN will still use Artnet for discovery and configuration.

Next, set the number of pixels - less pixels per port will make the device faster so it pays to set it to what you actually have but leaving it higher wont cause any issues.

Make sure you have pixel mapping as the mode. 12 channel FX allows you to control all your pixels while only using 12 DMX channels. It's explained more on my github.

Finally set the Net, Subnet and Universe settings. Each DMX universe allows 512 channels, so 170 RGB pixels. Hence why we need 4 universes for 680 pixels :)

Once everything is set, click save again. Make sure you click save if you intend to leave the page as the device won't prompt you to save and you'll lose any changes.

Step 4: Jinx Config

Picture of Jinx Config

Jinx is a free software for controlling LED matrices. It is not the only software for this - there are heaps of others available, both free and paid.

Start off by unchecking the Start Output option in the Setup menu. You'll be unable to make any changes while this is enabled.

Now we need to add some Output Devices, also in the Setup menu. Click Add, select Artnet or sACN, turn off Broadcast, enter the ESPs IP, enter the Net, Subnet and Universe as per the settings from the previous step, and then click OK to save the device. You need to add a new device for each universe you'll need - I'm using 3 for my 450 pixels.

Once you've added all your devices, click Close. Open the Matrix Options and enter your pixel dimensions - for me it's 30 pixels wide by 15 high. I don't touch the other options. Click OK to save the settings and close the window.

Now open the Output Patch. This is the tricky part and you must match each pixel in the physical world with each pixel in Jinx. My pixels are patched in a snaking pattern, starting at the top left corner but you can have them in any configuration you'd like. Start by clicking Clear Patch - the patch should already be clear but this makes sure.

Red squares means there's no output patched to that pixel, green means there is. Click a square and you'll see the device it's patched to and the channel for red, green and blue. You can manually enter these for each pixel but that'll take a while.

Select the top left corner and click the Fast Patch button. Select the dimensions for what you're patching, for me it's X: 30, Y: 6 (180 pixels - it'll only patch 170 as that's the max per universe). In patch mode, select the wiring type you used, for me it's snake lines starting top left. Set your pixel order - normally RBG for ws2812. For the first channel, set it as 0 (Jinx counts from 0, not 1). Select your device - mine is (0 | 0 | 0). Now click OK and your channels will be patched.

Use the fast patch in combination with manual patching until your entire matrix is patched. Then click close on the patch window.

Go back to the Setup menu and check the Start Output option.

Jinx should now be sending data to your pixels via the ESP - but it's probably all black for now. Have a play with the various effects and find something you like. Jinx allows you to scroll text, play video, have an EQ running and you can store scenes for later callback.

Step 5: Bugs and Future Goals

Picture of Bugs and Future Goals

As you can see here, there are a few bugs and feature requests that still need to be addressed. I'm going to discuss the main ones below and also mention my give away for people who help me out with these.

Main Bug:

The biggest bug at present it a watchdog timer reset which occurs about 10-20 minutes into operation. I haven't been able to find the cause of this yet. Suggestions for a cause at this stage are that it's related to a rouge interrupt or possibly the WiFi/service routines being blocked for too long. I am offering a reward for the person(s) who can fix this issue.

Feature Wish List:

Many of the other issues are more feature requests. They range from web UI improvements to support for other pixel types.

I would like to see a scene storage feature added as I have in v1.2 of this device. With the addition of the ws2812 support, there is a lot more data to store. I'd also like to be able to store chases. This is a feature for which there is a reward offered.

People would also like to have a hardware button or screen to select stored scenes. Once scenes storage is implemented, I think this would be easy to add.

I'd also like to allow DMX inout to control ws2812 output or DMX scenes on the other port. This may be quite tricky to implement.

Give Away

I am offering a few of my PCBs featured in this Instructable as prizes/rewards for people who contribute to this project. In addition to the 2 mentioned above, I'm giving one to someone who contributes the most. They will be fully populated and flashed with the latest firmware. Details are here.


steveastrouk (author)2017-12-27

Your 5V1 and 5V2 rails aren't, are they ? You mean isolated 5V rail 1 and isolated 5V rail 2

Saying 5V1 means 5.1V, 5V2 means 5.2 V

MichaelJ205 (author)2017-12-20

I tested it on WS2812 strips but it doesnt work. The problem is that my WS2812 strips work on 800kHz and the ESP is outputting 400kHz for the strips. I found a hint of that switch in your ws2812Driver file, but I cant get it to work with double speed. Can you say where I have something to change?

Lightfox (author)2017-06-08

First of all thanks for your great work!

tested the software on an ESP-07 with 32 Ws2812-Pixels using Jinx! - it
worked fine. (Found a little bug in saving new device-Name and new
Hotspot PW: couldn't save new Name and PW.)

I consider building a
larger Matrix with about 900 LED pixels. Did you ever test your device
with a large amount of pixels and can the ESP8266 handle such an amount?

I found a circuit to prevent pixel damaging due to overvoltage, which
seems to be a problem sometimes. ->

Perhaps you could suggest the use of this protection circuit for the pixels' data line in your Instructable.

mtongnz (author)Lightfox2017-06-19

I'm glad you got the device working.

This device will handle 1360 pixels (680 per port). I haven't tested it with that many but it should work without any issues.

The circuit protection is interesting but I don't really see the need for it.

Let me know how you go

Lightfox (author)mtongnz2017-12-04

Finally - i made it. I bulit a 39x22 pixel matrix and everything works fine. Pictures will follow. (Main freezing bug is there of course - nevertheless a great piece of software!)

During tests with a very small amount of pixels, I noticed that they can get easily damaged by voltage peaks that can occur for example, if the pixels are connected to power before ESP is. In these cases the result was a damaged first pixel. Since I used the protection circuit (as near as possible to the first pixel), there was no more pixel damage and beyond that, the data line seems to be a little more protected against interferences. I don't want to claim that this circuit is absolutely necessary, but I made good experiences with it.

I hope you'll have success solving the wdt problem and look forward to a new version of your great software.

djpeterlewis (author)2017-06-17


Such a great project. This is something that could change the access to new ways people can control Lights/Lighting.

I eventually got the ESP flashed after loading all the Libs and Software. The code compiles perfectly.

My problem is I have used the ESP8266-12F and it looked like a plug and play swap with the ESP8266-07 but somehow then I am trying the WS2812 Pixels, somehow does not work. I am very familiar with JINX and the adressing of Artnet. From the tx pin I have a 470 ohm resistor and also joined the Ground from the controller to the LED strips.

My final solution that I want to control 100 WS2812B LEDS or WS2813 LEDS ( Same as WS2812B except with a Faulty Chip Bypass 4-wire) but I want to be able to have 16 or 25 ESP2866 talking back to Jinx. I am concerned about the syncrosition between all the units as if there is inteference on a few units then the final display would not look good. I would look at maybe making a mesh network out of these units so that there could be a Sync between all units.

Next to the 100 LEDS I wanted to put Infra-red Transmit/Receive and send that info back to the Main computer for processing ie trigger LEDS in that vacinity.

It is pioneer projects like this that will drive the Industry, WELL DONE

DBender (author)djpeterlewis2017-11-27

Hello dear friend, I'm sorry for my bad English, I'm from Brazil and I do not speak English very well ... I'm trying to set up the project here in my house. I use ESP8266MOD but when testing jinx it sends the data (click on play) the ws2812 leds connect all in white color and stay static on white ... what could be this mistake? Can you help me? My contact whatsapp +55 51 998473605

Thank you very much for your attention.

mtongnz (author)djpeterlewis2017-06-19

I think I ended up removing the 470ohm resistor when I had a similar issue. Give it a try. Also, try flashing the binaries from my github as some people are having issues with compiling from source.

Let me know how you go.

djpeterlewis (author)mtongnz2017-06-19

I tried again and suddenly without the resistor it started to work. I think mabe a level convertor might be the best to add to the circuit and then a protection circuit before the First LED

djpeterlewis (author)mtongnz2017-06-19

I did try both of those already with NO luck. I am going to get another 8266-01 to see if I can get it to work on that

DBender (author)2017-11-20

Hello friend, I'm having trouble giving no software no leds connect in white color and not performing any video action ... what could have been the problem with the problem and no longer the test with the glediator and also the error. Do you have any idea what to do? thanks

alexbs (author)2017-05-29

Before hours here have comment about that all pixels light white.

I am also interested in the cause and the solution but this problem

NathanL100 (author)alexbs2017-05-29

Hi mate, That was me, and the solution for me was to upload the supplied bin files instead of compiling from scratch. My guess is I was using an old library somewhere, or one had been modified.

NathanL100 (author)NathanL1002017-05-29

Further clarification, compile and load the sketch to your device, then wait for the device to go into hotspot mode, log onto it, and use the software upgrade feature and choose one of the bin files from the github repository.

alexbs (author)NathanL1002017-05-30


Precompoled files work fine.

But source are fake.

mtongnz (author)alexbs2017-05-30

I can assure you the source is 100% real. The pre-compiled binaries are from that source. I may have made a change somewhere in the Arduino core files. I'm going to try to replicate the issue with a fresh Arduino install and I'll post here when I figure it out.

mschlen (author)mtongnz2017-10-18

Maybe other users made the same mistace as me and I can help here: Flashing the ESP over the Arduino IDE and not considering the right board settings. I firstly flashed the ESP with the wrong "Flash Frequency" and the wrong "CPU Frequency". This resulted in bad (flickering) DMX-Output, but furthermore if I selected the WS2812 Output every LED shows always bright white. A look with the oscilloscope in comparison to the datasheet of the WS2812 showed, that the signal outputted from the ESP was too slow. So be sure by uploading via Arduino IDE to select "Flash Frequency 80MHz" and "CPU Frequency 160MHz" in the board settings!

mtongnz (author)alexbs2017-05-30

That is a strange issue but it seems a few people are experiencing the same. It compiles and works fine on my system. I will do a fresh Arduino install in the next few days and see if I can replicate the issue. I wonder if I've modified one of the core files and forgotten about it. Sorry for the inconvienience. I'll post here when I figure it out.

DominikJ9 (author)mtongnz2017-06-08

1UP on this issue, precompiled works fine but building from source yields no DMX(TX) output. I'd like to work on adding some features/tweaks but can't really do anything if it doesn't work as is either.

Tried using the ESP8266 core from your github, which fails to build however.

Build settings:
Core Development Module
Flash 40MHz
CPU 160MHz
Flash 1M (256K SPIFFS)
Debug Disabled/None
IwIP Espressif

Interestingly the binaries from source are 30kB smaller (330kB vs 360kB).

I love the project otherwise and would really like to be able to add to it.

mtongnz (author)DominikJ92017-06-10

Try the new source for beta5g now on github and let me know how it goes

DominikJ9 (author)mtongnz2017-06-12

It seems like the same issue remains but I've investigated further and it looks more like it's a networking problem rather than on the actual output because (tested this with both rc0 and 5g):


DMX-Workshop reports node normally (with arrow out icon), controlling through DMX-Workshop works
ArtNetominator sees node normally
QLC+ or other ArtNet sources manage to output DMX through the node


DMX-Workshop reports node abnormally (with a crossed out exclamation mark), controlling through DMX-Workshop works
ArtNetominator doesn't see node
QLC+ or other ArtNet sources fail to output DMX through the node without specifying specific IP (Must be instead of

According to the packet dissector, the Node seems to reply to polls normally :/

Are you sure you're including the right library versions?

Build environment:

Tried building in two environments, W7 and Raspbian with a fresh install.

Using the libraries given in "libs" + ArduinoJson + ESP8266 Boards package v2.3.0 from the repo

Then the same build settings as mentioned above and using Sketch>Export Compiled Binary to get the .bin file.

There is still the same 30kB discrepancy even though both precompiled and self-compiled binaries have grown by 1kB with this version.

mtongnz (author)alexbs2017-06-10

Try the new source for beta5g now on github and let me know how it goes

erod998 (author)2017-10-16

Thanks for taking the time to make this. I have a quick question. I plan on running 2 5m strips across my ceiling, maybe more in the future. Can this run WS2811 chips? They seem to be a bit cheaper. Also, you said you can control 680 pixels per port. So I can run two 16.4ft strips with 300 leds each from the ESP8266? THank you.

Lars-OleS made it! (author)2017-08-08

Hey thanks for this :) I struggled a lot with finding the right output pin, i thought the leds in the schematic are the ws2812 leds so i had them connected like that until i realised that the first three leds changed according to the state of the esp. Maybe you add that they should be connected to the tx pin :D. Now i know that it was dumb

I had to use port A and B, because on port A just the first Universe was working, the second was not displayed correctly, i dont think it was because of the output patch.

Then with a Lan cabel connected to my pc the port B had quite a big delay up to a second. I "fixed" it with unplugging the cable and using my Wifi. Now you just see a delay when you use the strobo mode of jinx.

Thank you for my new ceiling lamp


ole1907 (author)Lars-OleS2017-08-09

Ok, i found two bugs but they arent that big. When i switch power on and off too fast the esp deletes all its settings. The other one is that its state in the WebUI is always "not outputting".

mschlen (author)ole19072017-10-16

Your first mentioned "bug" is no bug! This should enable resetting the ESP to restore factory defaults. Reference: "Restore Factory Defaults"

Lars-OleS (author)Lars-OleS2017-10-03

turns out the delay was because of my 15 year old wifi router :D

erod998 (author)2017-10-14

Can this work with ESP2811s as well?

kgreene8 (author)2017-10-13

Hi All,

Need some help. For a while, I've been looking at this and the neopixel. I was wondering if anybody could point me in the right direction of esp8266 controlling a simple RGB tape (not pixel).

I'm just starting to learn coding...

NathanL100 (author)2017-08-02

Hi Matt, in your old version of this software I was able to set a pin to a PWM value based on a DMX channel value, am I able to do that with this version, and if so, where in the code, and how do I accesss the DMX channel values?



Egon Taumel (author)2017-07-21

planning to use your awesome artnet-node-solution in a big interactive art installation in which I willI need to control a DMX-Moving-Head using a Joystick... Is this possible?

mtongnz (author)Egon Taumel2017-07-31

Sounds possible. You'll just need some lighting software that'll let you use a joystick whci I'm sure is out there somewhere.

barmon111 (author)2017-06-26

Have you got any ideas why led strips doesn't got signal from wemos d1 mini? I've tried with different pins, still nothing...

mtongnz (author)barmon1112017-06-30

You'll need to give me more to go on than that. Are you using it in stand alone mode or with a wifi ap? Have you checked your firewall and network aren't blocking artnet? Have you ensured that your control software is setup correctly?

barmon111 (author)mtongnz2017-07-03

Hello, thanks for your answer. It was caused because of wrong cable connection and too weak power source. Now i'm testing it, and looking into code to skip last few chanels in every universe.

NathanL100 (author)2017-06-29

Any news on the resetting/freezing issue?

mtongnz (author)NathanL1002017-06-30

Unfortunately I haven't made much progress on this. It's proving very elusive

djpeterlewis (author)2017-06-19

Hi Matt

I sent you a small something to buy yourself a well deserved drink.

Thank you

mtongnz (author)djpeterlewis2017-06-26

Thanks heaps! It's much appreciated

uncxh (author)2017-06-13

Great Project!

I've added a 4 Channel PWM-able Constant Current Power Supply to Drive a High-Power LED Module also. 2 dedicated WS2811 ICs will generate the PWM, so there is no need for changes in Firmware and the whole Board can be configured by switching some Jumpers. Have not tested yet, but looking forward to do so soon.

mtongnz (author)uncxh2017-06-19

That sounds very promising. Let me know when it's done and put up a video for us :)

S-H-A-D-O-W (author)2017-05-30

What is this firmware 5g ? Why not 5d ? Where is the difference ?

mtongnz (author)S-H-A-D-O-W2017-06-10

I've decided to release 5g as a few people seem to have issues compiling 5d. Give it a go and let me know if it works for you

mtongnz (author)S-H-A-D-O-W2017-05-30

5e & f were failures so didn't get released but I kept them for reference if I want them later. 5g is the beta I'm currently working on. It's not much different - mainly just adds APA106 LEDs for status feedback.

I'll hopefully get more time in the next couple of weeks to try to find the WDT reset cause and will release a beta6

NathanL100 (author)2017-05-29

Never mind, Uploading the bin file as opposed to building from scratch made it work.

About This Instructable



More by mtongnz:Artnet LED Pixels With ESP8266ESP8266 Artnet to DMXESP8266 Breadboard
Add instructable to: