Introduction: Custom NanoLeaf Lights! DIY, Wireless, Modular, Arduino, 3D Printed!
I am very excited to share this project with you because it looks absolutely beautiful and is super easy to make!
It's a NanoLeaf inspired wireless Arduino RGB LED lights project that not only allows you to create any custom NanoLeaf shape you want but also use the same identical segments to create a 4-digit display, where you can display the time, temperature, humidity, or pretty much anything you want. All using one single modular segment and for a cheap affordable price! I have made a video that goes over the whole project and explains each step very clearly. So if you want a video version, I highly recommend watching the video as it is much easier to follow.
The instructable thumbnail image shows some of the things you can do with the segments in this project.
Lets get into it to see how this is all made!
Supplies
Let's first go over all the components you will need for the project.
- ESP32, for the micro-controller.
- 12V 8A, power supply.
- LM2596 or any step down converter, to convert 12V to 5V for the ESP32. Remember to use the screw on this component to adjust its output voltage to 5V using a voltmeter.
- LED strip, the specific one used in this project is the WS2811 LED strip. For all the supported LED strips, see this.
- 1000μF capacitor, across the LED strip.
- A4 3mm matte opal acrylic sheets (x7), used to get the glowing effect. You can cut 4 shapes using 1 A4 sheet. I recommend getting extra A4 sheets just in case something bad happens...
- Refer to Acrylic sheet shape to see what shape you need to cut from the acrylic sheets.
- DHT11(optional), used to get the temperature and humidity when using the 4-digit display.
- Power switch, to turn on and off.
- M2 bolts, to attach the lid to the main housing part. They can be from 8mm to 12mm long.
- 20 AWG flexible silicon wires, for connecting segments together.
- Dupont crimping tool, the tool used to make the dupont connectors.
Please note, all the 3D printed parts, code, and more information can be found in the project repository here.
Step 1: Segment Assembly
Now that we know all the components that make up this project, lets see how they all come together. First we will go through how to make a segment, since once you know how to make a segment, you are pretty much limitless in this project.
Step 2: The Main Housing and the Acrylic Sheet
The main housing and the acrylic sheet simply gets glued into the ledge inside the main housing like shown in the image.
Step 3: LED Strip
For the LED strips, they need to be cut to a length of roughly 15 cm long to fit in each segment. Make sure you only cut using the cut marks in the LED strip as marked in the first image (red arrows). Please note the number of sections in your LED strip segment, in my case there are 3 sections, since there are 2 cuts as illustrated in the first image.
We need to solder wires to the LED strip to allow us to connect segments together, which for that I used dupont connectors. The length of the wires actually matter, so for the female side the wires need to be 12 cm long, and for the male side, they need to be 22 cm long. The female and male sides depend on the arrows marked on the LED strip. The wires need to be 20 AWG to withstand the current. This is illustrated in the second image.
To solder the wires to the LED strip, I found a very easy way to do it, in the short clip I show how you can do it. Using pieces of tape for attachment and positioning of the LED strip and wires.
Step 4: The Lid
Now for the lid, you simply need to 3D print it and glue the LED strips to the flat side and route the wires to the back.
Step 5: Lid and Main Housing
Then finally, the lid and the main housing simply attaches together using the 2 bolts. And that right there is a fully assembled segment!
IMPORTANT!
When connecting 2 segments together, you have to ensure that you connect them in the correct direction, the red wire needs to go to the red wire, and the black wire needs to go to the black wire, see image. So whenever you connect segments together, double check and triple check the orientation.
Step 6: Segments Attachment
Now we know how to make segments, lets see how they attach together.
For the segment attachments, I made this tiny little 3D printed connector that slides in into any of the 10 groves that is around each segment. This allows you to easily attach segments together in multiple ways to create the exact shape you want.
The clip demonstrates how to connect 2 segments together using this connector piece.
Step 7: Shape Sketch
Now that we know how to make segments and how to attach them together. Let's see how we can create any custom shape we want!
I first recommend making a sketch of the shape you want to make and also come up with a way to wire it. The image is an example of such sketch, marking the start and end points. The start point is the female side, and the end point is the male side, you can choose the location of these points depending on your shape.
Step 8: Creating the Shape
After you have created the sketch, you first start by attaching all the segments together using the connector to make your shape.
Step 9: Shape Wiring
Then flip it around, and connect the wires together following your sketch.
Step 10: Breadboard Wiring
Now for the breadboard wiring, the image is a diagram of the breadboard wiring.
Step 11: Code Upload
For the NanoLeaf shape, the code is very simple to upload. All you need to do is to go to install.wled.me, press install, choose your upload port and insert your WiFi credentials when asked, and that's how simple it is!
Now for the setup you need to do on the phone, it will be pointless to write it all out here, since there are two many small details, so I will just direct you to the video at the 09:39 mark where I go through the setup you need to on do on the phone after the code upload.
Step 12: Demo
After you have uploaded the code and did the setup on your phone, you can now control your NanoLeaf shape using your phone!
Now you can easily change, add, or remove segments to create any kind of shape you want using the exact same identical modular segments!
Step 13: 4-digit Display
The next steps are for how you can make the 4-digit display.
Now for the 4-digit display, it is a bit more involved, but still simple to make. You will need a total of 28 segments, since each digit is made up of 7 segments.
Step 14: 4-Digit Display Wiring
For the wiring, it needs to match the exact wiring diagram, where the starting point is on the right (female), and the end point is on the left (male).
Step 15: 4-Digit Display Breadboard Wiring
The breadboard wiring is pretty much exactly same as the custom shape, the only difference is that an extra LED strip segment is attached at the beginning, this is needed to control the 4-digit display appropriately. The DHT11 is optional, it is used to obtain the temperature and humidity.
Step 16: 4-digit Display Code
Now this is the main difference between the general NanoLeaf shape and the 4-digit display.
Please note, in the video (time: 13:37) I go through and show the exact steps on how to upload and use the code for the 4-digit display. Below is just a short text version.
- Install VSCode.
- In VSCode, install the PlatformIO IDE extension.
- Clone/download the project repo.
- Open the /WLED directory in VSCode.
- There are two changes you need to make before uploading the code:
- In WLED/platformio.ini, under the [env:esp32dev] environment, change the upload_port to your micro-controller port.
- In WLED/usermods/NanoLeaf_Display/usermod_nanoleaf_display.h, change the ADDR_LEDS_PER_SEG variable to the number of addressable LED sections there are in your LED strip. In the image it illustrates what I mean here, there are 3 sections, since there are 2 cut marks, so if you were to cut the LED strip on the cut marks, you will get 3 seperate sections, this is the number you need to set the ADDR_LEDS_PER_SEG variable to.
Now you can upload the code.
For the setup you need to do on the phone and how to use the usermod settings to control the 4-digit display, refer to the video (time: 14:42).
Step 17: 4-digits Display Demo
Just like that, you have created an epic 4-digit display!
Step 18: Desk Light
You can even use the segments to create a little desk light!
Step 19: Done!
That is the project done! This project truly looks stunning in real life, which unfortunately does not come through in the images and video.
I highly recommend watching the video, as it is much easier to follow and everything is clearly explained, you will also understand the project better!
Thank you very much, and I will see you on the next project!
Step 20: Project Resources
Includes: 3D printing files, code, wiring, and everything else you need.

