Is WS2812B Addressable RGB LED Strip Compatible with Home Assistant (ESPHome)?
Variants covered by this page
LED strip (ESP32-S3) WS2812B Addressable RGB LED Strip
LED ring (ESP32-C3) WS2812B RGB LED Ring
Electrical Specifications
Always confirm pin assignments against the manufacturer datasheet before wiring.
Compatibility Overview
High-speed addressable RGB LED driver leveraging ESP32-S3 RMT hardware peripherals for smooth ambient lighting and animations.
Wiring WS2812B Addressable RGB LED Strip to ESP32-S3
| Module pin | ESP32-S3 | Note |
|---|---|---|
| 5V / VCC | external 5V supply | Not the board's 5V pin beyond a handful of pixels. Size the supply at 60mA per LED for full white — 60 LEDs is 3.6A. |
| GND | GND | Shared between the supply, the strip and the ESP32. A data line with no common ground does nothing. |
| DIN | GPIO48 | Through a 330Ω series resistor, ideally after a 74AHCT125 level shifter. GPIO48 is also the DevKitC-1 v1.0's onboard LED, which is why the config lights something with no strip attached. |
| 1000µF capacitor | across 5V and GND at the strip | Takes the edge off the power-on surge that kills the first pixel. |
Host pins are the ones the configuration on this page uses. Move a pin here and change it in the YAML — they are documented together so they cannot disagree.
Technical Specification Matrix
| Feature / Attribute | Specification / Status |
|---|---|
| Hardware Protocol | GPIO RMT / 3.3V to 5V Level Shift |
| Bridge Required | NO |
| Border Router Needed | None |
| Hardware Capabilities & Peripherals | Light Strip (RGB) Color Effects Brightness Speed Note: these entities come from the ESPHome configuration you flash — each one needs its matching component in that YAML before it appears. |
| Pairing Complexity | Plug-and-Play |
| Factory Reset Instruction | Hold BOOT button while powering on. |
Wire, Flash, Adopt, Check
Wire it up
Follow the wiring table above. The ESP32-S3 pins there are the ones the configuration uses, so if you move one, change it in both places.
Flash the configuration
Create a new device in the ESPHome dashboard (the Home Assistant add-on) and paste the configuration below into it, or save it as emb_esp32s3_ws2812b_esphome.yaml and run esphome run emb_esp32s3_ws2812b_esphome.yaml. The first flash goes over USB. If it is not detected, hold BOOT button while powering on to put it in download mode. Every update after that is over the air.
Adopt it in Home Assistant
Settings → Devices & Services. A node on the same network shows up as a discovered ESPHome device within a minute of joining Wi-Fi; choose Configure and enter the API encryption key from your secrets.yaml. If discovery does not find it, add the ESPHome integration by hand with the node's IP address.
Check it works
The light entity appears in Home Assistant with an effect list. Turn it on white at full brightness: every pixel white to the far end means power is sufficient; a red cast at the end means inject power; a first pixel that flickers or shows the wrong colour means the level shift.
ESPHome Configuration
Starting configuration for WS2812B Addressable RGB LED Strip on ESP32-S3. Untested on hardware — verify wiring and pins against your own board.
# ESPHome configuration for WS2812B Addressable RGB LED Strip
# Host: ESP32-S3. Pin numbers below are host-side defaults — any free
# GPIO will do, and you should change them to match your own wiring.
esphome:
name: emb_esp32s3_ws2812b_esphome
friendly_name: "WS2812B Addressable RGB LED Strip"
esp32:
board: esp32-s3-devkitc-1
framework:
type: esp-idf
logger:
api:
encryption:
key: !secret api_encryption_key
ota:
- platform: esphome
password: !secret ota_password
wifi:
ssid: !secret wifi_ssid
password: !secret wifi_password
# GPIO48 is the onboard RGB LED on the ESP32-S3-DevKitC-1 v1.0, so this
# block lights something before any strip is wired. (v1.1 moved that LED
# to GPIO38.) For an external strip, any output-capable GPIO will do.
light:
- platform: esp32_rmt_led_strip
name: "LED Strip"
pin: GPIO48
num_leds: 60
chipset: WS2812
rgb_order: GRB
# The S3 allocates RMT memory in 48-symbol blocks; raising this is the
# fix for flicker or dropped frames on long strips.
rmt_symbols: 96
effects:
- addressable_rainbow:
- addressable_color_wipe:
- addressable_scan:
- addressable_twinkle:
- addressable_fireworks:
Before you flash:
the !secret values come from your
secrets.yaml, and the GPIO numbers are host-side
defaults rather than properties of this part — change them to match how you actually wired it.
What Appears in Home Assistant
RGB colour and brightness, plus an effect selector carrying the five addressable effects in the config. Add more under effects: as you want them.
Known Problems and Fixes
3.3V data into a 5V strip
The WS2812B wants a high level of at least 0.7 × VDD, which is 3.5V on a 5V strip. A 3.3V ESP32 output is under that, and the result is a strip that works on the bench and flickers, drops the first pixel or shows the wrong colours once the wire is longer. A 74AHCT125 or 74HCT245 shifter fixes it. The cheaper trick is feeding the first pixel through a diode so it runs at about 4.3V and re-drives the rest.
Inject power along the strip
Copper on a 5V strip drops voltage fast. Past about a metre the far end goes red-tinted at full white because blue is the first channel to starve. Run 5V and GND to both ends, or every metre on dense strips.
NeoPixelBus is not on the S3
The neopixelbus platform does not build for the ESP32-S3, and fastled_clockless needs the Arduino framework. esp32_rmt_led_strip in the config is the platform for this chip on either framework.
GPIO48 or GPIO38
The onboard RGB LED sits on GPIO48 on the ESP32-S3-DevKitC-1 v1.0 and moved to GPIO38 on v1.1. If nothing lights before you have wired a strip, try the other pin.
Flicker under Wi-Fi load
The S3 hands out RMT memory in 48-symbol blocks and the default is tight for long strips. rmt_symbols: 96 in the config is the first thing to raise; use_dma where the chip supports it is the second.
SK6812 and RGBW
RGBW strips need chipset: SK6812 and a four-channel colour order. WS2812B is GRB; some WS2811 pixel strings are RGB. A wrong order is obvious — ask for red and get green.
Report a Pinout Error or Submit Tested Code Snippets
Found a pin mapping quirk or built a custom ESPHome YAML driver for WS2812B Addressable RGB LED Strip? Submit a pull request or report corrections to our index.
Hardware Correction Reporter (emb-esp32s3-ws2812b-esphome)
Frequently Asked Questions
Does WS2812B Addressable RGB LED Strip work without an internet connection?
How is WS2812B Addressable RGB LED Strip powered and wired to the host board?
How does the host board reach Home Assistant (ESPHome)?
Alternatives
WLED ↗
Purpose-built LED firmware with hundreds of effects, segments and a Home Assistant integration of its own. ESPHome wins when the strip is one part of a bigger node; WLED wins when the strip is the whole point.
Nanoleaf Essentials Smart Bulb A19
Colour light with no soldering, no power supply sizing and no level shifter: a Matter bulb, if the strip was a means rather than the end.