Introduction: Wi-Fi-Controlled WS2812B Individually-Addressable LED Yard-Stake Lights for an E1.31 Light-show

Check Out A Video Of My Finished Product Here!

Have you ever driven around your neighborhood during the Christmas season, to observe all the wonderful lighting displays neighbors have put up, and come across those houses whose lights are synchronized to music?(If not, you should really check out some of the awesome videos of light-show houses on YouTube! You can check out mine too!) I've always wondered how I could make a light-show like those houses, and I've finally discovered the "secrets of the trade."

There are a few different components that go into making a really high-quality light-show on your house, and in this instructable I will be focusing on one essential part: the LED lights themselves. While many light-show makers use LED panels/matrices and "mega-trees" to display complex effects, I decided to take a more minimalistic approach and create simple vertical LED bars that can be easily stuck into the ground using stakes.

I chose this design because I wanted to be able to really create emphasis between the different columns rather than having them blend together on one panel, so that I could create cool lighting effects where the light flies up each "stake" in sequence across the lawn. This effect is somewhat hard to describe, so I've attached a .gif to show you what I mean.

NOTE: These "stake-lights" as I call them are intended to be used with other components of a DIY light-show, but they may be used stand-alone as well.

Before you begin building these lights, it is a good idea to get familiar with the idea behind the control of WS2812B lights, as well as the DMX and E1.31 protocols.

DMX stands for digital multi-plex. It is a lighting control protocol that is composed of "universes" of individual channels of data, where each channel has a value ranging from 0 to 255 and each universe is composed of 512 channels. DMX is commonly used in stage-lighting setups, but it is also useful for controlling individual pixels in more advanced lighting set-ups, such as the one I will show you how to build in this instructable.

E1.31 (also known as sACN, or streaming ACN) is a standard designed by ANSI (American National Standards Institute) to allow networks of lighting devices to communicate with each other wirelessly. E1.31 is a 2016 follow-up to ANSI's E1.17 standard which was originally published in 2010. Basically, E1.31 is a protocol for transferring DMX-512 packets of channels over a network.

WS2812B LED Strips are composed of individual pixels of LEDs, each with a red, green, and blue light emitter, which are individually addressable, meaning that they can each be set to a different RGB color value, instead of all the LEDs on the strip having to always be the same color. This individual addressability is accomplishing by incorporating tiny computer chips into each LED pixel. These WS2812B LED Strips can be chopped and rearranged because each pixel receives data for the entire rest of the LED chain. The first pixel receives data for the entire string of LEDs, reads the data intended for it, displays the corresponding RGB value, and outputs the rest of the data (for all the pixels after it) to the next pixel.

The reason why I decided to incorporate all these different communication protocols is because I wanted to be able to use these WS2812B lights in a light-show, controllable and pre-programmed from a computer. The computer can output E1.31 data (which contains DMX data) to devices on the same network. The ESP8266 Wi-Fi board can pick up this data, read the DMX data from it, and then convert that DMX data into a signal which the WS2812B LED Strip can understand.

All that said, let's get into it!

Step 1: Gather Tools and Materials

Here is a list of everything you should have on-hand before beginning this project.

You may create "stakes" of different length or quantity, but you will have to adjust the materials accordingly. What I have listed below is what is required to make ten half-meter long stake lights.

(All LED strip supplies came from BTF Lighting on Amazon, and I would definitely recommend them.)


  • soldering iron
  • wire strippers/cutters
  • PVC pipe cutters
  • screwdrivers
  • heat gun (optional)
  • digital multi-meter (optional)
  • a computer for programming, loaded with the Arduino IDE (preferably Wi-Fi enabled)
  • micro-usb cable


  • WS2812B RGB LED Strip (5-meters of black pcb at 30leds/meter with IP67 protection is recommended, but you may customize as you wish.)
  • 5V 20A Power Supply (You can get a higher amperage/wattage power supply if you wish, but 20A/100W should be more than enough for this project. Be sure to verify your you get the right voltage for you LEDs.)
  • 3-pin LED Strip Extension Cable (I recommend 10-meters.)
  • 3-pin JST M/F Connector Pairs (At least 10 pairs of connectors for this project.)
  • NodeMCU ESP8266 Arduino-Compatible Board (only one is necessary)
  • TTL Logic Level Converters from 3.3V to 5V, with Header Pins Included (I used these, although only one is needed.)
  • P.C.-type power cable (must have three prongs and must be low gauge)
  • PVC pipe (at least 5 meters)
  • metal stakes (at least 10, can be home-made if necessary)
  • electrical tape
  • zip-ties (at least 40)
  • solder (duh!)
  • soldering flux (recommended)
  • heat-shrink tubing, preferably two different sizes (optional)
  • a few small M/F and F/F Arduino-type bread-boarding wires

