Neopixel
Configuración completa de LEDs inteligentes en Klipper: desde la conexión a la MCU principal hasta opciones avanzadas con WLED, LUMEN o una segunda MCU dedicada.
Klipper tiene soporte nativo para tiras LED inteligentes WS2812/SK6812 (Neopixel) y APA102/SK9822 (Dotstar), más integración con WLED y LUMEN a través de Moonraker. Con esto puedes iluminar el cerramiento, mostrar el progreso de impresión en tiempo real con colores, animar el toolhead o simplemente saber de un vistazo en qué estado está la máquina.
Esta guía cubre las tres opciones de conexión de menos a más avanzada. Si ya tienes los LEDs funcionando y solo buscas efectos, salta a LED Effects o a la sección de hardware externo.
Dónde conseguir tiras LED Neopixel
Si utilizas los links de compra, el precio del producto será el mismo que si accedes de manera habitual, pero a 3DWork le quedará una pequeña comisión. Algo que nos ayudará a soportar el proyecto y continuar generando contenido.
Antes de conectar — instalación física
Puntos críticos antes de conectar cualquier tira LED:
Añade una resistencia de 300-500 Ω entre el pin de señal de la MCU y el pin de datos de la tira. Protege la MCU de picos en el bus de datos. Sin ella puedes quemar el pin.
Las tiras tienen dirección — la alimentación y la señal van en el sentido de la flecha marcada en la PCB.

Alimenta externamente con una fuente 5V dedicada si tienes más de 15-20 LEDs. La mayoría de electrónicas (SKR, Octopus, Manta) solo aguantan eso antes de necesitar corriente extra. Superar el límite provoca reinicios aleatorios de la MCU.
GND común obligatorio — conecta el GND de la tira y el GND de la MCU al mismo punto. Sin esto la señal de datos no llega bien y los LEDs hacen cosas raras.
Para calcular el consumo exacto: WLED Power Calculator
Tipos de LED y su color_order
color_orderEste parámetro es el origen de la mayoría de problemas con colores incorrectos. Cada tipo de LED envía los bytes de color en un orden distinto:
LED
Protocolo
color_order
Notas
WS2812B
1 cable (datos)
GRB
El más común en impresoras 3D
WS2812B con blanco
1 cable (datos)
GRBW
4 canales
SK6812 RGBW
1 cable (datos)
GRBW
Muy usado en tiras de cerramiento
SK6812 RGB
1 cable (datos)
GRB
Sin canal blanco
APA102 / SK9822
2 cables (datos + reloj)
BGR
Más robusto, mejor para tiras largas
Dotstar (Adafruit)
2 cables (datos + reloj)
BGR
Mismo chip que APA102
WS2811
1 cable (datos)
RGB
Cuidado: orden diferente al WS2812
Si pides rojo y salen verdes, o azul y salen otra cosa, el problema es el color_order. Prueba los valores hasta que los colores sean correctos.
También puedes especificar un color_order diferente para cada LED de la cadena si mezclas tipos distintos: color_order: GRB, GRB, GRBW
Opción 1 — Conexión a la MCU principal
La forma más directa: conectar la tira al pin RGB de tu electrónica (Octopus, SKR, Manta…) y dejar que Klipper la gestione. Sin hardware extra, configuración en printer.cfg y control total desde macros y LED Effects.
Klipper no soporta Neopixel conectados directamente a los GPIO de la Raspberry Pi cuando se usa como Linux MCU. El kernel de Linux no tiene la precisión de temporización necesaria para el protocolo WS2812. Si quieres usar los GPIO de la Pi, ve a la sección LUMEN o Segunda MCU RP2040.
Configuración en printer.cfg
Lo más limpio es crear un archivo separado led_effects.cfg y referenciarlo desde printer.cfg:
Así mantienes el cfg principal ordenado y puedes tocar la configuración de LEDs sin tocar el resto.
El más común en impresoras 3D. Un único cable de datos, protocolo de 1 hilo.
Añade un cuarto canal blanco dedicado. Ideal para iluminación de cámara o cerramiento donde buscas luz neutra.
Usa dos cables (datos + reloj), lo que los hace prácticamente inmunes a interferencias. La mejor opción para tiras largas o entornos con ruido eléctrico (motores, fuentes baratas). Más caros que los WS2812 pero mucho más estables.
Pines LED en electrónicas BTT habituales
BTT Octopus v1.x
RGB header
PB0
BTT Manta M4P / M5P / M8P
RGB1
PD0
BTT SKR 3
RGB
PE2
BTT SKR Mini E3 v3
Neopixel
PC7
Los manuales de BTT a veces tienen errores en los pines de los conectores RGB. Si el pin no funciona, prueba el alternativo (PD1 en lugar de PD0, etc.) o consulta el esquema del repositorio de BTT en GitHub.
virtual_leds — segmentar una tira en zonas lógicas
[virtual_leds] permite dividir una tira física en segmentos independientes y controlar cada zona por separado. Muy útil en configuraciones como el Stealthburner (logo + nozzle en la misma cadena) o cualquier tira que quieras controlar por zonas.
Ahora puedes usar logo_leds y nozzle_leds de forma independiente en tus efectos y macros, aunque físicamente sean la misma tira.
Comandos SET_LED y SET_LED_TEMPLATE
SET_LED — cambio directo de color
LED
Nombre del [neopixel], [dotstar] o [virtual_leds]
RED, GREEN, BLUE, WHITE
Intensidad del canal (0.0 a 1.0)
INDEX
Número de LED en la cadena (1 = primero). Sin INDEX aplica a todos
TRANSMIT
0 = acumula sin enviar, 1 = envía todo (por defecto 1)
SYNC
0 = no espera a que termine el movimiento anterior
SET_LED_TEMPLATE — plantillas dinámicas
SET_LED_TEMPLATE asigna un template de display a los LEDs, de modo que el color se actualiza automáticamente en tiempo real según el estado de la impresora. Ideal para barras de progreso o indicadores de temperatura.
Ejemplo de plantilla — barra de progreso de impresión:
Para aplicarla a cada LED de la tira:
Macros para el ciclo de impresión
El set mínimo que vale la pena tener configurado:
Intégralas en PRINT_START y PRINT_END:
Control desde Mainsail y Fluidd
Las tiras [neopixel] y [dotstar] gestionadas directamente por Klipper aparecen automáticamente en el panel web bajo Dashboard → Miscellaneous:


