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.

circle-info

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

circle-info

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

triangle-exclamation

Tipos de LED y su color_order

Este 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.

circle-info

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.

circle-exclamation

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.

Pines LED en electrónicas BTT habituales

Electrónica
Conector
Pin Klipper

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

circle-exclamation

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

Parámetro
Descripción

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.

circle-info

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_effectarrow-up-right 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:

circle-check

Controlar los efectos

Estructura de [led_effect]

Parámetros de capa:

Parámetro
Descripción

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 pluginarrow-up-right.

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 repositorioarrow-up-right.

Configuración base para Stealthburner

Añadir el script al laminador

  1. Copia stealthburner_colors.py a tu ordenador (en una ruta sin espacios)

  2. Asegúrate de tener Python 3 instalado

  3. 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.

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?

WLED
LUMEN
RP2040 / Pi Pico

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

circle-info

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

WLEDarrow-up-right 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.

circle-check

Configurar presets en WLED

Antes de integrar con Klipper, define los presets en la app de WLED:

  1. Elige color y efecto desde la pantalla principal

  2. Pestaña Presets → crear nuevo preset. El ID del preset es el número que usarás en Klipper

  3. 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

LUMENarrow-up-right 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.

circle-check

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.

circle-exclamation

Estados automáticos de la impresora

LUMEN detecta 14 estados directamente desde Moonraker/Klipper sin necesidad de macros en PRINT_START/PRINT_END:

Estado
Cuándo se activa

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 RP2040

  • Bootloader offset: No bootloader

  • Communication 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.

circle-info

Arduino Nano como alternativa

Si tienes un Arduino Nano disponible también funciona. En make menuconfig selecciona Atmega AVRatmega328p. 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:

  1. Comprueba el modelo exacto de tu LED (WS2812B, SK6812, APA102...)

  2. Consulta la tabla de tipos más arriba y ajusta color_order

  3. Si 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_rate en 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:

  1. Verifica que chain_count coincide con el número real de LEDs

  2. El sentido de la tira es incorrecto — invierte la conexión o usa otro punto de entrada

  3. 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

  1. Confirma que el plugin está instalado: en Mainsail → Sistema → Extensiones, debe aparecer led_effect

  2. Reinicia Klipper tras instalar el plugin

  3. Verifica que los nombres de [neopixel] en el [led_effect] coinciden exactamente con los definidos en el cfg

  4. Si usas virtual_leds, la referencia en [led_effect] debe ser virtual_leds:nombre no neopixel:nombre

Última actualización