neopixel
Module API Manual#
Overview#
This module is an enhanced version of the original machine.LED
.
The neopixel
module is used to drive RGB LED strips based on WS2812 / WS2812B (also known as NeoPixel) chips. These strips use a single data line for serial communication, support color control and cascading, and are widely used for decorative lighting, status indicators, and similar applications.
This module supports both RGB and RGBW formats, where each pixel occupies 3 or 4 bytes. It provides a buffer-based interface for convenient batch updates.
The CanMV K230 currently supports driving WS2812 LEDs via GPIO.
Attention
Since GPIO is currently used to generate WS2812 timing signals, interrupts must be disabled during data transmission.
Therefore, if controlling a large number of LEDs, it may affect the operation of other modules. Please choose the number of LEDs accordingly.
NeoPixel
Class#
Example Code#
from machine import Pin
import neopixel
import time
# Define the NeoPixel data pin and number of LEDs
NEO_PIN = 42
NUM_PIXELS = 8
# Initialize the NeoPixel object
np = neopixel.NeoPixel(Pin(NEO_PIN), NUM_PIXELS)
# Set the first LED to red, second to green, third to blue
np[0] = (255, 0, 0)
np[1] = (0, 255, 0)
np[2] = (0, 0, 255)
# Write the data (must call write() to update the LEDs)
np.write()
# Turn off all LEDs
np.fill((0, 0, 0))
np.write()
Constructor#
neopixel.NeoPixel(pin, n, bpp=3, timing=1)
Parameters
pin
: The GPIO pin used to control the WS2812 LED strip. Must be amachine.Pin
object.n
: Number of LEDs.bpp
: Bytes per pixel.3
for RGB,4
for RGBW. Default is3
.timing
: Protocol timing configuration. Use1
for WS2812 (default), or0
for WS2811/800kHz compatibility mode.
__getitem__
/ __setitem__
Indexing#
np[i] = (r, g, b)
color = np[i]
Description
Access or set the color of the i
-th pixel using a tuple in the format (r, g, b)
or (r, g, b, w)
depending on bpp
.
write()
Method#
np.write()
Description
Send the current color buffer to the LED strip. This method must be called for any changes to take effect.
fill()
Method#
np.fill((r, g, b))
Description
Set all pixels in the LED strip to the same color. The color format is the same as in __setitem__
.
__len__()
Method#
length = len(np)
Description
Returns the number of pixels in the current NeoPixel object.
Notes#
Ensure the data pin is correctly connected and configured as an output before use.
For long LED strips (e.g., more than 30 LEDs), external power supply is recommended. Also consider adding a 330Ω resistor in series with the data line for protection.
Interrupts are disabled during data transmission to maintain timing accuracy.
Advanced Example: Rainbow Animation#
import time
import neopixel
from machine import Pin
np = neopixel.NeoPixel(Pin(42), 10)
def wheel(pos):
if pos < 85:
return (pos * 3, 255 - pos * 3, 0)
elif pos < 170:
pos -= 85
return (255 - pos * 3, 0, pos * 3)
else:
pos -= 170
return (0, pos * 3, 255 - pos * 3)
while True:
for j in range(256):
for i in range(len(np)):
np[i] = wheel((i * 10 + j) % 256)
np.write()
time.sleep_ms(20)