squarefrog/led-controller-software
Allow control of an LED strip wirelessly, using a web API.
ESP LED Controller
Allow control of an LED strip wirelessly, either over web API or Homebridge, using an ESP8266 module.
Features
- Allow setting up WiFi using WiFiManager
- Simple API
- Support OTA updates
- Homebridge plugin - available here
Hardware
Bill of Materials
- Adafruit Huzzah Breakout - ESP8266 breakout board, any ESP8266 will probably work, but this one is nice and small
- WS2812B LED Light Strip - available in different LED densities. I use 30 per meter, which is fine for my purpose
- 150-200 Ohm Resistor - to prevent voltage spikes which could damage the first LED
- 1000 µF or higher capacitor - to smooth the current drain from the PSU when animating
- A suitable 5V power supply - see Power Requirements
Optional
If using the PCB layout, you will also need:
- DC Jack - Cliff DC10A, or DC10L
- 3-way Terminal Block - 3.5mm pitch, or you can just solder the wires direct to the PCB
- 0.1" pitch female pin headers - this allows you to remove the Huzzah without desoldering
- M2.5 screws - for mounting to your project case
- 3D printed enclosure, or any suitable project case
Power Requirements
Powering many RGB LEDs requires an appropriate power supply. Each LED draws up to 60mA at maximum brightness white. To estimate the power supply needs multiply the maximum current draw by the number of LEDs. For example, 50 LEDs × 60mA ÷ 1000 = 3A required.
Additionally, the rest of the circuit also needs powering, so ensure your chosen power supply can more than just the LEDs. There is no harm in using a larger power supply, in fact it means the power supply doesn't have to work as hard.
Buyer Beware
While it is tempting to get a power supply from eBay, or AliExpress for as little as £4, I'd recommend you spend the extra and get one from a reputable source. For example, I got a 5V 5A Switchable Power Supply from CPC Farnell for just under £20. Yes, thats four times as expensive, but it is safety tested and CE marked. It's worth spending the extra money to reduce the risk of burning your house down.
Software
Library Dependencies
- WiFiManager - for easily allowing connections to any WiFi access point
- FastLED - for simplified driving of LED strips
API
The API endpoints are listed below. Endpoint value ranges are taken from the HomeKit Accessory Protocol, specifically the Lightbulb service. Fetching current values returns JSON with the current value. For example:
{ "status": "ok", value": 42 }
Power
POST /on?v={val}
Set the current power status, as a bool value. Either true or false.
GET /on
Returns the current power status as a bool.
Hue
POST /hue?v={val}
Set Hue value. Range 0-360.
GET /hue
Get the current Hue value.
Saturation
POST /saturation?v={val}
Set Saturation value. Range 0-100.
GET /saturation
Get the current Saturation value.
Brightness
POST /brightness?v={val}
Set Brightness value. Range 0-100.
GET /brightness
Get the current Brightness value.
Name
POST /name?v={val}
Update the LED strip name. Name should be a String with a maximum length of 64.
GET /name
Get the current Name value.
Save Default Colour
POST /save-default
Store the current colour as the default colour. This will be used when the unit power is switched on.