Addressable LEDs in Berry~
Requires #define USE_WS2812, included in Tasmota32
Support for addressable leds strips and animation. Internally relies on optimized TasmotaLED library, currently supporting WS2812 and SK6812, 3 and 4 channels, over RMT and SPI.
How to use~
Compatibility with Templates~
You can control multiple LED strips. WS2812 - 1 is also controlled by Tasmota's light controls. It is still possible to control this light strip with Berry, but whenever you use Tasmota light controls they will temporarily overrid Berry animations.
To avoid any conflict between native WS2812 and Berry control, you can use Scheme 14 which disables native WS2812.
Led strips, sub-strips~
You first need to define the low-level Leds object that describes the hardware strip of connected leds.
You can then define higher level objects like sub-strips (if there are actually several strips chained together like rings).
Once a Leds object, you can use sub-objects:
| Method | Details |
|---|---|
| create_segment | <strip>.create_segment(offset:int, pixels:int) -> instance<Leds_segment>Creates a virtual segment from a physical Leds strip, from Led number offset with pixels leds. |
The Leds_segment class provides the same interface as the Leds class, with the following differences: - It doesn't have its own buffer, it's a view into the parent strip's buffer - The show() method takes an optional force parameter that, when true, forces a show even if the segment doesn't cover the entire strip - The pixels_buffer() method returns nil since segments don't have their own buffer
| LED model | Details |
|---|---|
| Leds.WS2812_GRB | WS2812b Leds (GRB) - takes 24 bits RGB colors |
| Leds.SK6812_GRBW | SK6812 Leds (GRBW) - takes 32 bits RGBW colors (with white channel) |
Methods are the equivalent low-level from NeoPixelBus. All colors are in 0xRRGGBB format (24 bits) or 0xWWRRGGBB format (32 bits).
Advanced features~
Hardware RMT channels~
This library uses NeoPixelBus library, and RMT hardware support in ESP32. The number of RMT channels, hence the number of simultaneous strips, depends on the CPU type. Tasmota native support for WS2812 uses RMT channel 0; it is not usable in such case.
| CPU type | RMT channels |
|---|---|
| ESP32 | 8 |
| ESP32S2 | 4 |
| ESP32C3 | 2 |
Currently RMT channel 0 is used by default if no GPIO WS2812-1 is configured, RMT channel 1 otherwise.
pixmat class for 2D pixel buffers~
The pixmat class provides a native high-performance 2D pixel buffer abstraction for Berry.
It supports mono (1‑bpp), RGB (3‑bpp), and RGBW (4‑bpp) formats, with optional serpentine layout.
Constructor~
| Overload | Description |
|---|---|
pixmat(bitplane_bytes:bytes, bytes_per_line:int) | Creates a 1‑bpp mono matrix from packed bitplane data. Each bit becomes a pixel (0 or 255). |
pixmat(buf:bytes, width:int, height:int, bpp:int[, serpentine:bool]) | Wraps an existing pixel buffer. No copy is made. bpp is bytes per pixel (1=mono, 3=RGB, 4=RGBA). serpentine reverses odd rows if true. |
pixmat(width:int, height:int, bpp:int[, serpentine:bool]) | Allocates a new zero‑filled buffer with given dimensions and pixel format. |
bitplane_bytes: packed bits (1‑bpp), each bit becomes a pixel (0 or 255)buf: external buffer to wrap (no copy)width,height: pixel dimensionsbpp: bytes per pixel (1=mono, 3=RGB, 4=RGBW)serpentine: if true, odd rows are reversed in memory
Methods~
| Method | Description |
|---|---|
pixmat.clear([val:int]) | Fills the entire matrix with val (default 0). For mono: luminance. For RGB/RGBA: all channels. |
pixmat.get(x:int, y:int) → int or list | Returns pixel value at (x, y). Packed int for mono/RGB/RGBA, list for other bpp. |
pixmat.set(x:int, y:int, rgb:int[, bri:int]) | Sets pixel at (x, y) using packed RGB (0xRRGGBB). Optional brightness scaling. |
pixmat.set(x:int, y:int, h:int, s:int, v:int[, bri:int]) | Sets pixel using HSV values. Converts to RGB internally. Optional brightness. |
pixmat.blit(src:pixmat, dx:int, dy:int[, bri:int][, tint:int]) | Copies pixels from src matrix with optional brightness and RGB tint. Supports mono→color expansion. |
pixmat.scroll(dir:int[, src:pixmat]) | Scrolls matrix content by one pixel. dir: 0=up, 1=left, 2=down, 3=right. Optional src fills vacated row/column. |
clear(val): fills matrix with value (default 0)get(x,y): returns pixel value (packed int or list)set(x,y,rgb): sets pixel with packed RGBset(x,y,h,s,v): sets pixel with HSV (converted internally)blit(src, dx, dy): copies pixels from another matrix, for mono source 0 becomes transparentscroll(dir): scrolls content by one pixel (0=up, 1=left, 2=down, 3=right)
Notes~
- All operations are in-place and use integer math
- Brightness and tinting are supported in
set()andblit() - Mono→color expansion is automatic when blitting
- Ideal for use with
Leds.pixels_buffer()to drive 2D LED panels
Example~
var strip = Leds(256, gpio.pin(gpio.WS2812, 32))
var m = pixmat(strip.pixels_buffer(), 32, 8, strip.pixel_size(), true)
m.set(0, 0, 0xFF0000) # top-left pixel red
strip.show()
A few more examples can be found here.
WLED Palettes Reference~
This page displays all 59 WLED gradient palettes available in the Berry Animation Framework.
Palette Gallery~
| Palette | Gradient |
|---|---|
Analogous5 color stops | |
April Night17 color stops | |
Aqua Flash7 color stops | |
Atlantica6 color stops | |
Aurora6 color stops | |
Aurora 25 color stops | |
Autumn13 color stops | |
Beach6 color stops | |
Beech15 color stops | |
Blink Red8 color stops | |
Breeze4 color stops | |
C98 color stops | |
C9 210 color stops | |
C9 New8 color stops | |
Candy210 color stops | |
Candy5 color stops | |
Cyane11 color stops | |
Departure12 color stops | |
Drywet7 color stops | |
Fairy Reaf4 color stops | |
Fire13 color stops | |
Grintage5 color stops | |
Hult648 color stops | |
Hult6 color stops | |
Icefire7 color stops | |
Jul4 color stops | |
Landscape9 color stops | |
Light Pink11 color stops | |
Lite Light6 color stops | |
Magenta7 color stops | |
Magred5 color stops | |
Orangery9 color stops | |
Orange & Teal4 color stops | |
Pastel11 color stops | |
Pink Candy7 color stops | |
Red & Blue9 color stops | |
Red Flash5 color stops | |
Red Reaf4 color stops | |
Red Shift7 color stops | |
Red Tide11 color stops | |
Retro Clown3 color stops | |
Rewhi6 color stops | |
Rivendell5 color stops | |
Sakura5 color stops | |
Semi Blue9 color stops | |
Sherbet7 color stops | |
Splash5 color stops | |
Sunset28 color stops | |
Sunset7 color stops | |
Temperature18 color stops | |
Tertiary5 color stops | |
Tiamat11 color stops | |
Toxy Reaf2 color stops | |
Traffic Light4 color stops | |
Vintage8 color stops | |
Yelblu5 color stops | |
Yelblu Hot7 color stops | |
Yellowout2 color stops | |
Yelmag7 color stops |
Credits~
- WLED Palettes: From WLED Project by Aircoookie
- Conversion: For Tasmota Berry Animation Framework
- Total Palettes: 59 gradient palettes