nimphea/dev/dotstar

Source   Edit  

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