If you are planning to design a light-show with these lights synchronized to music, you will also need...

  • Vixen Lights Software (free)
  • external Wi-Fi router (optional, for added security)
  • Low-Power FM Transmitter (or simple speakers)
  • 3.5mm audio cable

If you will not be using these lights for a light-show synchronized to music, you will have a finished product after Step #9. The code I have provided is for a light-show, so you will have to replace the code I provided with your own code for the NodeMCU ESP8266.

Step 2: Cut the LED Strip, PVC Pipe, and Extension Cable

For this step, you will need:

  • 5 meters of WS2812B LED Strip
  • 5 meters of PVC pipe
  • 10 meters of 3-pin LED Strip extension cable
  • Wire Cutters
  • PVC Pipe Cutters

Before doing anything else, you have to divide the LED Strip and the PVC Pipe into 10 equal half-meter long segments.

Use your wire cutters to chop up the LED Strip every half meter, and be sure to cut it right in the middle of the copper connectors or soldered connections. This is to ensure that both of the strip ends which you create have enough space on the copper pads to solder wires to them.


Next, use your PVC Pipe cutters to chop the PVC Pipe every half meter. The pipe doesn't have to be perfectly cut because it is only to be used to hold the lights up.

Finally, use your wire cutters (or scissors, but wire cutters are more convenient) to cut the 3-pin extension cable into 10 equal segments of about one meter each. They do not need to be perfectly even. You can use a longer extension cable and cut it into longer segments if you wish, but one meter each is usually more than enough.

After this step, you should have:

  • 10 LED Strip segments (half-meter each)
  • 10 PVC Pipe segments (half-meter each)
  • 10 3-pin extension cable segments (one meter each)

Step 3: Solder the Cables, Connectors, and LED Strip Segments

For this step, you will need:

  • 10 3-pin extension cable segments (from previous step)
  • 10 3-pin JST Male connectors (you might not need all ten)
  • 10 3-pin JST Female connectors (you might not need all ten)
  • 10 WS2812B LED Strip segments (from previous step)
  • Soldering Iron
  • Digital Multi-Meter (optional)
  • Solder (duh!)
  • Soldering Flux (recommended)
  • Wire Strippers
  • Electrical tape

First, you will want to be sure to peel apart and separate each wire for every JST connector and extension cable to ensure that there is enough space between the ends so that you don't have any trouble soldering them. Then, you need to use the wire strippers to strip enough plastic wire covering off of each of these wires so that there is enough exposed wire to solder with.

Before we continue, make sure you know which end of the LED strip is the data input side and which side is the data output side. The arrows along the LED strip indicate which direction the data is flowing: from input to output.

One critical decision I had to make when I designed my LED "stakes" was on what end of the strip to put the extra length of wire. I decided to put the wire extension on the output end of each LED strip, and attach the extra extension to the power supply, to increase the distance possible between the power supply and the LED "stakes" themselves. You may modify this as you wish, but I think my decision was the best option for the end goal.

Before you go any further, please decide whether you will be using heat-shrink tubing to protect your soldered connections. If you will be using heat-shrink tubing, you will have to cut the tubing to the right size and fit it over your wires before you solder the wires together. You should consult the following step before soldering in order to ensure you have each piece of heat-shrink tubing ready and slipped over the wires. If you will not be using heat-shrink tubing, simply continue reading.

Now, you can begin soldering. Be careful, and check to make sure that each connection is strong and fully attached. You will be soldering everything a total of 10 times, one for each LED "stake", with exceptions for the LED segments with connectors already attached.