Desde ahí puedes cambiar los colores manualmente con sliders sin necesidad de macros.
Los LEDs controlados por WLED, LUMEN o LED Effects no aparecen en Miscellaneous. Se controlan únicamente a través de macros G-code.
LED Effects — efectos avanzados
klipper-led_effect añade efectos dinámicos a los LEDs gestionados por Klipper: breathing, chasing, progress bar, temperatura en tiempo real, reacción a errores, arco iris, y muchos más. Es lo que usan la mayoría de configuraciones de Voron y similares.
Instalación
Si tu instalación está en rutas no estándar:
Añade esto en moonraker.conf para recibir actualizaciones automáticas:
El repositorio incluye una app de escritorio (Windows y Mac) para simular efectos antes de aplicarlos a la impresora. Descárgala desde Releases → Assets. Ahorra mucho tiempo de prueba y error.

Controlar los efectos
Estructura de [led_effect]
[led_effect]Parámetros de capa:
autostart
true activa el efecto al iniciar Klipper
frame_rate
FPS de actualización. 24 es suficiente para casi todo
heater
Vincula el efecto a la temperatura de un heater (extruder, heater_bed)
analog_pin
Vincula el efecto al valor de un pin analógico
stepper
Vincula el efecto al estado de un stepper
run_on_error
Si true, solo activo en estado de error de Klipper
Para la referencia completa de tipos de capa y parámetros: documentación oficial del plugin.
Ejemplos de efectos
Breathing — respiración suave, ideal para idle:
Temperatura del nozzle en tiempo real — azul frío → rojo caliente:
Barra de progreso de impresión:
Arco iris continuo:
Error crítico — rojo parpadeante (se activa automáticamente):
Comet / persecución:
LEDs en el toolhead — Stealthburner y similares
Si tienes un cabezal Voron Stealthburner (o cualquier toolhead con LEDs en el hotend), puedes usar el script de post-procesado de JJR para que los LEDs cambien de color según el tipo de trazada que está imprimiendo: perímetros, relleno, soporte, etc.
La versión actualizada del script está en este repositorio.
Configuración base para Stealthburner
Añadir el script al laminador
Copia
stealthburner_colors.pya tu ordenador (en una ruta sin espacios)Asegúrate de tener Python 3 instalado
En el laminador: Print Settings → Output Options → Post-processing scripts — añade la ruta completa al script

