🛠 Piloter la LED RGB embarquée WS2812 d'une carte RP2040 générique
Objetivos
Las tarjetas RP2040 «genéricas» (Waveshare RP2040 Zero, Adafruit Feather/QT Py RP2040, SparkFun Micro RP2040…) a menudo no tienen un LED simple como la Pico: incorporan un LED direccionable WS2812 («NeoPixel») controlado mediante un protocolo de un solo hilo a 800 kHz que MicroPython genera a través de los PIO del RP2040. Al final de este tutorial, sabrás encontrar el pin del LED de TU tarjeta y darle cualquier color.
Material
- 1 × tarjeta RP2040 genérica. Pines comunes: GP16 en Waveshare RP2040 Zero (página del fabricante), GP17 en Adafruit Feather RP2040 (página del fabricante) — verifica la ficha de tu fabricante, es EL dato que debes buscar
- 1 × cable USB (¡de datos!): muchos modelos Zero son USB-C
- Firmware MicroPython rp2 flasheado en modo BOOTSEL (mantén presionado BOOT mientras conectas, la tarjeta aparece como unidad
RPI-RP2)
Código completo
# main.py — LED WS2812 embarquée (GP16 Waveshare Zero, GP17 Feather)
import neopixel
from machine import Pin
import time
PIN = 16 # à adapter à ta carte !
led = neopixel.NeoPixel(Pin(PIN), 1) # chaîne d'une seule LED
for r, g, b in [(255, 0, 0), (0, 255, 0), (0, 0, 255), (255, 64, 0)]:
led[0] = (r, g, b) # tuple (R, G, B) 0..255
led.write # la PIO envoie la trame, le CPU est libre
time.sleep_ms(500)
while True: # « arc-en-ciel » rapide
for i in range(256):
led[0] = (i, 255 - i, 128)
led.write
time.sleep_ms(5)
Verificación esperada
El LED pasa a rojo, verde, azul, naranja cada 500 ms, luego un degradado continuo. A diferencia de un LED clásico, nada parpadea «apagado» entre dos colores: el LED mantiene su última trama, porque el WS2812 memoriza su consigna. Si tu tarjeta tiene varios WS2812 (algunos badges, QT Py con strobe), pasa la longitud real a NeoPixel(..., n).
Errores frecuentes
- Codificar GP25 por reflejo «Pico»: las tarjetas genéricas casi nunca tienen un LED en GP25 — el WS2812 está en GP16, GP17 o en otro lugar según el fabricante.
- Olvidar
led.write: la tupla se modifica en memoria pero no se envía nada al bus. - Buscar un módulo
rp2para el LED: el WS2812 utiliza el módulo estándarneopixel(incluido en el firmware rp2), norp2.StateMachinedirectamente. - Alimentar una tira larga desde el regulador de la tarjeta: la Zero incorpora un LDO de 800 mA (ficha Waveshare), pero una tira de 100 LED blancos consume ~6 A — alimentación separada obligatoria.
- LED que se enciende en blanco/rosa aleatorio al arrancar: los pines del RP2040 se reconfiguran en el reset; añade
led.fill((0,0,0)); led.writeal inicio del script.
Otros tutoriales para esta placa
- Avoir une console série sur une carte sans pont USB (UART0)
- Jouer une mélodie avec un buzzer passif et le PWM
- Afficher sur un OLED I2C SSD1306 et déboguer le bus
- Logger sur carte microSD en SPI (mode carte)
- Interruptions GPIO et alarmes matérielles avec le Pico SDK
- Transformer la carte en clavier USB HID avec TinyUSB
Ejemplos de código para esta placa
clignotante.pyPythonbouton-interruption.pyPythonpwm-servo.pyPythonlecture-adc.pyPythonneopixel.pyPythonoled-i2c.pyPython