There should be one LED segment that already has a female connector attached to the input side, and one LED segment that already has a male connector attached to the output side. Do not remove these connectors. When soldering, do not attach the extension cable to the last LED segment (the one with the male connector at the output end). Also, ignore the extra two wires sticking out with those pre-attached connectors; they are for extra power insertion, and are not needed at this step.

You need to solder the following wires together for each LED segment, matching each colored wire to the corresponding wire of the same color (red to red, green to green, and white to white):

  • Female JST Connector to the Input side of each LED strip segment.
  • Male JST Connector to one end of the Extension Cable.
  • Other end of the Extension Cable to the Output side of each LED strip segment. (Exclude the last LED segment, it already has a male connector directly attached, which you mustn't remove.)

Before moving on, you should use a digital multi-meter, if you have one, to verify your connections. You can check each connection by attaching one multi-meter lead onto one end of a component you soldered, and attaching the other lead to the other end of the component. Set the multi-meter to any mode which measures resistance. If the meter reads a value close to zero, then your connection is good. If it reads a value of one, then you have to re-solder the connection. Use this method on each individual wire connection.

After soldering the extension cables to the male JST connectors, you might notice that the exposed wires tend to brush against and make contact with each other. This could cause serious problems!!! Be sure to use electrical tape to wrap each of these connections individually, to make sure that they do not accidentally make contact with each other. If you plan to use heat-shrink tubing to add extra protection in the next step, the electrical tape is not necessary.

After this step, you should have:

  • 9 LED segments, each with a female JST connector on the input end and an extension cable followed by a male JST connector on the output end.
  • 1 unique LED segment with a female JST connector on the input end and a male JST connector directly connected to the output end.
  • 1 extra soldered extension cable and male JST connector combo

Step 4: Protect Your Connections (Optional, But Recommended)

This step is optional, but it is highly recommended if you are going to be using these LED "stakes" outdoors where there may be precipitation.

For this step, you will need:

  • 10 LED Strip Segments with everything attached as required (from previous step)
  • Small Heat-Shrink Tubing
  • Large Heat-Shrink Tubing
  • Heat Gun

Now that you have soldered everything onto your LED strip segments, it would be a good idea to make the connections water-resistant. I accomplished this by using a heat gun to put heat-shrink tubing onto each connection, as described below.

Tubing for the Direct Connections to the LED Strip

The first thing you need to do is seal the ends of the LED strips, where you previously soldered the wires to the strip itself. If you already decided from the previous step that you would be using heat-shrink tubing, you should have already cut the large heat-shrink tubing to the size you need and slipped it over the wires before soldering. If not, then you may have to improvise.

Apply heat to each tubing piece using your heat gun, until each one shrinks and tightens onto the connections.

Tubing for the Wires Connected Between the Extension Cables and the Male JST Connectors

The second thing you need to do is seal the connections between the extension cables and the male JST connectors on each individual wire. You should use the smaller heat-shrink tubing for this. Again, if you planned ahead, you should have already cut the smaller heat-shrink tubing to the right size and slipped it over the wires before you soldered them. If not, then you will have to improvise.

Again, apply heat to each tubing piece using the heat gun, and make sure each piece shrinks and tightens over the entire connection.

Tubing Over the Entire Connection Between the Extension Cables and the Male JST Connectors

The third thing you can do to protect your connections is use one big piece of heat-shrink tubing to seal together the three wire connections of the extension cables to the male JST connectors. This is an extra step, but it may increase the overall integrity of the connections. Apply heat to each piece with the heat gun, as described before.

After this step, you should have:

  • 9 LED segments with all the necessary connections fully sealed with heat-shrink tubing.
  • 1 unique LED segment with all its necessary connections fully sealed with heat-shrink tubing.

Step 5: Attach LED Strip Segments to PVC Pipe Segments and Insert Stakes

For this step, you will need:

  • All 10 LED Strip Segments (from previous steps)
  • 10 PVC Pipe Segments (from Step #2)
  • 40 Standard Zip-Ties
  • 10 metal stakes

The next thing you need to do is attach each LED Strip segment to its corresponding PVC pipe. Rather than using special components, I decided to use a common every-day household item to accomplish this: zip-ties!

Please keep in mind that this is a very do-it-yourself way of attaching the LEDs to the PVC pipes. Feel free to use a more secure attachment method if you wish. I have found that the zip-ties work fine for my light-show purposes.

First, you will need to take your 40 zip-ties and create 20 longer zip-tie pairs out of them, two for each LED segment. Take two zip-ties, slip the flat end of one of them into the square lock part of the other one, for only the first couple of clicks. Do not slide the zip-tie any further in than one or two clicks!

Now that you have 20 extended zip-ties, you can use them to attach each LED segment to a PVC pipe segment. Lay the LED segment itself on top of the PVC pipe, letting the wires and connectors fall off the sides. Wrap one extended zip-tie around one end of the pipe and LED strip, and slip the flattened end of the zip-tie through its square lock part. Tighten it until it just begins to press into the water-resistant cover of the LED strip segment, but not too tight that it pushes onto electrical components of the LED strip. Repeat this process to put another zip-tie on the other end of the PVC pipe.

Now you need to bend the ten metal stakes in such a way that one end can be inserted straight into the ground while the other end is bulky enough to remain lodged inside the PVC pipe. Usually, this can be accomplished by bending one end of the stake around until it turns back onto itself.

Once you have the stakes ready, insert each stake into the input end (female connector without extension cable) of the PVC pipe, and adjust it as necessary until you are satisfied with the length of stake exposed at the bottom.

When you are ready, you can insert these "stake-lights" into the ground.

After this step, you should have:

  • 10 Completed LED "Stake-Lights"

Step 6: Connect All Required Connections to the Power Supply

For this step, you will need:

  • 5V 20A Power Supply
  • P.C.-Type Power Cable (must have three prongs and must be low gauge)
  • 4 M/F Arduino-Type Bread-Boarding Wires
  • 1 Extra Soldered Extension Cable and Male JST Connector Combo (from Step #3)
  • Wire Strippers/Cutters
  • Screwdrivers

First things first, make sure that the input Voltage switch for the power supply is set to the correct voltage for your electrical grid. In the United States of America, this should be set to 110V, but in other countries it might need to be set to 220V.

You might have noticed that the power supply does not come with a plug to power it from. You will have to cut off the end of the P.C. power cable that goes into the computer, leaving the outlet-side of the cable intact, so that the three internal wires are exposed. Then, you will need to use your wire strippers to cut away the black outer plastic shell of the power cable, exposing a decent length of the three internal wires. Finally, you have to strip off about half an inch of the plastic shell around each of those three internal wires, so that you can attach them to the input terminals of the power supply.

Now that you have the three wire ends exposed, you can slip them into their corresponding terminals of the power supply. Usually, the input section of the power supply is located on the left half of the front area. There should be symbols indicating which terminal is which. "L" stands for load, "N" stands for neutral, and the symbol with three horizontal lines indicates the ground terminal. Each of the three wires should be colored according to its function. Black should be load, white should be neutral, and green should be ground. Keeping that in mind, pop up the protective lid of the terminals, use a screwdriver to unscrew each terminal, slide the corresponding wire's exposed bits under the flat metal piece, and screw the screw down again tightly onto the wire, according to the following:

  • Black wire should be attached to the "L" terminal.
  • White wire should be attached to the "N" terminal.
  • Green wire should be attached to the ground terminal.

NOTE: If your wires happen to be braided, you may want to twirl the ends together into a more solid end before inserting it into the power supply's terminals.

You should plug-in the power supply to a wall-outlet and see if an LED lights up to confirm you have connected it correctly. If you smell burning, that means you connected it wrong. Immediately unplug the power supply if this is the case. You might have to get a new power supply if you short your power supply out in this manner.

Next, you need to attach the various other wires for the various components which need to draw power from the power supply. Grab four male-female Arduino-type wires along with the extra extension cable you made earlier.

First, unscrew one positive output terminal and one negative output terminal on the power supply, using the screwdriver. Then, insert the red wire from the extension cable, as well as two of the small male-female wires, into the positive output terminal of the power supply. Be sure to screw the terminal down onto only the leads of the wires, not the plastic shells. Then, insert the white wire from the extension cable, as well as two other male-female wires, into the negative output terminal of the power supply. Again, screw down the terminal only onto the metal leads, not the plastic shells.

After, this you can flip the lid of the power supply terminals back down. You may want to verify you have all your connections right before continuing.

After this step, you should have:

  • 5V 20A Power Supply with all required connections attached

Step 7: Solder One TTL Logic Level Converter Together

For this step, you will need:

  • One TTL Logic Level Converter, with Header Pins Included
  • Soldering Iron
  • Solder (duh!)
  • Soldering Flux (recommended)

The purpose of the TTL Logic Level Converter is to change the voltage of data signal pulses from 3.3V to 5V. The WS2812B LED Strip receives 5V data signals, and cannot interpret voltages as low as 3.3V. The ESP8266 outputs 3.3V data signals, and it needs help to step the voltage of these signals up to 5V. That is what the Logic Level Converter does for it.

Now you need to solder the header pins onto the TTL Logic Level Converter. This is very straight-forward: simply solder each pair of six header-pins onto the TTL Logic Level Converter according to the normal soldering procedure. I would recommend soldering the yellow plastic end onto the top part of the converter, leaving the long leads exposed at the bottom.

Remember, you only need one converter to be soldered for this project. Once you finish soldering one logic level converter, move on to the next step.

After this step, you should have:

  • One TTL Logic Level Converter with Header Pins Soldered In-Place

Step 8: Program the NodeMCU ESP8266 to Receive E1.31 DMX Data

For this step, you will need:

  • Computer for programming, loaded with the Arduino IDE
  • FastLED Library
  • E1.31 Library
  • NodeMCU LED Strip Code
  • Micro-USB Cable
  • External Wi-Fi Router (optional)

Now you will program the NodeMCU ESP8266 board with the program used to allow the board to receive transmitted E1.31 DMX data.

First, you need to make sure you have installed the proper Arduino libraries. Follow the instructions on the Arduino website to install the libraries. You have to install the following libraries into your Arduino IDE:

You should also install the ESP8266 boards package from the Arduino Boards Manager. Follow these instructions to get the package:

  1. Go to File --> Preferences and copy this URL into the "Additional Boards Manager URLs" field.
  2. Go to Tools --> Board --> Board Manager, and type "esp8266" and download and install the esp8266 package.

Before you can upload code to the ESP8266 board, you must verify the board is flashed properly. To do this, plug the regular USB end of the micro-usb cable into your computer, and plug the micro-usb end into the ESP8266. Download and run either the 32-bit or the 64-bit flasher for Windows. If you do not have a Windows computer, do some web-searching to find the corresponding flasher for your operating system.

After flashing the board, you can upload the provided Arduino code to the board. Download the Arduino file attached to this step. Be sure to edit the "#define"s to match your project. If you are using an external router to keep your light-show isolated from your main Wi-Fi network, go ahead and set it up as you wish and replace the SSID and PASSWORD in the code with the corresponding values.

Once you have your code ready to upload, make sure the board is still connected to your computer and make sure the board settings match the following:

  • Board: NodeMCU 1.0 (ESP-12E Module)
  • Flash Size: 4M (3M SPIFFS)
  • CPU Frequency: 80 Mhz
  • Upload Speed: 921600
  • Port: (whatever it is that shows up for you)

Then, simply hit the upload button to upload your code. If you have any issues, either consult the Arduino forums or let me know in the comments.

After this step, you should have:

  • One Fully-Programmed NodeMCU ESP8266 LED Strip Controller Board

Step 9: Wire the NodeMCU ESP8266 Board and TTL Logic Level Converter Together, and Connect to Power Supply

For this step, you will need:

  • One Fully-Programmed NodeMCU ESP8266 LED Strip Controller Board
  • One Soldered TTL Logic Level Converter
  • A Few F/F Arduino-Type Bread-Boarding Wires
  • Power Supply with Wires Sticking Out from Earlier
  • Extension Cable from Power Supply from Earlier

Now you need to connect all those little Arduino-type wires to their proper places and interface the TTL Logic Level Converter with the ESP8266. Notice that there is a "HV" (high-voltage) side of the logic level converter and a "LV" (low-voltage) side. The high-voltage is 5 volts and the low-voltage is 3.3 volts. This could get confusing, so rather than describing each step in paragraph format, I will list all the connections below:

  • Connect a 3V3 (3.3 volt) pin of the NodeMCU to the LV (low-voltage) pin of the Logic Level Converter.
  • Connect a ground pin of the NodeMCU to the LV-side GND (ground) pin of the Logic Level Converter.
  • Connect one of the positive wires from the power supply to the HV (high-voltage) pin of the Logic Level Converter.
  • Connect one of the negative wires from the power supply to the HV-side GND (ground) pin of the Logic Level Converter.
  • Connect the other positive wire from the power supply to the VIN (voltage-in) pin of the NodeMCU.
  • Connect the other negative wire from the power supply to the GND (ground) pin of the NodeMCU that is adjacent to the VIN pin from the previous step.
  • Connect the D2 (digital two) pin, or whatever pin you used, to the LV-side TXI pin of the Logic Level Converter.
  • Connect the Green data wire from the extension cable from earlier to the HV-side TXO pin of the Logic Level Converter. It should be directly across from the TXI pin you connected to in the previous step.

As long as all these pins are connected properly, the 3.3 volt data from the ESP8266 board should be accurately converted into 5 volt data input into the WS2812B led strip.

After this step, you should have:

  • One Fully-Wired E1.31-Controlled LED Strip Controller System

Step 10: Connect LED Strip "Stakes" and Test

For this step, you will need:

  • Everything You've Made So Far in this Project!

Now that you have wired everything together, it is time to test the project!

Go ahead and set-up your "stake-lights" temporarily and connect them all together in order using the JST connectors, making sure to connect the ending stake last. Then, plug-in the power supply. The lights should light up on the power supply as well as on the NodeMCU ESP8266 board. This is a good sign. (A burning smell, however, is not a good sign.) If everything seems to be working, go ahead and move on. If not, you might have to go back through the previous steps to verify you did everything right, or you can leave a comment and ask for help.

Now what you should do is test the lights using a special E1.31 tester app by Varadero Lights I found for Android. (If you do not have an Android phone, you might not be able to test your lights using this method.) After installing the app, connect your phone to the router you are using for your lights, choose the right E1.31 Universe, and begin using the faders to control your lights.

You might notice that when the LEDs are on full-white, the second half of the lights turn a sort of weird yellow-orange color. This is due to voltage drop over the length of the wires the "stake-lights" are connected with. This effect can be prevented by inserting power using the extra power wires at the end of the chain. This is a very easy and straight-forward process that you can do a simple Google-search for, and it is not covered in this instructable. The fading effect can be somewhat interesting anyways, so you might decide you don't need the power insertion.

If all of that works, then...

Congratulations! You have successfully made the finished product!!!

Here is my test video.

Step 11: Prepare Your Controlling Computer, Create the Sequence, and Enjoy!

For this step, you will need:

  • Computer connected to same network as the lights
  • Speakers or FM Radio Transmitter
  • 3.5mm audio cable
  • Vixen Lights software

Assuming you want to turn your lights into a light-show synchronized to music, you will need to install the Vixen Lights software onto your computer.

You will also need to connect the transmitter or speakers you are using to your computer using the 3.5mm audio cable. Be sure to follow the instructions provided with your transmitter or speakers.

Once you have installed the Vixen Lights software, follow the instructions from the Vixen Lights Documentation to make your first sequence and play it on your lights with the music you added. You will want to be sure to add a "Streaming ACN (E1.31)" controller to your Vixen Display Setup page, and set the total channels to the total number of individual LEDs you used in your setup times three (one E1.31 channel is one individual color value, either red, green, or blue).

After you have created your sequence, go ahead and play it, and enjoy! Vixen Lights has so many cool features you can use to schedule light-shows and really customize your set-up. Follow their directions to finish your light-show!

LED Strip Speed Challenge

Participated in the
LED Strip Speed Challenge