Skip to main content

LED Warning Light Configuration

The LED warning light (three-color signal light) is used to visually display the printer's operating status. This article introduces its wiring method and Klipper configuration.

Voltage Description

LED warning lights come in various input voltage specifications. This article uses the 24V version as an example; please verify voltage compatibility based on the actual model used.

Wiring Instructions

Cable Color Definition

ColorFunctionConnection Point
GrayCommon PositiveConnect to 24V power supply positive terminal (e.g., fan supply 24V)
RedRed Light ControlConnect to the mainboard fan control signal pin
GreenGreen Light ControlConnect to the mainboard fan control signal pin
YellowYellow Light ControlConnect to the mainboard fan control signal pin

Control Polarity

FLY printer mainboards use a negative-side control method by default:

  • The positive wire (gray) of the LED warning light connects to 24V power
  • The control wires (red/green/yellow) of the LED warning light connect to mainboard GPIO pins
  • When the mainboard outputs a low level, the corresponding color lights up
Loading...

Klipper Configuration

[output_pin led_red]
pin: <red_led_pin> # Red light control pin
pwm: False
value: 0 # Default off
shutdown_value: 1 # Automatically lights red when Klipper errors

[output_pin led_green]
pin: <green_led_pin> # Green light control pin
pwm: False
value: 0

[output_pin led_yellow]
pin: <yellow_led_pin> # Yellow light control pin
pwm: False
value: 0
Pin Description

Placeholders are used for control pins above; modify them according to the available GPIO pins on your specific mainboard.

Red Light Fail-Safe Mechanism

The red light achieves fail-safety through shutdown_value: 1:

  • Normal Operation: The red light is controlled by macros and remains off under normal conditions.
  • Error/Disconnection: When Klipper enters a Shutdown state, the red light is automatically turned on without requiring any macro intervention.
  • This is a hardware-level safety mechanism. Even if macro logic fails, the red light correctly indicates a fault.

Status Macros

[gcode_macro LED_STATUS]
description: Set LED warning light status
gcode:
{% set STATUS = params.STATUS|default("idle")|lower %}

# Turn off all lights first
SET_PIN PIN=led_red VALUE=0
SET_PIN PIN=led_green VALUE=0
SET_PIN PIN=led_yellow VALUE=0

# Set lights based on status (active low: VALUE=1 means pin outputs low level, light on)
{% if STATUS == "printing" %}
SET_PIN PIN=led_green VALUE=1
SET_PIN PIN=led_yellow VALUE=1
{% elif STATUS == "ready" %}
SET_PIN PIN=led_green VALUE=1
{% elif STATUS == "warning" %}
SET_PIN PIN=led_yellow VALUE=1
{% elif STATUS == "error" %}
SET_PIN PIN=led_red VALUE=1
{% endif %}

Status Description

Status ParameterLight EffectUsage Scenario
printingGreen + Yellow Light OnCurrently printing
readyGreen Light OnKlipper connected, printer ready
warningYellow Light OnWarning status (e.g., temperature anomaly without error)
errorRed Light OnError occurred, needs handling
idleAll OffIdle state (default)

Example call: LED_STATUS STATUS=printing

Automatic Status Detection (Optional)

To automatically detect Klipper status without modifying print macros, use the following configuration.

# Status variable macro (records last status to avoid flickering from repeated refreshes)
[gcode_macro _LED_STATE]
variable_last_status: "unknown"
gcode:
# This macro only stores variables, no action needed

# Automatic status detection
[delayed_gcode LED_AUTO_UPDATE]
initial_duration: 1
gcode:
{% set idle = printer.idle_timeout.state|string|upper %}
{% set printing = printer.print_stats.state|string|upper %}
{% set current = "unknown" %}

# Determine current status
{% if printing == "PRINTING" or printing == "PAUSED" %}
{% set current = "printing" %}
{% elif idle == "READY" or idle == "IDLE" %}
{% set current = "ready" %}
{% endif %}

# Update LED only when status changes, to avoid flickering
{% set last = printer["gcode_macro _LED_STATE"].last_status %}
{% if current != last %}
SET_GCODE_VARIABLE MACRO=_LED_STATE VARIABLE=last_status VALUE='"{current}"'
LED_STATUS STATUS={current}
{% endif %}

# Continue polling
UPDATE_DELAYED_GCODE ID=LED_AUTO_UPDATE DURATION=1

Status Determination Logic

Klipper StatusConditionLED Effect
Printingprint_stats.state = printing/pausedGreen + Yellow Light On
Connectedidle_timeout.state = ready/idleGreen Light On
ErrorKlipper enters ShutdownRed Light On (handled automatically by shutdown_value)
OtherStatus not detected aboveAll Off

How It Works

  1. The _LED_STATE macro stores the previous status for comparison.
  2. LED_AUTO_UPDATE checks the Klipper status every second.
  3. LED_STATUS is called only when the status changes, preventing flickering.
  4. When Klipper errors and enters Shutdown, shutdown_value automatically takes over the red light.
Loading...