跳到主要内容

LED 警示灯配置

LED 警示灯(三色信号灯)用于直观显示打印机运行状态。本文介绍其接线方法和 Klipper 配置。

电压说明

LED 警示灯有多种输入电压规格,本文以 24V 版本为例进行说明,请根据实际使用的型号确认电压匹配。

接线说明

线缆颜色定义

颜色功能接线位置
灰色公共正极接入 24V 电源正极(如风扇供电的 24V)
红色红灯控制接入主板风扇控制信号引脚
绿色绿灯控制接入主板风扇控制信号引脚
黄色黄灯控制接入主板风扇控制信号引脚

控制极性

FLY 打印主板默认采用控制负极方式:

  • LED 警示灯的正极(灰色线)接 24V 电源
  • LED 警示灯的控制线(红/绿/黄)接主板 GPIO 引脚
  • 主板输出低电平时,对应颜色亮起
Loading...

Klipper 配置

[output_pin led_red]
pin: PD12 # 红灯控制引脚
pwm: False
value: 0 # 默认关闭
shutdown_value: 1 # Klipper 报错时自动亮起红灯

[output_pin led_green]
pin: PD13 # 绿灯控制引脚
pwm: False
value: 0

[output_pin led_yellow]
pin: PD14 # 黄灯控制引脚
pwm: False
value: 0
引脚说明

以上使用 PD12PD13PD14 作为示例引脚,请根据实际主板可用的 GPIO 进行修改。

红灯故障安全机制

红灯通过 shutdown_value: 1 实现故障安全:

  • 正常运行:红灯由宏控制,正常状态下保持关闭
  • 报错/断开:Klipper 进入 Shutdown 状态时,自动将红灯设为开启,无需任何宏参与
  • 这是一种硬件级的安全机制,即使宏逻辑出现问题,红灯也能正确指示故障

状态宏

[gcode_macro LED_STATUS]
description: 设置 LED 警示灯状态
gcode:
{% set STATUS = params.STATUS|default("idle")|lower %}

# 先关闭所有灯
SET_PIN PIN=led_red VALUE=0
SET_PIN PIN=led_green VALUE=0
SET_PIN PIN=led_yellow VALUE=0

# 根据状态设置灯光(低电平有效:VALUE=1 表示引脚输出低电平,灯亮)
{% 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 %}

状态说明

状态参数灯光效果使用场景
printing绿+黄灯亮正在打印中
ready绿灯亮Klipper 已连接,打印机就绪
warning黄灯亮警告状态(如温度异常但未报错)
error红灯亮发生错误,需要处理
idle全灭空闲状态(默认)

调用示例:LED_STATUS STATUS=printing

打印宏集成

在打印开始和结束宏中添加 LED 控制,实现状态自动切换。

打印开始宏

[gcode_macro PRINT_START]
description: 打印开始宏
gcode:
# ... 其他开始逻辑 ...

# 设置 LED 为打印中状态
LED_STATUS STATUS=printing

# ... 加热、归位等操作 ...

打印结束宏

[gcode_macro PRINT_END]
description: 打印结束宏
gcode:
# ... 其他结束逻辑 ...

# 设置 LED 为空闲状态
LED_STATUS STATUS=idle

自动状态检测(可选)

如需自动检测 Klipper 状态而无需修改打印宏,可使用以下配置。

# 状态变量宏(用于记录上次状态,避免重复刷新导致闪烁)
[gcode_macro _LED_STATE]
variable_last_status: "unknown"
gcode:
# 此宏仅存储变量,无需执行任何操作

# 自动状态检测
[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" %}

# 判断当前状态
{% if printing == "PRINTING" or printing == "PAUSED" %}
{% set current = "printing" %}
{% elif idle == "READY" or idle == "IDLE" %}
{% set current = "ready" %}
{% endif %}

# 只在状态变化时更新 LED,避免闪烁
{% 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 %}

# 继续轮询
UPDATE_DELAYED_GCODE ID=LED_AUTO_UPDATE DURATION=1

状态判断逻辑

Klipper 状态判断条件LED 效果
打印中print_stats.state = printing/paused绿+黄灯亮
已连接idle_timeout.state = ready/idle绿灯亮
报错Klipper 进入 Shutdown红灯亮(由 shutdown_value 自动处理)
其他未检测到上述状态全灭

工作原理

  1. _LED_STATE 宏存储上次状态,用于比较
  2. LED_AUTO_UPDATE 每秒检测 Klipper 状态
  3. 仅当状态变化时调用 LED_STATUS 更新灯光,避免闪烁
  4. 当 Klipper 报错进入 Shutdown 时,shutdown_value 自动接管红灯
Loading...