# NeoPixels Rainbow on MicroPython
# Wokwi Example https://wokwi.com/arduino/projects/305569065545499202
from machine import Pin
from neopixel import NeoPixel
from time import sleep
# Rainbow gradient (32 colors)
rainbow = [
(126, 1, 0), (114, 13, 0), (102, 25, 0), (90, 37, 0), (78, 49, 0), (66, 61, 0), (54, 73, 0), (42, 85, 0),
(30, 97, 0), (18, 109, 0), (6, 121, 0), (0, 122, 5), (0, 110, 17), (0, 98, 29), (0, 86, 41), (0, 74, 53),
(0, 62, 65), (0, 50, 77), (0, 38, 89), (0, 26, 101), (0, 14, 113), (0, 2, 125), (9, 0, 118), (21, 0, 106),
(33, 0, 94), (45, 0, 82), (57, 0, 70), (69, 0, 58), (81, 0, 46), (93, 0, 34), (105, 0, 22), (117, 0, 10)
]
NUM_LEDS = 24
# Ring 1 on Pin 15
ring1 = NeoPixel(Pin(15), NUM_LEDS)
# Ring 2 on Pin 23
ring2 = NeoPixel(Pin(23), NUM_LEDS)
# Brightness wave values (0 to 1)
brightness_wave = [i / 23 for i in range(24)]
def scale_color(color, brightness):
return tuple(int(c * brightness) for c in color)
while True:
# 🌈 Ring 1: Rotating rainbow
rainbow = rainbow[-1:] + rainbow[:-1]
for i in range(NUM_LEDS):
ring1[i] = rainbow[i]
ring1.write()
# 🔵 Ring 2: Pulsing wave (blue tones)
for i in range(NUM_LEDS):
b = brightness_wave[i]
ring2[i] = scale_color((0, 0, 255), b)
ring2.write()
# Shift brightness wave for animation
brightness_wave = brightness_wave[-1:] + brightness_wave[:-1]
sleep(0.1)