I'm not sure if this is something that has been asked before, I tried searching the forum but didn't find anything relating to my issue. This is my second LED project, so I'm still fairly new to this world.
I currently have an LED strip WS2812b at 60LEDS/meter, at about 3-3.5 meters in total. I have an ESP8266 controlling it, and the two share a 5v 12a power supply.
Everything seems to work - it changes color, effects work, and is overall pretty responsive even when I use commands via Google Home.
The issue I'm running into is that the entire strip will randomly turn to solid orange. At first I thought it was randomly turning on when it's off, but it seems to be doing that when it's a different color and/or effect.
After doing some research, it looks like solid orange is the default behavior (which means the device is getting reset somehow). I've read that some settings can be tweaked in the WLED configuration, but I couldn't find anything that would cause the reset. I've checked various timers and they're all disabled. I thought it could be a power issue even though I'm not running the lights past 50% but neither increasing nor decreasing the brightness has any effect. This also happens when the strip is completely off.
Any and all feedback is appreciated (this is my first post, so please excuse me if this isn't the right place to post this).
Another possibility is the fact that the data signal from the esp is 3.3V but the strip expects a 5V data signal. Generally speaking, ws2812 LEDs are ok with a 3.3V signal, but it's not 100% guaranteed to work. You may need to use a level shifter to boost the data signal up to 5V. Don't buy the 4-channel level shifter modules commonly sold on eBay, they are intended for use with i2c bus signals, which are a lower frequency than ws2812 signals and may not work well in my experience. Instead use a 74hc14 or 74hct14 or similar.
The foil on the strip is not at all substantial and several Amps current draw will result in significant voltage drop
If nothing else, because the blue LEDs have a higher threshold voltage, when set to full white, the colour will tend to yellow or even orange at a distance from the power injection. This does not of course explain the whole strip going to a uniform colour, but is a limitation of longer lengths of LED strip.
Keep all wiring bundled together - power, ground and control signal. The power "bus" that runs alongside to feed the strip at regular points should preferably not be separate.
Do you have a 330 ohm termination resistor in the data line, close to the strip, and a 1000uF supply decoupling cap on the strip, and a 3.3volt to 5volt level converter IC (the ESP8266 is a 3.3volt device).
If you don't have all of them, then all bets are off.
Leo..
Sorry for the late response, I haven't had time to test anything until this past weekend. I injected power into the strip every meter, but there has been no change in behavior - it's still defaulting to solid orange no more or less frequent than before.
I tried looking for a guide or tutorial on how to connect a level shifter to the ESP8266, but haven't found anything (I did find a few links, but they were too complicated and I couldn't understand it). Could someone either walk me through the process, or provide some resources?
In the meantime, I'll order a 330 ohm resistor, which by my understanding goes between the ESP and the data line.
That is unfortunate. A 74HCT14 at the ESP8266, powered by 5 V with a 0.1 µF bypass capacitor from 5 V to ground. The 74HCT14 is a hex inverter, so you feed one inverter with your data and its output into a second inverter which gives you the original data at a 5 V level.
You either connect the inputs of the unused inverters to ground, or connect the other four in parallel with the second to give increased current drive. If you do the latter, it may be preferable to use a 74HCT04.
You then send this data in a cable paired with the ground to the LED strip where you have the 330 Ohm resistor in series with the data to the "Data In" of the first pixel.
Slight misnomer - a "termination resistor" suggests it is in parallel - in this case it is in series.
Termination resistors are AFAIK used to make the transmission line ends see the right impedance, and they can be in parallel, in series, or a combination of both.
Leo..
You are correct regarding the function of an actual termination resistor. They can indeed be in series, but clearly only if the impedance of the receiving end is lower than the transmission line.
In this case, that receiving end is higher than the transmission line, so it is not in fact a termination resistor.
So what is its function then? Have a good think about it.
True, it would make more sense to use a ~120ohm series resistor near the Arduino (with it's low output pin impedance). Assuming you're driving a ~150ohm Cat5/6 wire.
But in my experience you don't have to be that close to the ideal termination to already have a positive effect on dampening the reflections in a transmission line.
Leo..
So the resistor is not in fact to match the impedance of the line, but to limit the current that any actual transients might impose on the protection diodes in the pixel and also limit any current occurring if the data line is driven while the LEDs are not powered.
Note my persistence in emphasising the need that the data line always travels everywhere as a pair with the ground.