pimoroni-pico/micropython/modules/plasma_2040/README.md

2.9 KiB

Plasma

The Plasma library is intended to drive APA102 / DotStar™ or WS2812 / NeoPixel™ LEDs on the Plasma 2040 board, though it can be used with your own custom pins/wiring.

Notes On PIO Limitations

The WS2812 and APA102 drivers use the PIO hardware on the RP2040. There are only two PIOs with four state machines each, placing a hard limit on how many separate LED strips you can drive.

In most cases you'll use 0 for PIO and 0 for PIO state-machine, but you should change these if you plan on running different strand types together, or if you're using something else that uses PIO.

APA102

Getting Started

Construct a new WS2812 instance, specifying the number of LEDs, PIO, PIO state-machine and GPIO pin.

import plasma

LEDS = 30
FPS = 60

led_strip = plasma.WS2812(LEDS, 0, 0, 15)

Start the LED strip by calling start. This sets up a timer which tells the RP2040 to DMA the pixel data into the PIO (a fast, asyncronous memory->peripheral copy) at the specified framerate.

led_strip.start(FPS)

Set An LED

You can set the colour of an LED in either the RGB colourspace, or HSV (Hue, Saturation, Value). HSV is useful for creating rainbow patterns.

RGB

Set the first LED - 0 - to Purple 255, 0, 255:

led_strip.set_led(0, 255, 0, 255)

HSV

Set the first LED - 0 - to Red 0.0:

led_strip.set_hsv(0, 0.0, 1.0, 1.0)

Set Brightness

APA102 pixels support global brightness, allowing their brightness to be specified independent of their colour. You can set the overall brightness of your strip by calling:

led_strip.set_brightness(15)

You can set brightness from 0 to 31. This directly maps to the 5-bit brightness value sent to the APA102 LEDs.

WS2812

Getting Started

Construct a new APA102 instance, specifying the number of LEDs, PIO, PIO state-machine and GPIO data/clock pins.

import plasma

LEDS = 30
FPS = 60

led_strip = plasma.APA102(LEDS, 0, 0, 15, 14)

Start the LED strip by calling start. This sets up a timer which tells the RP2040 to DMA the pixel data into the PIO (a fast, asyncronous memory->peripheral copy) at the specified framerate.

led_strip.start(FPS)

Set An LED

You can set the colour of an LED in either the RGB colourspace, or HSV (Hue, Saturation, Value). HSV is useful for creating rainbow patterns.

RGB

Set the first LED - 0 - to Purple 255, 0, 255:

led_strip.set_led(0, 255, 0, 255)

HSV

Set the first LED - 0 - to Red 0.0:

led_strip.set_hsv(0, 0.0, 1.0, 1.0)