Introduction: Arduino / ESP LED Fireplace
There was a defunct fireplace in the house I rented, with no real option for a nice, cozy true fireplace. So I decided to make my own RGB LED fireplace, which gives a nice feeling simulating a real fire. Not as good as a real fire, but it does give a really similar cozy feeling.
You can make your own too, it is an easy beginner project you can do with only a few parts and an Arduino or ESP8266 module. Both modules work well, the reason why I choose ESP8266 is that this also gives me the opportunity to remote control the fireplace, turn it on/off from my home automation system. The whole project is quite inexpensive, and it doesn't require a lot of time either.
WS2812B RGB LED strip (1 meter, 60 LEDs/meter) - eBay cca. 7 USD
NodeMCU ESP8266 ESP-12 (3.3v) or Arduino Nano V3.0 (5V) module (If you want WiFi, choose the NodeMCU) - cca. 4-7 USD
1 x Capacitor (1000 uF, 6.3V+) to stabilize the current spikes
White greased baking paper
Some wood board for the base (or cardboard)
USB cable, wall power adapter (1 A or more)
Also, you will need some soldering iron, tools and wires.
Step 1: Preparing the Base
First of all, you will need to cut the 1 meter RGB LED strip in half and wire the pins together (GND to GND, D to D, +5V to +5V). This will give you a 50 cm long double strip.
Now you can take some wood and cut it to size, it should be just slightly longer than the LED strip and just a bit more wide. You can use any other material, but I think wood looks better.
Secure only the ends of the RGB LED strip to the board with scotch tape or (hot) glue.
Step 2: Adding the Flames
Take the greased paper and tear off a piece (about 10-15 centimeters wide), wrinkle it a bit and then slide it under the LED strip, fold it up and around, so it makes a "flame". The goal is to build it above the LEDs, so the light from the LEDs gets diffused on the paper.
You can try to just secure it by folding the sides. You won't be able to use scotch tape or regular glue to hold it together, because it's greased/non-stick paper. You can tie it together with some transparent thread using a needle.
Once you have done the first flame, continue building all the subsequent flames, slightly overlapping the base with the previous one.
Step 3: Wiring It Up
Wiring up the module (NodeMCU) to the LED strip is easy, but you will need to do some soldering to separate out the wires from the LED strip. Also, make sure to add a 1000 uF 6.3V(or more) capacitor between the + and GND, close to the LED strip, this will help stabilize the power.
- Connect +5V (USB VCC) from NodeMCU to the LED strip +5V
- Connect GND from NodeMCU to LED strip GND
- Connect pin marked "D7" from NodeMCU to "D" on the LED strip
If you are using Arduino, you can connect any digital pin (D2-D13) to the LED strip, just make sure to match it in the source code.
Step 4: Uploading the Code
You have to use to Arduino IDE and make sure to install also the ESP8266 board support:
Source code is available on the github page:
Compile and upload the code to the NodeMCU module, and that's it! It will start blinking the LEDs.
There's one special note to the code: the power consumption of the current code was measured to be around 600-700 mA, which is above the normal 500 mA USB ports like to give. For this reason, for the first 1 minute, it will only power part of the LEDs (around a third), and then it will go and light all of it. If you are using a wall power adapter, make sure it's can support at least 1 A and not the cheapest type.
Because the source code is available, feel free also to experiment with colors, timings.
We have a be nice policy.
Please be positive and constructive.
I seem to be having an issue running your code as only the first pixel
of my strand is turning red. My controller is a
NodeMcu 1.0 (ESP-12E), coded through the Arduino IDE. Just like your
tutorial, i'm using a 60
led/meter WS2812B strand with the requisite 1 millifarad capacitor. I
have ruled out the possibility of a faulty controller or strand as they
run the Adafruit_NeoPixel "strand test" perfectly. Do you have any idea
as to what would be a good place to start troubleshooting?
Sorry, there was a bug in the code I uploaded first, please try the newest code from GitHub. (The issue was that somehow during cleanup I removed my setupAnimation(); call from the setup(), and thus the time trigger didn't happen.). Sorry for the inconvenience.
Hello! I am sorry to hear that, sounds really strange, especially that if it works with the test code, it means wiring is correct.
I have tried to simplify my code so I even removed all the Wifi code from it and there's not too much left than just the scheduling and the random color setting. If you can private message me and send over your "strand test" code zip file (maybe use wetransfer dot com or similar) that works for you to test, maybe I will have an idea why.
Since you are using the Adafruit NeoPixel library, you should already have the strand test code. It can be accessed via the Arduino File menu under Examples > Adafruit NeoPixel > stradtest. The only change I made was switching the data pin to D2.