Al laminar aparece una ventana de terminal confirmando la ejecución.
Copia el script al directorio de scripts de Cura:
Windows:
%APPDATA%\cura\<VERSION>\scriptsLinux:
~/.local/share/cura/<VERSION>/scriptsmacOS:
~/Library/Application Support/Cura/<VERSION>/scripts
En Cura: Extensions → Post Processing → Modify G-Code → Add a script → Stealthburner Colors
Para verificar que funcionó, abre el G-code generado con un editor y busca SET_LED LED=sb_leds. Deben aparecer cambios de color en los puntos de transición entre tipos de trazada.
Opción 2 — Hardware externo o segunda MCU
Cuando la MCU principal no tiene pines libres, quieres controlar tiras grandes con animaciones fluidas a 60fps, o prefieres un sistema de efectos más rico sin escribir código, estas tres opciones cubren todos los casos.
WLED vs LUMEN vs RP2040 — ¿cuándo usar cada uno?
Hardware extra
ESP8266/ESP32 (~5€)
Ninguno (usa la Pi)
Pi Pico (~5€)
Conexión a Klipper
Moonraker ([wled])
Moonraker (plugin)
MCU secundaria ([mcu])
FPS / fluidez
Alta (WiFi, alguna latencia)
60fps GPIO nativo
Igual que MCU principal
Número de efectos
+100 efectos y paletas
12 efectos, 14 estados automáticos
Los de klipper-led_effect
Interfaz de configuración
App web propia + presets
Archivo lumen.cfg
printer.cfg
Detección automática de estados
No — necesita macros
Sí — sin tocar PRINT_START
No — necesita macros
Mejor para
Cerramientos grandes, efectos vistosos
Pi ya instalada, cero hardware extra
Pines MCU agotados, tiras largas
Las tres opciones son compatibles entre sí. Puedes tener WLED para el cerramiento, LUMEN para el toolhead, y una segunda MCU para una tira larga simultáneamente.
WLED — firmware ESP8266/ESP32
WLED es un firmware open-source para ESP8266/ESP32 con más de 100 efectos y paletas de color. Se integra con Moonraker para controlar presets desde macros G-code.
WLED es la opción recomendada si quieres efectos visuales llamativos en el cerramiento. La ESP32 cuesta menos de 5€ y aguanta tiras de cientos de LEDs sin problemas.
Configurar presets en WLED
Antes de integrar con Klipper, define los presets en la app de WLED:
Elige color y efecto desde la pantalla principal
Pestaña Presets → crear nuevo preset. El ID del preset es el número que usarás en Klipper
Crea al menos: encendido con efecto, apagado, y uno por cada estado de impresión
Asigna una IP estática a tu WLED desde la configuración WiFi del propio WLED. Si cambia la IP, los macros dejan de funcionar.
moonraker.conf
Macros Klipper para WLED
LUMEN — plugin Moonraker para Raspberry Pi
LUMEN es un plugin de Moonraker que controla LEDs directamente desde la Raspberry Pi sin necesidad de hardware externo. Detecta automáticamente 14 estados de la impresora y aplica efectos suaves a 60fps usando el GPIO de la Pi.
LUMEN es la mejor opción si ya tienes la Pi y quieres detección automática de estados sin tocar PRINT_START ni PRINT_END. La instalación es un único script.
Instalación
El instalador detecta las rutas de Klipper/Moonraker automáticamente, instala la librería rpi-ws281x, levanta el servicio ws281x-proxy (necesario para acceso GPIO a 60fps) y añade la configuración base al moonraker.conf.
moonraker.conf
Configuración en lumen.cfg
Para tiras WS2812B conectadas directamente a los GPIO de la Raspberry Pi. Corre a 60fps sin tocar la cola G-code.
Los únicos GPIO válidos para WS2812B en la Pi son 12, 13, 18 y 19 (pines PWM hardware). GPIO 18 es el más recomendado — GPIO 19 puede dar conflictos con la salida de audio si está habilitada en /boot/config.txt.
Para LEDs conectados a la MCU principal o un toolboard. LUMEN envía SET_LED via cola G-code — la animación es más lenta durante la impresión pero funciona en cualquier electrónica BTT.
Para tiras LED no addressables (luz blanca, un solo canal de brillo).
Estados automáticos de la impresora
LUMEN detecta 14 estados directamente desde Moonraker/Klipper sin necesidad de macros en PRINT_START/PRINT_END:
idle
Impresora fría, sin objetivos de temperatura
heating
Calentando hotend o cama
printing
Impresión activa a temperatura
cooldown
Impresión terminada, todavía caliente (>40°C)
error
Klipper en shutdown o error
paused
Impresión pausada
cancelled
Impresión cancelada
homing
Ejecutando homing
meshing
Haciendo bed mesh
leveling
Nivelando
probing
Probando con el sensor
filament_change
Cambio de filamento (requiere sensor de runout)
bored
Idle durante N minutos (configurable)
sleep
Bored durante N minutos (configurable)
Efectos disponibles
Integración opcional con macros
LUMEN funciona sin macros — los estados se detectan automáticamente. Para control manual añade el archivo de macros de ejemplo a printer.cfg:
Modo test — verificar efectos sin imprimir
API REST
Segunda MCU — RP2040 / Pi Pico
Si tu electrónica no tiene pines libres o quieres controlar tiras de más de 20 LEDs sin saturar la MCU principal, un microcontrolador dedicado con firmware Klipper es la solución más limpia: los LEDs aparecen en Klipper como cualquier otro neopixel y son compatibles con LED Effects.
La opción más recomendada: Raspberry Pi Pico (RP2040)
Cuesta menos de 5€, tiene soporte nativo en Klipper, y puede manejar centenares de LEDs sin esfuerzo. Mucho más potente que un Arduino Nano para este uso.
Compilar firmware para RP2040
Configuración en menuconfig:
Micro-controller Architecture:
Raspberry Pi RP2040Bootloader offset:
No bootloaderCommunication interface:
USB
Con el Pico en modo BOOTSEL (mantén el botón pulsado al conectar el USB), aparece como unidad de almacenamiento. Copia el archivo .uf2 generado.
Configurar en printer.cfg
Una vez configurado puedes usar este [neopixel] con cualquier macro SET_LED o con el plugin LED Effects exactamente igual que si estuviera en la MCU principal.
Arduino Nano como alternativa
Si tienes un Arduino Nano disponible también funciona. En make menuconfig selecciona Atmega AVR → atmega328p. El RP2040 es preferible por capacidad y mejor soporte, pero el Nano funciona perfectamente para tiras pequeñas.
Solución de problemas
Los colores salen incorrectos
El problema casi siempre es el color_order. Prueba en este orden:
Comprueba el modelo exacto de tu LED (WS2812B, SK6812, APA102...)
Consulta la tabla de tipos más arriba y ajusta
color_orderSi mezclas LEDs de distinto tipo en la misma cadena, puedes especificar uno por LED:
color_order: GRB, GRB, GRBW
Los LEDs parpadean o hacen cosas raras
Causa probable: señal
Falta resistencia en el pin de datos (300-500 Ω)
Cable de señal demasiado largo (más de 50 cm sin repetidor)
GND no compartido entre MCU y tira
Causa probable: alimentación
Tira alimentada desde el 5V de la electrónica con más de 20 LEDs
Fuente 5V insuficiente — usa la calculadora WLED para verificar amperaje
Capacitor 1000 µF entre +5V y GND al inicio de la tira estabiliza la tensión
"Neopixel update did not succeed" en el log
Este error aparece cuando el timing de la señal falla. Causas más frecuentes:
MCU demasiado cargada — reduce
frame_rateen LED Effects (de 24 a 10 o menos)Tira conectada a pin de Raspberry Pi directamente sin usar LUMEN ni segunda MCU
Interferencias en el cable de señal — acorta el cable o añade el condensador
Solo se enciende el primer LED
Comprobaciones:
Verifica que
chain_countcoincide con el número real de LEDsEl sentido de la tira es incorrecto — invierte la conexión o usa otro punto de entrada
Alimentación insuficiente — a partir del LED 15-20 sin alimentación externa la señal se degrada
Los efectos de LED Effects no se activan
Confirma que el plugin está instalado: en Mainsail → Sistema → Extensiones, debe aparecer
led_effectReinicia Klipper tras instalar el plugin
Verifica que los nombres de
[neopixel]en el[led_effect]coinciden exactamente con los definidos en el cfgSi usas
virtual_leds, la referencia en[led_effect]debe servirtual_leds:nombrenoneopixel:nombre
Última actualización