#spi #ws2812 #constants #write #pattern #proc-macro #generate

macro ws2812-spi-write-constants

ProcMacros for generating SPI constants for use for WS2812 control

2 unstable releases

0.2.0 Apr 15, 2022
0.1.0 Apr 9, 2022

#18 in #ws2812

26 downloads per month
Used in ws2812-blocking-spi

Apache-2.0 OR MIT

5KB

WS2812 driver for embedded-hal blocking spi traits

This crate adds an implementation using embedded_hal::spi::blocking for smart-leds

The ws2821 crate that is part of the smart-leds project is using a FullDuplex implementation of SPI which is not implemented on all platforms.

This crate pre-generates constants for all 8-bit patterns required to send to LEDs and this adds a 1KB flash space overhead.

Usage example

use ws2812_blocking_spi::Ws2812BlockingWriter;

// Requires a SPI interface. LEDs data pin should be
// connected to the MOSI pin (master-in-slave-out)
let spi: embedded_hal::blocking::spi::Write<u8> = /*... */;

// setup some data to write
let mut data = [RGB8::default(); 3];
data[0] = [0xFF_u8, 0_u8, 0_u8].into();  // Full RED
data[1] = [0_u8, 0xFF_u8, 0_u8].into();  // Full GREEN
data[2] = [0_u8, 0_u8, 0xFF_u8].into();  // Full BLUE

// Create a writer
let mut leds = Ws2812BlockingWriter::new(spi);

// does the data write
leds.write(data.iter().cloned());

lib.rs:

Contains macros for constant generation

WS2812 SPI data uses SPI writes to define high/low patterns to sent to the neopixel chip to be interpreted as values

This crate pre-computes the specific patterns requires.

Dependencies

~1.5MB
~37K SLoC