WLED

The Easy Solution

I live in a community of older homes and a fortunately defunct HOA. My house is on a corner entrance where a block wall with part of the community name was built. Over the years the sign letters degraded, fell off, broke and otherwise went to hell. I replaced the letters with something that should last for the remainder of my lifetime, but at night the letters are difficult to make out and several people said it would be nice to have the letters lit up. I could have planted a couple of these solar lights, but the inner nerd in me vetoed that idea.

The Final Result

Instead of a dull solar light costing around $30, why not jazz it up for a mere $200 plus? You can choose an effect based on the season or holiday. There are dozens of effects to choose from with each one customizable.

While developing this project I learned a great deal about the open source project called WLED and putting together a working remote solar project. 

To install WLED simply go to https://install.wled.me/, plug an ESP32 (not ESP-CAM) into a USB port on you computer and click "Install". You may have to press the "Boot" button on the ESP32 when starting the install process. Two minutes later it asks for your wireless SSID and password and you're done.

The solar setup is a bit more involved. I learned that the Addressable LED Strip Lights consume a bit of power even when all the LEDs are turned off. My strip is 3 meters long and includes 90 LEDs. To save power, configure a GPIO pin on the ESP32 (I used GPIO 21) to control a relay. Do this from the WLED web page settings/leds and enter the pin number at "Relay GPIO". I used this pin to control one of the relays on a 2 channel relay board. When you turn the LEDs on from the WLED web page, the relay engages and provides power to the LEDs. BTW, I used GPIO 16 for the Data line on the LED strip.

You should never discharge a Sealed Lead Acid (SLA) battery below 50 percent State of Charge (SOC) so to prevent damage to the batteries I use a Low Voltage Disconnect module. The one I used: Digital Low Voltage Protector Disconnect Switch is set to disconnect at 12.3 volts and reconnect at 12.7 volts. Note: If you use a different type battery, the voltages programmed into the Low Voltage Disconnect module will be different.

The LED strips I used are IP67 waterproof strips and use 12 volts as power. Here's the link: WS2815 Programmable Digital LED Pixel Light Strip.   There is a warning to not exceed 12 volts for the strips, but the battery voltage can vary from a low of about 12.2 volts (considered to be under 50 percent SOC for SLA) to a high of about 14.5 volts while charging. I didn't want to risk damage to the LEDs so I run the power through a DC Voltage Reducer Converter.

In summary, run power from the positive terminal of the batteries, through an Inline Fuse, through the relay, into the Low Voltage Disconnect module, through the DC Voltage Reducer Converter then to the LED strip. This configuration should protect the batteries and the LED strip.

WLED includes a schedule you can configure under /settings/time. Since I'm running an instance of Home Assistant, I control the turn on and off times from there. There is a Home Assistant integration called WLED that discovers all the WLED instances on your network and then an automation can be set created. Below is my YAML automation code that controls my WLED:

Home Assistant Automation for WLED (click to expand)

alias: Ranches Sign
description: ""
trigger:
  - platform: sun
    event: sunset
    offset: "00:15:00"
    id: StartSign
  - platform: time
    at: input_datetime.stop_sign
    id: StopSign
condition: []
action:
  - choose:
      - conditions:
          - condition: trigger
            id: StartSign
        sequence:
          - service: light.turn_on
            data: {}
            target:
              entity_id:
                - light.wled_22_2
      - conditions:
          - condition: trigger
            id: StopSign
        sequence:
          - service: light.turn_off
            data: {}
            target:
              entity_id:
                - light.wled_22_2
mode: single