devmaker.net
start/ 3d-druck/ klipper-status-leds-toolhead-neopixel-led-effect
3D Druck

Klipper Status-LEDs am Toolhead (Neopixel + led_effect)

Wenn der Drucker im Homelab steht, willst du auf einen Blick sehen, was er gerade macht – ohne erst aufs Webinterface zu schauen. Mit drei adressierbaren LEDs am Toolhead und dem Klipper-Plugin led_effect zeige ich genau das: Die Düsen-LEDs leuchten beim Druck weiß, atmen orange beim Heizen und cyan beim Homing, eine Status-LED schaltet von Grün (aktiv) auf Standby. Alles läuft bei mir über den RGB-Ausgang des EBB36 CAN-Toolboards und ist in die Druck-Makros eingehängt. Du brauchst Klipper-Grundlagen und ein paar Neopixel – am Ende erkennst du den Druckerzustand quer durch den Raum.

Harry_im_Homelab31 (Portrait)
Harald
2026-06-19 · ~6 Min. Lesezeit
Hevort Extruder 3
Worum es geht

Drei adressierbare LEDs am Toolhead zeigen den Druckerzustand an – ich nutze dafür das Klipper-Plugin led_effect und den RGB-Ausgang meines EBB36 CAN-Toolboards. Der Aufbau (Dragon Burner + Orbiter + Rapido) steht im Rapido-2F-Artikel.

Was die LEDs anzeigen sollen

Ich habe drei LEDs am Druckkopf: zwei als Düsenbeleuchtung (LED 1–2) und eine als Status-/Logo-LED (LED 3). Die Düsen-LEDs leuchten beim Druck weiß, atmen aber je nach Phase in einer Farbe – cyan beim Homing, orange beim Heizen. Die Status-LED ist grün, wenn aktiv gedruckt wird, und fällt danach in Standby. So sehe ich quer durch die Werkstatt, ob der Drucker heizt, druckt oder fertig ist – und habe nebenbei echtes Licht auf dem Bauteil.

Voraussetzungen

Du brauchst das Plugin klipper-led_effect von Julian Schill (am einfachsten über KIAUH installiert) – es ergänzt die Bausteine [led_effect], SET_LED_EFFECT und STOP_LED_EFFECTS. Dazu ein paar adressierbare LEDs (WS2812/Neopixel), die in vielen Toolhead-Shrouds wie dem Dragon Burner ohnehin vorgesehen sind, und einen freien RGB-Ausgung am Mainboard oder Toolboard. Bei mir hängen sie am EBB36 CAN-Toolboard – gesteuert wird der ganze Drucker von einem BTT Octopus.

Anzeige · Affiliate-Link – kaufst du darüber, erhalte ich ggf. eine Provision. Für dich ändert sich am Preis nichts.

Neopixel am CAN-Toolboard definieren

Zuerst die LEDs als [neopixel] anlegen. Der Pin ist der RGB-Ausgang des Toolboards (beim EBB36 PD3); über CAN wird er als toolboard0:PD3 angesprochen. Wichtig ist die color_order: stimmt sie nicht, sind Rot und Grün vertauscht – viele Günstig-LEDs sind GRB statt RGB.

ini
[neopixel leds_tool0]
pin: toolboard0:PD3        # RGB-Ausgang am EBB36 CAN-Toolboard
chain_count: 3            # 2x Duese + 1x Status/Logo
color_order: GRB          # falsche Reihenfolge -> Farben vertauscht
initial_RED: 0.0
initial_GREEN: 0.0
initial_BLUE: 0.0

Effekte mit led_effect definieren

Statt die LEDs hart zu schalten, definiere ich pro Zustand einen [led_effect]. Praktisch ist die LED-Auswahl pro Effekt: (3) spricht nur die Status-LED an, (1-2) nur die Düsen-LEDs. Als Ebenen-Typ nutze ich static (Dauerfarbe) und breathing (sanftes Pulsieren). Hier drei repräsentative Effekte:

