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
引脚说明
以上使用 PD12、PD13、PD14 作为示例引脚,请根据实际主板可用的 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 自动处理) |
| 其他 | 未检测到上述状态 | 全灭 |
工作原理
_LED_STATE宏存储上次状态,用于比较LED_AUTO_UPDATE每秒检测 Klipper 状态- 仅当状态变化时调用
LED_STATUS更新灯光,避免闪烁 - 当 Klipper 报错进入 Shutdown 时,
shutdown_value自动接管红灯
Loading...