ESPHOME-WS2805

💡 ESPHome WS2805 External Component

Latest Release Status ESPHome ESP-IDF Ready Arduino Ready License: CC BY-NC-SA 4.0


🌍 Lies dies auf Deutsch

This is an external component for ESPHome that provides support for WS2805 5-channel (RGB + Warm White + Cold White) LED strips.

ESPHome’s built-in AddressableLight primarily maps to a maximum of 4 channels (RGBW). Since WS2805 requires 5 channels (40 bits per pixel) for RGBCCT support, this component operates as an AddressableLight for RGB effects, while maintaining global control over the W1 and W2 channels.

This maps perfectly to the Home Assistant UI, providing correct Addressable RGB effects and global CCT (Color Temperature) control without jumping sliders.

🔥 What can it DO?


🛠️ Usage in ESPHome

To use this component, you can include it directly from GitHub using the external_components block. You can define multiple zones/strips running in parallel on the ESP32 (e.g., ESP32-S3) without RMT crashes.

esp32:
  board: esp32-s3-devkitc-1
  framework:
    type: esp-idf # Also compatible with arduino

external_components:
  - source:
      type: git
      url: https://github.com/babeinlovexd/ESPHOME-WS2805
      ref: main
    components: [ ws2805 ]

light:
  - platform: ws2805
    id: ws2805_zone_1
    name: "My WS2805 Strip - Zone 1"
    pin: GPIO4 # The GPIO pin your primary data line is connected to (din_pin is also valid)
    # fdin_pin: GPIO5 # Optional. Backup data line for WS2805 chips with a redundant input pad
    num_leds: 100 # Total number of LEDs on the strip
    # Optional configurations with default values
    channel_order: GRBWWCW # Optional. Supports RGBWWCW, RGBCWWW, GRBWWCW, GRBCWWW. Default: GRBWWCW
    color_interlock: false # Optional. Prevents simultaneous maximum brightness of white and RGB. Default: false
    constant_brightness: false # Optional. Prevents artificial brightness throttling. Default: false
    cold_white_color_temperature: 153 mireds # Optional. Color temperature for cold white. Default: 153 mireds
    warm_white_color_temperature: 500 mireds # Optional. Color temperature for warm white. Default: 500 mireds
    cct_transition_speed: 3s # Optional. Speed for CCT transitions. Default: 3s
    dithering: true # Optional. Temporal dithering for CCT. Default: false
    max_refresh_rate: 4ms # Optional. Maximum refresh rate. Default: 4ms
    isr_priority: 3 # Optional. Hardware interrupt priority (1-3). Default: 3
    gamma_correct: 2.2 # Optional (from ESPHome). Default: 2.2
    effects:
      - addressable_rainbow:

  - platform: ws2805
    id: ws2805_zone_2
    name: "My WS2805 Strip - Zone 2"
    pin: GPIO5
    num_leds: 100

  - platform: ws2805
    id: ws2805_zone_3
    name: "My WS2805 Strip - Zone 3"
    pin: GPIO6
    num_leds: 100

⚙️ Configuration Variables

You can use all standard ESPHome variables (like name, id, gamma_correct, effects), plus the following WS2805-specific arguments:

Advanced Timing Overrides

The component uses highly optimized defaults for RMT signal timing that center directly in the WS2805 hardware specifications. However, if you are experiencing issues with custom clone chips, you can manually override the timing using the following properties (in nanoseconds, unless specified):

Diagnostics API

If you want to view hardware and memory performance in Home Assistant, you can expose these internal functions via template sensors. Just use the id of your light component (e.g., id(ws2805_zone_1)):


☕ Support this Project

If you like this ESPHome component and want to support my work, I’d be absolutely thrilled about a virtual coffee!

Donate with PayPal


👨‍💻 Developed by

|
Christopher
| | :—: |