ini
# LED 3 = Status/Logo, LEDs 1-2 = Duesenbeleuchtung
[led_effect activegreen_tool0]
leds:
    neopixel:leds_tool0 (3)
autostart: false
frame_rate: 24
layers:
    static     0 0 top (0.0, 1.0, 0.0)   # gruen = aktiv

[led_effect nozzle_heating_tool0]
leds:
    neopixel:leds_tool0 (1-2)
autostart: false
frame_rate: 24
layers:
    breathing  3 1 top (1, 0.18, 0)      # orange atmend = heizt

[led_effect nozzle_homing_tool0]
leds:
    neopixel:leds_tool0 (1-2)
autostart: false
frame_rate: 24
layers:
    breathing  3 1 top (0.0, 0.8, 1.0)   # cyan atmend = homing

Status-Makros zum Umschalten

Damit ich die Effekte bequem aufrufen kann, packe ich sie in kleine status_*-Makros. Wichtig: vor dem Setzen eines neuen Effekts mit STOP_LED_EFFECTS aufräumen, sonst überlagern sich Effekte. So sieht der Aktiv- und Standby-Zustand aus:

ini
[gcode_macro status_active_tool0]
gcode:
  STOP_LED_EFFECTS LEDS="neopixel:leds_tool0"
  SET_LED_EFFECT EFFECT=activegreen_tool0 RESTART=1   # Status gruen
  SET_LED_EFFECT EFFECT=activeon_tool0 RESTART=1      # Duese weiss

[gcode_macro status_standby_tool0]
gcode:
  STOP_LED_EFFECTS LEDS="neopixel:leds_tool0"
  SET_LED_EFFECT EFFECT=standbybreathing_tool0 RESTART=1

In den Druckablauf einhängen

Der eigentliche Trick: die Makros an den richtigen Stellen im Druckablauf aufrufen. Am Anfang von START_PRINT während Homing/Z-Tilt/Mesh den Homing-Status, kurz vor dem ersten Layer den Aktiv-Status; in END_PRINT zurück auf Standby:

ini
[gcode_macro START_PRINT]
gcode:
    status_homing_tool0        # cyan atmen waehrend Homing/Z-Tilt/Mesh
    G28
    Z_TILT_ADJUST
    BED_MESH_CALIBRATE
    # ... heizen, intro line ...
    status_active_tool0        # weiss + gruen = Druck laeuft

[gcode_macro END_PRINT]
gcode:
    # ... abkuehlen, parken ...
    status_standby_tool0       # zurueck auf Standby

Was ich weggelassen habe

  • Name-/Farb-Reste: In meiner Config heißt ein Effekt standbyyellow_tool0, ist real aber auf Rot gesetzt – solche Copy-Paste-Überbleibsel aus fremden Profilen sind normal, einfach die RGB-Werte prüfen.
  • Fortschrittsbalken: Es gibt auch das Plugin klipper-neopixel (digitalninja) mit NEOPIXEL_DISPLAY für echte Prozent-Balken – das braucht aber einen längeren LED-Streifen; für drei LEDs am Toolhead ist led_effect die bessere Wahl.
  • Strombudget: Drei LEDs sind unkritisch; lange Streifen ziehen ordentlich 5 V – dann nicht blind ans Toolboard hängen.
  • color_order testen: kann je nach LED-Charge zwischen GRB und RGB schwanken.

Fazit

Kleiner Aufwand, großer Alltagsnutzen: Du siehst den Druckerzustand auf einen Blick und hast gleichzeitig echtes Licht auf dem Bauteil. led_effect ist flexibel – Effekte einmal definieren, in die status_*-Makros packen, an den Druckablauf hängen, fertig. Wer mag, baut später Fehler-/Pause-Zustände (z. B. rotes Blinken bei M600) genauso dazu.

klipperneopixelled_effect3d-druckcan-toolboardstatus-led

// verwandte beiträge

> echo "your thoughts" >> klipper-status-leds-toolhead-neopixel-led-effect.responses

Schreibe einen Kommentar

Wird für die Bestätigung benötigt