Serial to WS2812 8 Channel Driver


What is it?

This is a serial to WS2812/WS2811/SK6812/NeoPixel driver board. It can be used with just about any microcontroller, and level-shifts to 5v with 100 ohm impedance matching resistors for the best signal quality. The protocol allows for up to 8 driver boards to run from the same serial line, with cuttable jumpers to set the address. Pixel data is buffered, and displayed simultaneously across all channels, and includes CRC error checking to prevent glitches.

Each channel can have its own color ordering, and can support a mix of RGB and RGBW across channels, and any mix of length, up to 240 RGB pixels or 180 RGBW pixels per channel.

Since data is buffered on this board and the protocol doesn't have any timing requirements, you can calculate pixel data on the fly and there's no need to buffer anything on your micro, freeing up memory. Up to 1920 pixels per board, and up to 8 boards means you can drive up to 15360 pixels from a single serial port using almost no memory!

The serial protocol runs at 2Mbps. This allows up to 66k pixels/sec to be drawn per output, about twice the speed of typical WS2812.


Originally designed to expand output options for the Pixelblaze, this driver board can be driven by just about any micro.

What makes it special?

This solves many issues that are tough to accomplish with existing hardware/libraries:

  1. Handles all of the WS2812 timing requirements. No need to lock up your CPU, disable interrupts, etc.

  2. Buffers data, so you don't have to dedicate memory for each pixel!

  3. Outputs all channels simultaneously (up to 64 with 8 boards).

  4. CRC error checking to avoid glitches in noisy environments.

  5. Handles all of the color re-ordering, and accepts RGB or RGBW ordered data.

  6. Works on a single data line!

  7. Input can be either 3.3 V or 5 V, and level shifts for 5V LEDs.

  8. Doubles the pixels/second possible from a single output.


Driver for Arduino on ESP8266

Specs and Protocol

See this writeup in the source repo.

The board can also deliver up to 3 A



Address Jumper Configuration

Up to 8 boards are supported on the same serial line.

The board address can be set by cutting a trace on the back of the expander board, and defaults to zero. Cutting jp1 adds 1 to the address, cut jp2 adds 2, and jp3 adds 4. e.g.

no cuts = address 0

cut jp1 = address 1

cut jp1 + jp3 = address 5