---
title: WS2812B LEDs on Raspberry Pi Using Rust – Quick Start
siteUrl: https://logzly.com/picodelab
author: picodelab (PiCode Lab)
date: 2026-07-22T00:54:17.674919
tags: [raspberrypi, ws2812b, rust]
url: https://logzly.com/picodelab/ws2812b-leds-on-raspberry-pi-using-rust-quick-start
---


Struggling to get WS2812B LEDs on Raspberry Pi Using Rust to light up? You’re not alone—voltage level mismatches and power sag are the usual suspects.  
This guide shows you the exact wiring, a simple logic‑level shifter, power‑supply tips, and a minimal Rust example so you can see colors instantly.

## WS2812B LEDs on Raspberry Pi Using Rust – Wiring Essentials

The biggest mistake I made was assuming the LED strip would work straight from the Pi’s 3.3 V GPIO. **WS2812B chips need a 5 V data signal**, so the Pi’s native voltage was too weak, especially on longer strips.  
I fixed it by adding a **logic level shifter** (a 74AHCT125 chip) between the Pi and the LED data line. Connect the Pi’s GPIO to the shifter’s input, then take the shifter’s output to the WS2812B’s DI pin.  
Power the strip from a separate 5 V supply that can deliver roughly **60 mA per LED at full white**, and tie all grounds together—Pi, shifter, and strip must share a **common ground**.  
Finally, place a **100 µF electrolytic capacitor** across the strip’s power terminals, as close to the LEDs as possible, to smooth voltage dips when many LEDs illuminate.

## WS2812B LEDs on Raspberry Pi Using Rust – Minimal Rust Example

I used the lightweight **ws2812-rust** crate, which works well on the Pi. Add it to your `Cargo.toml`:

```toml
ws2812-rust = "0.5"
```

Then run this minimal example (adjust the LED count as needed):

```rust
use ws2812_rust::{Ws2812, Color};
use rppal::gpio::Gpio;

fn main() {
    let gpio = Gpio::new().unwrap();
    let pin = gpio.get(18).unwrap().into_output();
    let mut leds = Ws2812::new(pin, 30); // 30 LEDs on GPIO 18

    // Set all LEDs to a soft green
    let green = Color { r: 0, g: 128, b: 0 };
    for i in 0..leds.len() {
        leds.set_pixel(i, green).unwrap();
    }
    leds.write().unwrap();
}
```

Key points: choose a GPIO that supports PWM (GPIO 18 works), specify the exact number of LEDs, and call `write()` after setting each pixel’s color. If the strip lights up, you’ve nailed the level shift and power supply.

## WS2812B LEDs on Raspberry Pi Using Rust – Troubleshooting & Tips

If you still see flicker, lower the brightness in your code or add a stronger capacitor; longer strips sometimes need extra buffering.  
Double‑check the **color order** in your code—WS2812B expects **GRB**, not RGB—so mismatched order produces odd hues.  
Keep the wiring tidy and verify the **common ground** connection; a loose ground is a frequent source of intermittent failures.  
For a visual walk‑through, I’ve posted a short video on **My Maker Blog** that shows the exact wiring and capacitor placement.

Once the basics click, experiment with patterns—fade, chase, or sensor‑driven effects—using the same simple API. Happy tinkering!