Finalist in the
Electronics Contest
16 Comments
Question 8 hours ago
I tried to do this lovely project and then realised that there are 2 types of ESP32, on mine there is no D16!!!!!
So which pin are the output to the LED strip and Temp sensor???
2 days ago
Great project! Everything is laid out neatly in your video. Thanks for sharing your great work.
Reply 1 day ago
And thank you for this amazing comment!
3 days ago
Good project! Excellent.
Reply 2 days ago
Thank you!
3 days ago
Excellent video, concise with some truly helpful tips - especially the one for soldering wire directly to a LED strip - Can’t believe I never thought of doing it that way before. Thank you!
Reply 2 days ago
Thank you! I really appreciate that. I am glad you found it helpful :)
3 days ago
I really like your simple solution to connecting the segments together, this is way better than the over-engineered pogo-pin/magnetic connection solution I've tried to engineer. And while my attempts give you that dynamic ability to reposition segments on the fly, actually implementing it in an easy-to-manufacture way has been a huge challenge. Most do not move their segments around daily, and static installations are the most common.
The one thing I would add to this project is a logic shifter for the LEDs. The ESP32 uses 3.3v logic, and while in "most" cases things work fine, sometimes you get wonky or odd behavior on the LED strips. The WS2812 Spec says low is <0.3 x Vdd and high is >0.7 x Vdd. On 5v strips, this puts high squarly in the "undefined" zone. This gets even more into the "gray area" on 12v strips. WS2811, 2813, and 2815 protocol strips can get even pickier. It's just good practice to use a level shifter and guarantee nice clean edges on the command pulses.
Reply 2 days ago
I love the idea of using pogo-pin/magnetic connectors! I didn't even know they existed. My initially idea was to actually somehow create a magnetic connection, but I couldn't come up with a practical and efficient solution.
The major problem I encountered with coming up with a magnetic connection is that how will the wire paths be managed, since in the case of this project segment shape, if for example you want to create a leaf segment in your shape, there is no way you can connect the magnet in the other end of the leaf segment to the other part of the shape to continue the "circuit", hence I just went for simple wires at the end haha.
If you do come up with an elegant solution using magnetic connectors, if you can let me know, I would love to know how you did it!
Yep a level shifter is good to have, however, surprisingly so far I have not come across any issues at all, but using a level shifter is for sure the way to go to be more robust.
Remember to subscribe and checkout the YouTube channel, you are a type person I most want to be part of the community! :)
3 days ago
Nice project! Thank you.
Reply 2 days ago
Thank you! I am glad you like it.
Question 3 days ago on Step 18
Is it possible to make this using an esp 8266?
what changes would be needed to do so?
Especially the clock part.
Answer 2 days ago
Yes you should be able to. There won't actually be too many changes you need to make, the ones I can think of right now is the enviroment in the "platformio.ini" file, where you need to change the "default_envs" variable from the ESP32 environment to the ESP8266 environment. Then I think its just the data pin you connect the LEDs to your ESP8266, which needs to be changed in the WLED app. Those are the two major changes I can think of right now, without actually re-making it using an ESP8266. There will be some more small changes you need to make for sure but they should be self explanatory. I hope this helps!
3 days ago
Awesome project, might follow thisnto build my own!
Tip for the connection parts:
Make the male Dupont header with one female connector (ground for example). En make the female Dupont header with one male ground connector. This way you can never make the mistake of connecting it the wrong way around.
7 days ago
What can i say , u blew me away.Thank u very much for the time u took to describe it in great detail. Kudos ser
Reply 3 days ago
Thank you very much for that! I appreciate it!