> For the complete documentation index, see [llms.txt](https://marlin.3dwork.io/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://marlin.3dwork.io/marlin/configuracion-marlin/leds-neopixel.md).

# Leds Neopixel

Añadir una tira LED Neopixel va mucho más allá de la estética: puedes iluminar el área de impresión para supervisarla, mostrar el estado del proceso mediante colores y controlar los LEDs desde los scripts gcode de tu laminador.

{% hint style="info" %}
Pásate por nuestro [grupo Telegram 3Dwork en español](https://t.me/trastornados) para cualquier duda sobre configuración de tu impresora.
{% endhint %}

## Tipos de LED compatibles

Marlin soporta los tipos de LED más comunes. Elige el tuyo para saber qué valor usar en `NEOPIXEL_TYPE`:

| Tipo físico      | Constante Marlin | Canales | Descripción                                   |
| ---------------- | ---------------- | ------- | --------------------------------------------- |
| WS2812 / WS2812B | `NEO_GRB`        | RGB     | El más común. 5V, protocolo de 1 hilo.        |
| SK6812 (RGBW)    | `NEO_GRBW`       | RGBW    | Como WS2812 pero con canal blanco adicional.  |
| WS2811           | `NEO_RGB`        | RGB     | Similar a WS2812, orden de canales diferente. |
| APA102 / DotStar | `NEO_GRB`        | RGB     | 2 hilos (data + clock), más rápido.           |
| WS2801           | `NEO_RGB`        | RGB     | 2 hilos, protocolo SPI.                       |

## Dónde conseguir tiras LED Neopixel

{% tabs %}
{% tab title="WS2812B 5V — BTF-LIGHTING (recomendada)" %}
{% embed url="<https://s.click.aliexpress.com/e/182731559?productUrl=https://www.aliexpress.com/item/2036819167.html>" %}
{% endtab %}
{% endtabs %}

{% hint style="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.
{% endhint %}

{% hint style="warning" %}
**Voltaje**: La mayoría de tiras para impresoras 3D son de **5V**. Alimentar una tira de 5V con 12V la destruirá. Comprueba el voltaje de tu tira antes de conectarla.

Si usas muchos LEDs (>30) o tiras de 12V, usa una **fuente de alimentación externa** en lugar del conector de la placa, ya que los conectores de las placas tienen una corriente limitada.
{% endhint %}

## Cableado

Las tiras Neopixel tienen 3 conexiones: **VCC** (voltaje), **GND** (masa) y **DIN/DATA** (señal).

Las tiras tienen una dirección marcada con una flecha en la serigrafía — el cable DIN va al inicio de la tira, no al fin. Además pueden cortarse por las marcas designadas para ajustarse a la longitud necesaria.

**Cable recomendado para la señal**: 26 AWG. Para alimentación de tiras largas, usa cable más grueso (22-24 AWG).

### Conectores dedicados en placas comunes

| Placa                 | Conector Neopixel         | Pin     |
| --------------------- | ------------------------- | ------- |
| BTT SKR 1.4 / Turbo   | Puerto Neopixel dedicado  | `P1_24` |
| BTT SKR PRO           | Puerto Neopixel dedicado  | `PE6`   |
| BTT Octopus           | Puerto RGB dedicado       | `PB0`   |
| BTT Manta M8P         | Puerto RGB dedicado       | `PB0`   |
| BTT SKR Mini E3 v2/v3 | Puerto Neopixel           | `PC7`   |
| BTT SKR 1.3           | Puerto SERVO (compatible) | `P2_00` |

{% hint style="info" %}
Si tu placa no tiene conector dedicado, el **puerto SERVO** es compatible con la señal Neopixel. Verifica el archivo `pins_[TU_PLACA].h` en el código de Marlin para confirmar el número de pin.
{% endhint %}

## Configuración en Marlin

### configuration.h — Habilitar Neopixel

Busca y descomenta `NEOPIXEL_LED` en `configuration.h`:

```cpp
#define NEOPIXEL_LED
#if ENABLED(NEOPIXEL_LED)
  #define NEOPIXEL_TYPE       NEO_GRB   // tipo de LED (ver tabla arriba)
  #define NEOPIXEL_PIN        P1_24     // pin de señal de tu placa
  //#define NEOPIXEL2_TYPE    NEOPIXEL_TYPE
  //#define NEOPIXEL2_PIN     5         // segunda tira (opcional)
  #define NEOPIXEL_PIXELS     30        // número total de LEDs en la tira
  //#define NEOPIXEL_IS_SEQUENTIAL      // apagar LEDs en secuencia al finalizar
  #define NEOPIXEL_BRIGHTNESS 255       // brillo inicial (0-255)
  #define NEOPIXEL_STARTUP_TEST         // animar LEDs al arrancar para verificar
  //#define NEOPIXEL_BKGD_LED_INDEX  0  // LED de fondo para indicar estado
  //#define NEOPIXEL_BKGD_COLOR { 255, 255, 255, 0 } // color de fondo RGBW
#endif
```

**Parámetros más importantes:**

| Parámetro               | Descripción                                            |
| ----------------------- | ------------------------------------------------------ |
| `NEOPIXEL_TYPE`         | Tipo de LED (ver tabla de tipos)                       |
| `NEOPIXEL_PIN`          | Pin de señal — ajustar al de tu placa                  |
| `NEOPIXEL_PIXELS`       | Número de LEDs en la tira                              |
| `NEOPIXEL_BRIGHTNESS`   | Brillo de 0 (apagado) a 255 (máximo)                   |
| `NEOPIXEL_STARTUP_TEST` | Cicla RGB al arrancar para verificar que todo funciona |

### configuration\_adv.h — Menú LCD y presets de color

Añade el menú de control de LEDs a la pantalla LCD:

```cpp
#define LED_CONTROL_MENU
#if ENABLED(LED_CONTROL_MENU)
  #define LED_COLOR_PRESETS               // presets de color en el menú
  #if ENABLED(LED_COLOR_PRESETS)
    #define LED_USER_PRESET_RED     255   // componente R del color personalizado
    #define LED_USER_PRESET_GREEN   255   // componente G
    #define LED_USER_PRESET_BLUE    255   // componente B
    #define LED_USER_PRESET_WHITE   255   // componente W (solo RGBW)
    #define LED_USER_PRESET_BRIGHTNESS 255
    #define LED_USER_PRESET_STARTUP     // aplicar preset al arrancar
  #endif
#endif
```

### Segunda tira Neopixel (NEOPIXEL2)

Para usar dos tiras independientes, descomenta las líneas de `NEOPIXEL2`:

```cpp
#define NEOPIXEL2_TYPE   NEO_GRB   // tipo de la segunda tira
#define NEOPIXEL2_PIN    5         // pin de señal de la segunda tira
```

Puedes usarlas independientemente con el gcode `M150 S0` (tira 1) y `M150 S1` (tira 2).

## Controlar los LEDs con G-code (M150)

El gcode `M150` permite controlar color, brillo e índice de cada LED desde el terminal o los scripts de tu laminador.

```
M150 [R<0-255>] [U<0-255>] [B<0-255>] [W<0-255>] [P<0-255>] [I<index>] [S<strip>]
```

| Parámetro | Descripción                                |
| --------- | ------------------------------------------ |
| `R`       | Canal Rojo (0-255)                         |
| `U`       | Canal Verde (0-255) — nota: es `U`, no `G` |
| `B`       | Canal Azul (0-255)                         |
| `W`       | Canal Blanco (0-255) — solo LEDs RGBW      |
| `P`       | Brillo global (0-255)                      |
| `I`       | Índice del LED específico (0 a N-1)        |
| `S`       | Seleccionar tira: 0 = primera, 1 = segunda |

**Ejemplos prácticos:**

```gcode
M150 R255 U0 B0         ; rojo — impresión en marcha
M150 R0 U255 B0         ; verde — impresión completada
M150 R0 U0 B255         ; azul — calentando
M150 R255 U128 B0       ; naranja — pausa / cambio filamento
M150 R255 U255 B255     ; blanco — iluminación máxima
M150 R0 U0 B0 P0        ; apagar todos los LEDs
M150 P128               ; reducir brillo al 50% sin cambiar color
M150 I5 R255 U0 B0      ; poner LED número 5 en rojo (solo ese)
```

## Uso en scripts del laminador

Puedes personalizar el comportamiento de los LEDs añadiendo `M150` a los scripts de tu laminador:

### Script de inicio (Start G-code)

```gcode
M150 R0 U0 B255         ; azul: calentando
M190 S[first_layer_bed_temperature]
M109 S[first_layer_temperature]
M150 R0 U255 B0         ; verde: listo para imprimir
G28
G29
```

### Script de fin (End G-code)

```gcode
M150 R0 U255 B0         ; verde: impresión completada
M104 S0                 ; apagar extrusor
M140 S0                 ; apagar cama
G28 X Y                 ; home X e Y
M84                     ; apagar motores
```

### Cambio de filamento (en PrusaSlicer/OrcaSlicer)

```gcode
M150 R255 U128 B0       ; naranja: cambio de filamento en curso
M600
M150 R0 U255 B0         ; verde: retomar impresión
```

## Resolución de problemas

| Síntoma                                       | Causa probable                              | Solución                                                                      |
| --------------------------------------------- | ------------------------------------------- | ----------------------------------------------------------------------------- |
| LEDs no encienden en absoluto                 | Pin incorrecto o sin alimentación           | Verificar `NEOPIXEL_PIN` en el archivo pins de tu placa y revisar el cableado |
| Solo enciende el primer LED                   | Problema de señal o nivel de voltaje        | Añadir resistencia 300-500Ω en el cable DATA; verificar tierra común          |
| Colores incorrectos (rojo aparece como verde) | Tipo de LED incorrecto                      | Cambiar `NEOPIXEL_TYPE`: prueba `NEO_RGB`, `NEO_GRB`, `NEO_BRG`               |
| LEDs parpadean o son inestables               | Alimentación insuficiente o ruidosa         | Añadir condensador 100-1000µF entre VCC y GND cerca del primer LED            |
| `NEOPIXEL_STARTUP_TEST` no funciona           | La animación está desactivada o pin erróneo | Verificar que `NEOPIXEL_STARTUP_TEST` está descomentado y recompilar          |
| Segunda tira no funciona                      | NEOPIXEL2 no configurado                    | Descomentar `NEOPIXEL2_PIN` y `NEOPIXEL2_TYPE` en configuration.h             |
| Los LEDs no responden a M150                  | `NEOPIXEL_LED` no compilado                 | Verificar que la opción está habilitada y el firmware recompilado/flasheado   |

{% hint style="warning" %}
Las tiras Neopixel consumen corriente. Una tira de 30 LEDs WS2812B a brillo máximo puede consumir \~1.8A. Antes de alimentar desde la placa, revisa cuánta corriente puede entregar el conector Neopixel de tu modelo específico. Para tiras largas o consumos altos, usa alimentación externa con GND compartida con la placa.
{% endhint %}
