DotStar RGB LED Module - APA102/SK9822 Addressable RGB LEDs
This module provides support for DotStar (APA102/SK9822) addressable RGB LED strips via SPI. DotStars offer advantages over NeoPixels: higher refresh rates, no timing-critical protocol, and per-pixel global brightness control.
Features:
- Up to 64 pixels per strip (configurable)
- 24-bit RGB color + 5-bit global brightness per pixel
- Configurable color channel ordering (RGB, GRB, BRG, etc.)
- SPI-based communication (no timing constraints)
- High refresh rate capability
Example:
import panicoverride import nimphea import nimphea/per/spi import nimphea/dev/dotstar var config: DotStarConfig config.transport_config.periph = SPI_1 config.transport_config.baud_prescaler = SPI_PS_4 config.transport_config.clk_pin = D10() config.transport_config.data_pin = D9() config.color_order = RGB config.num_pixels = 16 var leds: DotStarSpi if leds.init(config) == DS_OK: leds.setPixelColor(0, 255, 0, 0) # Red leds.fill(0, 255, 0) # Green on all pixels leds.show() # Update the strip
Types
ColorOrder = enum RGB = 6, RBG = 9, GRB = 18, GBR = 33, BRG = 24, BGR = 36
- Pixel color channel ordering Format encodes R/G/B offsets in 4/2/0 bit positions Source Edit
DotStarConfig = object transport_config*: DotStarSpiTransportConfig color_order*: ColorOrder num_pixels*: uint16 ## Number of pixels (max 64)
- Source Edit
DotStarResult = enum DS_OK = 0, DS_ERR_INVALID_ARGUMENT, DS_ERR_TRANSPORT
- Source Edit
DotStarSpi = object
- Source Edit
DotStarSpiTransportConfig = object periph*: SpiPeripheral baud_prescaler*: SpiBaudPrescaler clk_pin*: Pin data_pin*: Pin
- Source Edit
Procs
proc clear(dotstar: var DotStarSpi) {....raises: [], tags: [], forbids: [].}
- Clear all pixels (set to black) Does not reset global brightness Source Edit
proc defaults(config: var DotStarConfig) {....raises: [], tags: [], forbids: [].}
- Source Edit
proc defaults(config: var DotStarSpiTransportConfig) {....raises: [], tags: [], forbids: [].}
- Source Edit
proc fill(dotstar: var DotStarSpi; color: Color) {....raises: [], tags: [], forbids: [].}
- Fill all pixels with Color object Source Edit
proc fill(dotstar: var DotStarSpi; color: uint32) {....raises: [], tags: [], forbids: [].}
- Fill all pixels with 32-bit color Source Edit
proc fill(dotstar: var DotStarSpi; r, g, b: uint8) {....raises: [], tags: [], forbids: [].}
- Fill all pixels with RGB color Source Edit
proc getPixelColor(dotstar: DotStarSpi; idx: uint16): uint32 {....raises: [], tags: [], forbids: [].}
- Get color of a pixel as 24-bit RGB value Source Edit
proc init(dotstar: var DotStarSpi; config: DotStarConfig): DotStarResult {. ...raises: [], tags: [], forbids: [].}
- Initialize DotStar strip Source Edit
proc setAllGlobalBrightness(dotstar: var DotStarSpi; brightness: uint16) {. ...raises: [], tags: [], forbids: [].}
- Set global brightness for all pixels (0-31) Source Edit
proc setPixelColor(dotstar: var DotStarSpi; idx: uint16; color: Color): DotStarResult {. ...raises: [], tags: [], forbids: [].}
- Set pixel color with Color object Source Edit
proc setPixelColor(dotstar: var DotStarSpi; idx: uint16; color: uint32): DotStarResult {. ...raises: [], tags: [], forbids: [].}
- Set pixel color with 32-bit RGB value (MSB ignored) Source Edit
proc setPixelColor(dotstar: var DotStarSpi; idx: uint16; r, g, b: uint8): DotStarResult {. ...raises: [], tags: [], forbids: [].}
- Set pixel color with 8-bit RGB values Source Edit
proc setPixelGlobalBrightness(dotstar: var DotStarSpi; idx: uint16; brightness: uint16): DotStarResult {....raises: [], tags: [], forbids: [].}
- Set global brightness for a single pixel (0-31) WARNING: Keep brightness low (<=10) especially for SK9822-EC20 to avoid overheating Source Edit
proc show(dotstar: var DotStarSpi): DotStarResult {....raises: [], tags: [], forbids: [].}
- Write pixel data to LED strip Source Edit