Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- Args: ['/home/pi/klipper/klippy/klippy.py', '/home/pi/printer_data/config/printer.cfg', '-l', '/home/pi/printer_data/logs/klippy.log', '-I', '/home/pi/printer_data/comms/klippy.serial', '-a', '/home/pi/printer_data/comms/klippy.sock']
- Git version: 'v0.13.0-320-gc80324946'
- Branch: master
- Remote: origin
- Tracked URL: https://github.com/Klipper3d/klipper.git
- CPU: 4 core ?
- Device: Raspberry Pi 3 Model B Rev 1.2
- Linux: Linux version 6.12.47+rpt-rpi-v8 ([email protected]) (aarch64-linux-gnu-gcc-12 (Debian 12.2.0-14+deb12u1) 12.2.0, GNU ld (GNU Binutils for Debian) 2.40) #1 SMP PREEMPT Debian 1:6.12.47-1+rpt1~bookworm (2025-09-16)
- Python: '3.11.2 (main, Apr 28 2025, 14:11:48) [GCC 12.2.0]'
- =============== Log rollover at Tue Nov 18 18:32:14 2025 ===============
- Args: ['/home/pi/klipper/klippy/klippy.py', '/home/pi/printer_data/config/printer.cfg', '-l', '/home/pi/printer_data/logs/klippy.log', '-I', '/home/pi/printer_data/comms/klippy.serial', '-a', '/home/pi/printer_data/comms/klippy.sock']
- Git version: 'v0.13.0-320-gc80324946'
- Branch: master
- Remote: origin
- Tracked URL: https://github.com/Klipper3d/klipper.git
- CPU: 4 core ?
- Device: Raspberry Pi 3 Model B Rev 1.2
- Linux: Linux version 6.12.47+rpt-rpi-v8 ([email protected]) (aarch64-linux-gnu-gcc-12 (Debian 12.2.0-14+deb12u1) 12.2.0, GNU ld (GNU Binutils for Debian) 2.40) #1 SMP PREEMPT Debian 1:6.12.47-1+rpt1~bookworm (2025-09-16)
- Python: '3.11.2 (main, Apr 28 2025, 14:11:48) [GCC 12.2.0]'
- Building C code module c_helper.so
- Start printer at Tue Nov 18 18:33:05 2025 (1763490785.9 111.9)
- Unable to open config file /home/pi/printer_data/config/printer.cfg
- Traceback (most recent call last):
- File "/home/pi/klipper/klippy/configfile.py", line 150, in read_config_file
- f = open(filename, 'r')
- ^^^^^^^^^^^^^^^^^^^
- FileNotFoundError: [Errno 2] No such file or directory: '/home/pi/printer_data/config/printer.cfg'
- Config error
- Traceback (most recent call last):
- File "/home/pi/klipper/klippy/configfile.py", line 150, in read_config_file
- f = open(filename, 'r')
- ^^^^^^^^^^^^^^^^^^^
- FileNotFoundError: [Errno 2] No such file or directory: '/home/pi/printer_data/config/printer.cfg'
- During handling of the above exception, another exception occurred:
- Traceback (most recent call last):
- File "/home/pi/klipper/klippy/klippy.py", line 130, in _connect
- self._read_config()
- File "/home/pi/klipper/klippy/klippy.py", line 116, in _read_config
- config = pconfig.read_main_config()
- ^^^^^^^^^^^^^^^^^^^^^^^^^^
- File "/home/pi/klipper/klippy/configfile.py", line 483, in read_main_config
- fileconfig, autosave_fileconfig = self.autosave.load_main_config()
- ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
- File "/home/pi/klipper/klippy/configfile.py", line 304, in load_main_config
- data = cfgrdr.read_config_file(filename)
- ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
- File "/home/pi/klipper/klippy/configfile.py", line 156, in read_config_file
- raise error(msg)
- configparser.Error: Unable to open config file /home/pi/printer_data/config/printer.cfg
- webhooks client 547695440144: New connection
- webhooks client 547695440144: Client info {'program': 'Moonraker', 'version': 'v0.9.3-120-g5836eab'}
- Starting Klippy...
- Args: ['/home/pi/klipper/klippy/klippy.py', '/home/pi/printer_data/config/printer.cfg', '-l', '/home/pi/printer_data/logs/klippy.log', '-I', '/home/pi/printer_data/comms/klippy.serial', '-a', '/home/pi/printer_data/comms/klippy.sock']
- Git version: 'v0.13.0-403-gb4c7cf4a3'
- Branch: master
- Remote: origin
- Tracked URL: https://github.com/Klipper3d/klipper.git
- CPU: 4 core ?
- Device: Raspberry Pi 3 Model B Rev 1.2
- Linux: Linux version 6.12.47+rpt-rpi-v8 ([email protected]) (aarch64-linux-gnu-gcc-12 (Debian 12.2.0-14+deb12u1) 12.2.0, GNU ld (GNU Binutils for Debian) 2.40) #1 SMP PREEMPT Debian 1:6.12.47-1+rpt1~bookworm (2025-09-16)
- Python: '3.11.2 (main, Apr 28 2025, 14:11:48) [GCC 12.2.0]'
- Building C code module c_helper.so
- Start printer at Tue Nov 18 18:34:39 2025 (1763490879.1 205.0)
- Unable to open config file /home/pi/printer_data/config/printer.cfg
- Traceback (most recent call last):
- File "/home/pi/klipper/klippy/configfile.py", line 150, in read_config_file
- f = open(filename, 'r')
- ^^^^^^^^^^^^^^^^^^^
- FileNotFoundError: [Errno 2] No such file or directory: '/home/pi/printer_data/config/printer.cfg'
- Config error
- Traceback (most recent call last):
- File "/home/pi/klipper/klippy/configfile.py", line 150, in read_config_file
- f = open(filename, 'r')
- ^^^^^^^^^^^^^^^^^^^
- FileNotFoundError: [Errno 2] No such file or directory: '/home/pi/printer_data/config/printer.cfg'
- During handling of the above exception, another exception occurred:
- Traceback (most recent call last):
- File "/home/pi/klipper/klippy/klippy.py", line 130, in _connect
- self._read_config()
- File "/home/pi/klipper/klippy/klippy.py", line 116, in _read_config
- config = pconfig.read_main_config()
- ^^^^^^^^^^^^^^^^^^^^^^^^^^
- File "/home/pi/klipper/klippy/configfile.py", line 483, in read_main_config
- fileconfig, autosave_fileconfig = self.autosave.load_main_config()
- ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
- File "/home/pi/klipper/klippy/configfile.py", line 304, in load_main_config
- data = cfgrdr.read_config_file(filename)
- ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
- File "/home/pi/klipper/klippy/configfile.py", line 156, in read_config_file
- raise error(msg)
- configparser.Error: Unable to open config file /home/pi/printer_data/config/printer.cfg
- webhooks client 548004477328: New connection
- webhooks client 548004477328: Client info {'program': 'Moonraker', 'version': 'v0.9.3-125-g3129d89'}
- webhooks client 548004477328: Disconnected
- Restarting printer
- Start printer at Tue Nov 18 19:00:33 2025 (1763492433.4 1759.4)
- ===== Config file =====
- [virtual_sdcard]
- path = /home/klipper/printer_data/gcodes/
- on_error_gcode = CANCEL_PRINT
- [pause_resume]
- [display_status]
- [respond]
- [gcode_macro CANCEL_PRINT]
- description = Cancel the actual running print
- rename_existing = CANCEL_PRINT_BASE
- gcode =
- {% set client = printer['gcode_macro _CLIENT_VARIABLE']|default({}) %}
- {% set allow_park = client.park_at_cancel|default(false)|lower == 'true' %}
- {% set retract = client.cancel_retract|default(5.0)|abs %}
- {% set park_x = "" if (client.park_at_cancel_x|default(none) is none)
- else "X=" ~ client.park_at_cancel_x %}
- {% set park_y = "" if (client.park_at_cancel_y|default(none) is none)
- else "Y=" ~ client.park_at_cancel_y %}
- {% set custom_park = park_x|length > 0 or park_y|length > 0 %}
- {% if printer['gcode_macro RESUME'].restore_idle_timeout > 0 %}
- SET_IDLE_TIMEOUT TIMEOUT={printer['gcode_macro RESUME'].restore_idle_timeout}
- {% endif %}
- {% if (custom_park or not printer.pause_resume.is_paused) and allow_park %} _TOOLHEAD_PARK_PAUSE_CANCEL {park_x} {park_y} {% endif %}
- _CLIENT_RETRACT LENGTH={retract}
- TURN_OFF_HEATERS
- M106 S0
- {client.user_cancel_macro|default("")}
- SET_GCODE_VARIABLE MACRO=RESUME VARIABLE=idle_state VALUE=False
- SET_PAUSE_NEXT_LAYER ENABLE=0
- SET_PAUSE_AT_LAYER ENABLE=0 LAYER=0
- CANCEL_PRINT_BASE
- [gcode_macro PAUSE]
- description = Pause the actual running print
- rename_existing = PAUSE_BASE
- gcode =
- {% set client = printer['gcode_macro _CLIENT_VARIABLE']|default({}) %}
- {% set idle_timeout = client.idle_timeout|default(0) %}
- {% set temp = printer[printer.toolhead.extruder].target if printer.toolhead.extruder != '' else 0 %}
- {% set restore = False if printer.toolhead.extruder == ''
- else True if params.RESTORE|default(1)|int == 1 else False %}
- SET_GCODE_VARIABLE MACRO=RESUME VARIABLE=last_extruder_temp VALUE="{{'restore': restore, 'temp': temp}}"
- {% if idle_timeout > 0 %}
- SET_GCODE_VARIABLE MACRO=RESUME VARIABLE=restore_idle_timeout VALUE={printer.configfile.settings.idle_timeout.timeout}
- SET_IDLE_TIMEOUT TIMEOUT={idle_timeout}
- {% endif %}
- PAUSE_BASE
- {client.user_pause_macro|default("")}
- _TOOLHEAD_PARK_PAUSE_CANCEL {rawparams}
- [gcode_macro RESUME]
- description = Resume the actual running print
- rename_existing = RESUME_BASE
- variable_last_extruder_temp = {'restore': False, 'temp': 0}
- variable_restore_idle_timeout = 0
- variable_idle_state = False
- gcode =
- {% set client = printer['gcode_macro _CLIENT_VARIABLE']|default({}) %}
- {% set velocity = printer.configfile.settings.pause_resume.recover_velocity %}
- {% set sp_move = client.speed_move|default(velocity) %}
- {% set runout_resume = True if client.runout_sensor|default("") == ""
- else True if not printer[client.runout_sensor].enabled
- else printer[client.runout_sensor].filament_detected %}
- {% set can_extrude = True if printer.toolhead.extruder == ''
- else printer[printer.toolhead.extruder].can_extrude %}
- {% set do_resume = False %}
- {% set prompt_txt = [] %}
- {% if printer.idle_timeout.state|upper == "IDLE" or idle_state %}
- SET_GCODE_VARIABLE MACRO=RESUME VARIABLE=idle_state VALUE=False
- {% if last_extruder_temp.restore %}
- RESPOND TYPE=echo MSG='{"Restoring \"%s\" temperature to %3.1f\u00B0C, this may take some time" % (printer.toolhead.extruder, last_extruder_temp.temp) }'
- M109 S{last_extruder_temp.temp}
- {% set do_resume = True %}
- {% elif can_extrude %}
- {% set do_resume = True %}
- {% else %}
- RESPOND TYPE=error MSG='{"Resume aborted !!! \"%s\" not hot enough, please heat up again and press RESUME" % printer.toolhead.extruder}'
- {% set _d = prompt_txt.append("\"%s\" not hot enough, please heat up again and press RESUME" % printer.toolhead.extruder) %}
- {% endif %}
- {% elif can_extrude %}
- {% set do_resume = True %}
- {% else %}
- RESPOND TYPE=error MSG='{"Resume aborted !!! \"%s\" not hot enough, please heat up again and press RESUME" % printer.toolhead.extruder}'
- {% set _d = prompt_txt.append("\"%s\" not hot enough, please heat up again and press RESUME" % printer.toolhead.extruder) %}
- {% endif %}
- {% if runout_resume %}
- {% if do_resume %}
- {% if restore_idle_timeout > 0 %} SET_IDLE_TIMEOUT TIMEOUT={restore_idle_timeout} {% endif %}
- {client.user_resume_macro|default("")}
- _CLIENT_EXTRUDE
- RESUME_BASE VELOCITY={params.VELOCITY|default(sp_move)}
- {% endif %}
- {% else %}
- RESPOND TYPE=error MSG='{"Resume aborted !!! \"%s\" detects no filament, please load filament and press RESUME" % (client.runout_sensor.split(" "))[1]}'
- {% set _d = prompt_txt.append("\"%s\" detects no filament, please load filament and press RESUME" % (client.runout_sensor.split(" "))[1]) %}
- {% endif %}
- {% if not (runout_resume and do_resume) %}
- RESPOND TYPE=command MSG="action:prompt_begin RESUME aborted !!!"
- {% for element in prompt_txt %}
- RESPOND TYPE=command MSG='{"action:prompt_text %s" % element}'
- {% endfor %}
- RESPOND TYPE=command MSG="action:prompt_footer_button Ok|RESPOND TYPE=command MSG=action:prompt_end|info"
- RESPOND TYPE=command MSG="action:prompt_show"
- {% endif %}
- [gcode_macro SET_PAUSE_NEXT_LAYER]
- description = Enable a pause if the next layer is reached
- gcode =
- {% set pause_next_layer = printer['gcode_macro SET_PRINT_STATS_INFO'].pause_next_layer %}
- {% set ENABLE = params.ENABLE|default(1)|int != 0 %}
- {% set MACRO = params.MACRO|default(pause_next_layer.call, True) %}
- SET_GCODE_VARIABLE MACRO=SET_PRINT_STATS_INFO VARIABLE=pause_next_layer VALUE="{{ 'enable': ENABLE, 'call': MACRO }}"
- [gcode_macro SET_PAUSE_AT_LAYER]
- description = Enable/disable a pause if a given layer number is reached
- gcode =
- {% set pause_at_layer = printer['gcode_macro SET_PRINT_STATS_INFO'].pause_at_layer %}
- {% set ENABLE = params.ENABLE|int != 0 if params.ENABLE is defined
- else params.LAYER is defined %}
- {% set LAYER = params.LAYER|default(pause_at_layer.layer)|int %}
- {% set MACRO = params.MACRO|default(pause_at_layer.call, True) %}
- SET_GCODE_VARIABLE MACRO=SET_PRINT_STATS_INFO VARIABLE=pause_at_layer VALUE="{{ 'enable': ENABLE, 'layer': LAYER, 'call': MACRO }}"
- [gcode_macro SET_PRINT_STATS_INFO]
- rename_existing = SET_PRINT_STATS_INFO_BASE
- description = Overwrite, to get pause_next_layer and pause_at_layer feature
- variable_pause_next_layer = { 'enable': False, 'call': "PAUSE" }
- variable_pause_at_layer = { 'enable': False, 'layer': 0, 'call': "PAUSE" }
- gcode =
- {% if pause_next_layer.enable %}
- RESPOND TYPE=echo MSG='{"%s, forced by pause_next_layer" % pause_next_layer.call}'
- {pause_next_layer.call}
- SET_PAUSE_NEXT_LAYER ENABLE=0
- {% elif pause_at_layer.enable and params.CURRENT_LAYER is defined and params.CURRENT_LAYER|int == pause_at_layer.layer %}
- RESPOND TYPE=echo MSG='{"%s, forced by pause_at_layer [%d]" % (pause_at_layer.call, pause_at_layer.layer)}'
- {pause_at_layer.call}
- SET_PAUSE_AT_LAYER ENABLE=0
- {% endif %}
- SET_PRINT_STATS_INFO_BASE {rawparams}
- [gcode_macro _TOOLHEAD_PARK_PAUSE_CANCEL]
- description = Helper: park toolhead used in PAUSE and CANCEL_PRINT
- gcode =
- {% set client = printer['gcode_macro _CLIENT_VARIABLE']|default({}) %}
- {% set velocity = printer.configfile.settings.pause_resume.recover_velocity %}
- {% set use_custom = client.use_custom_pos|default(false)|lower == 'true' %}
- {% set custom_park_x = client.custom_park_x|default(0.0) %}
- {% set custom_park_y = client.custom_park_y|default(0.0) %}
- {% set park_dz = client.custom_park_dz|default(2.0)|abs %}
- {% set sp_hop = client.speed_hop|default(15) * 60 %}
- {% set sp_move = client.speed_move|default(velocity) * 60 %}
- {% set origin = printer.gcode_move.homing_origin %}
- {% set act = printer.gcode_move.gcode_position %}
- {% set max = printer.toolhead.axis_maximum %}
- {% set cone = printer.toolhead.cone_start_z|default(max.z) %}
- {% set round_bed = True if printer.configfile.settings.printer.kinematics is in ['delta','polar','rotary_delta','winch']
- else False %}
- {% set z_min = params.Z_MIN|default(0)|float %}
- {% set z_park = [[(act.z + park_dz), z_min]|max, (max.z - origin.z)]|min %}
- {% set x_park = params.X if params.X is defined
- else custom_park_x if use_custom
- else 0.0 if round_bed
- else (max.x - 5.0) %}
- {% set y_park = params.Y if params.Y is defined
- else custom_park_y if use_custom
- else (max.y - 5.0) if round_bed and z_park < cone
- else 0.0 if round_bed
- else (max.y - 5.0) %}
- _CLIENT_RETRACT
- {% if "xyz" in printer.toolhead.homed_axes %}
- G90
- G1 Z{z_park} F{sp_hop}
- G1 X{x_park} Y{y_park} F{sp_move}
- {% if not printer.gcode_move.absolute_coordinates %} G91 {% endif %}
- {% else %}
- RESPOND TYPE=echo MSG='Printer not homed'
- {% endif %}
- [gcode_macro _CLIENT_EXTRUDE]
- description = Extrudes, if the extruder is hot enough
- gcode =
- {% set client = printer['gcode_macro _CLIENT_VARIABLE']|default({}) %}
- {% set use_fw_retract = (client.use_fw_retract|default(false)|lower == 'true') and (printer.firmware_retraction is defined) %}
- {% set length = params.LENGTH|default(client.unretract)|default(1.0)|float %}
- {% set speed = params.SPEED|default(client.speed_unretract)|default(35) %}
- {% set absolute_extrude = printer.gcode_move.absolute_extrude %}
- {% if printer.toolhead.extruder != '' %}
- {% if printer[printer.toolhead.extruder].can_extrude %}
- {% if use_fw_retract %}
- {% if length < 0 %}
- G10
- {% else %}
- G11
- {% endif %}
- {% else %}
- M83
- G1 E{length} F{(speed|float|abs) * 60}
- {% if absolute_extrude %}
- M82
- {% endif %}
- {% endif %}
- {% else %}
- RESPOND TYPE=echo MSG='{"\"%s\" not hot enough" % printer.toolhead.extruder}'
- {% endif %}
- {% endif %}
- [gcode_macro _CLIENT_RETRACT]
- description = Retracts, if the extruder is hot enough
- gcode =
- {% set client = printer['gcode_macro _CLIENT_VARIABLE']|default({}) %}
- {% set length = params.LENGTH|default(client.retract)|default(1.0)|float %}
- {% set speed = params.SPEED|default(client.speed_retract)|default(35) %}
- _CLIENT_EXTRUDE LENGTH=-{length|float|abs} SPEED={speed|float|abs}
- [gcode_macro _CLIENT_LINEAR_MOVE]
- description = Linear move with save and restore of the gcode state
- gcode =
- {% set x_move = "X" ~ params.X if params.X is defined else "" %}
- {% set y_move = "Y" ~ params.Y if params.Y is defined else "" %}
- {% set z_move = "Z" ~ params.Z if params.Z is defined else "" %}
- {% set e_move = "E" ~ params.E if params.E is defined else "" %}
- {% set rate = "F" ~ params.F if params.F is defined else "" %}
- {% set ABSOLUTE = params.ABSOLUTE | default(0) | int != 0 %}
- {% set ABSOLUTE_E = params.ABSOLUTE_E | default(0) | int != 0 %}
- SAVE_GCODE_STATE NAME=_client_movement
- {% if x_move or y_move or z_move %}
- G9{ 0 if ABSOLUTE else 1 }
- {% endif %}
- {% if e_move %}
- M8{ 2 if ABSOLUTE_E else 3 }
- {% endif %}
- G1 { x_move } { y_move } { z_move } { e_move } { rate }
- RESTORE_GCODE_STATE NAME=_client_movement
- [stepper_x]
- step_pin = PD7
- dir_pin = !PC5
- enable_pin = !PD6
- microsteps = 16
- rotation_distance = 40
- endstop_pin = ^PC2
- position_endstop = 0
- position_max = 235
- homing_speed = 25
- [stepper_y]
- step_pin = PC6
- dir_pin = !PC7
- enable_pin = !PD6
- microsteps = 16
- rotation_distance = 40
- endstop_pin = ^PC3
- position_endstop = 0
- position_max = 235
- homing_speed = 25
- [stepper_z]
- step_pin = PB3
- dir_pin = PB2
- enable_pin = !PA5
- microsteps = 16
- rotation_distance = 8
- endstop_pin = probe:z_virtual_endstop
- position_min = -5
- position_max = 240
- [extruder]
- max_extrude_only_distance = 100.0
- step_pin = PB1
- dir_pin = !PB0
- enable_pin = !PD6
- microsteps = 16
- rotation_distance = 33.683
- nozzle_diameter = 0.400
- filament_diameter = 1.750
- heater_pin = PD5
- sensor_type = EPCOS 100K B57560G104F
- sensor_pin = PA7
- control = pid
- pid_kp = 29.211
- pid_ki = 10.819
- pid_kd = 19.717
- min_temp = 0
- max_temp = 300
- [heater_bed]
- heater_pin = PD4
- sensor_type = EPCOS 100K B57560G104F
- sensor_pin = PA6
- control = pid
- pid_kp = 73.853
- pid_ki = 1.901
- pid_kd = 717.301
- min_temp = 0
- max_temp = 130
- [fan]
- pin = PB4
- [mcu]
- serial = /dev/ttyUSB0
- baud = 115200
- [printer]
- kinematics = cartesian
- max_velocity = 500
- max_accel = 6000
- max_z_velocity = 5
- max_z_accel = 100
- [bed_screws]
- screw1 = 30.5, 37
- screw2 = 30.5, 207
- screw3 = 204.5, 207
- screw4 = 204.5, 37
- [display]
- lcd_type = st7920
- cs_pin = PA3
- sclk_pin = PA1
- sid_pin = PC1
- encoder_pins = ^PD2, ^PD3
- click_pin = ^!PC0
- [bltouch]
- sensor_pin = ^PC4
- control_pin = PA4
- x_offset = -45
- z_offset = 2.540
- speed = 10
- samples = 3
- probe_with_touch_mode = False
- samples_tolerance = 0.1
- sample_retract_dist = 5.0
- [safe_z_home]
- home_xy_position = 117, 117
- speed = 25
- z_hop = 5
- z_hop_speed = 10
- [bed_mesh]
- speed = 25
- horizontal_move_z = 5
- mesh_min = 47,56
- mesh_max = 190,210
- probe_count = 5,5
- =======================
- Extruder max_extrude_ratio=0.266081
- mcu 'mcu': Starting serial connect
- mcu 'mcu': Unable to open serial port: [Errno 2] could not open port /dev/ttyUSB0: [Errno 2] No such file or directory: '/dev/ttyUSB0'
- webhooks client 547981908368: New connection
- webhooks client 547981908368: Client info {'program': 'Moonraker', 'version': 'v0.9.3-125-g3129d89'}
- mcu 'mcu': Unable to open serial port: [Errno 2] could not open port /dev/ttyUSB0: [Errno 2] No such file or directory: '/dev/ttyUSB0'
- mcu 'mcu': Unable to open serial port: [Errno 2] could not open port /dev/ttyUSB0: [Errno 2] No such file or directory: '/dev/ttyUSB0'
- mcu 'mcu': Unable to open serial port: [Errno 2] could not open port /dev/ttyUSB0: [Errno 2] No such file or directory: '/dev/ttyUSB0'
- mcu 'mcu': Unable to open serial port: [Errno 2] could not open port /dev/ttyUSB0: [Errno 2] No such file or directory: '/dev/ttyUSB0'
- mcu 'mcu': Unable to open serial port: [Errno 2] could not open port /dev/ttyUSB0: [Errno 2] No such file or directory: '/dev/ttyUSB0'
- mcu 'mcu': Unable to open serial port: [Errno 2] could not open port /dev/ttyUSB0: [Errno 2] No such file or directory: '/dev/ttyUSB0'
- mcu 'mcu': Unable to open serial port: [Errno 2] could not open port /dev/ttyUSB0: [Errno 2] No such file or directory: '/dev/ttyUSB0'
- mcu 'mcu': Unable to open serial port: [Errno 2] could not open port /dev/ttyUSB0: [Errno 2] No such file or directory: '/dev/ttyUSB0'
- mcu 'mcu': Unable to open serial port: [Errno 2] could not open port /dev/ttyUSB0: [Errno 2] No such file or directory: '/dev/ttyUSB0'
- mcu 'mcu': Unable to open serial port: [Errno 2] could not open port /dev/ttyUSB0: [Errno 2] No such file or directory: '/dev/ttyUSB0'
- mcu 'mcu': Unable to open serial port: [Errno 2] could not open port /dev/ttyUSB0: [Errno 2] No such file or directory: '/dev/ttyUSB0'
- mcu 'mcu': Unable to open serial port: [Errno 2] could not open port /dev/ttyUSB0: [Errno 2] No such file or directory: '/dev/ttyUSB0'
- mcu 'mcu': Unable to open serial port: [Errno 2] could not open port /dev/ttyUSB0: [Errno 2] No such file or directory: '/dev/ttyUSB0'
- mcu 'mcu': Unable to open serial port: [Errno 2] could not open port /dev/ttyUSB0: [Errno 2] No such file or directory: '/dev/ttyUSB0'
- mcu 'mcu': Unable to open serial port: [Errno 2] could not open port /dev/ttyUSB0: [Errno 2] No such file or directory: '/dev/ttyUSB0'
- mcu 'mcu': Unable to open serial port: [Errno 2] could not open port /dev/ttyUSB0: [Errno 2] No such file or directory: '/dev/ttyUSB0'
- mcu 'mcu': Unable to open serial port: [Errno 2] could not open port /dev/ttyUSB0: [Errno 2] No such file or directory: '/dev/ttyUSB0'
- MCU error during connect
- Traceback (most recent call last):
- File "/home/pi/klipper/klippy/mcu.py", line 774, in _attach
- self._serial.connect_uart(self._serialport, self._baud, rts)
- File "/home/pi/klipper/klippy/serialhdl.py", line 191, in connect_uart
- self._error("Unable to connect")
- File "/home/pi/klipper/klippy/serialhdl.py", line 68, in _error
- raise error(self.warn_prefix + (msg % params))
- serialhdl.error: mcu 'mcu': Unable to connect
- During handling of the above exception, another exception occurred:
- Traceback (most recent call last):
- File "/home/pi/klipper/klippy/klippy.py", line 131, in _connect
- self.send_event("klippy:mcu_identify")
- File "/home/pi/klipper/klippy/klippy.py", line 227, in send_event
- return [cb(*params) for cb in self.event_handlers.get(event, [])]
- ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
- File "/home/pi/klipper/klippy/klippy.py", line 227, in <listcomp>
- return [cb(*params) for cb in self.event_handlers.get(event, [])]
- ^^^^^^^^^^^
- File "/home/pi/klipper/klippy/mcu.py", line 784, in _mcu_identify
- self._attach()
- File "/home/pi/klipper/klippy/mcu.py", line 779, in _attach
- raise error(str(e))
- mcu.error: mcu 'mcu': Unable to connect
- mcu 'mcu': Unable to connect
- Once the underlying issue is corrected, use the
- "FIRMWARE_RESTART" command to reset the firmware, reload the
- config, and restart the host software.
- Error configuring printer
- No build file /home/pi/klipper/klippy/../.config
- No build file /home/pi/klipper/klippy/../out/klipper.dict
- No build file /home/pi/klipper/klippy/../out/klipper.elf
- Starting Klippy...
- Args: ['/home/pi/klipper/klippy/klippy.py', '/home/pi/printer_data/config/printer.cfg', '-l', '/home/pi/printer_data/logs/klippy.log', '-I', '/home/pi/printer_data/comms/klippy.serial', '-a', '/home/pi/printer_data/comms/klippy.sock']
- Git version: 'v0.13.0-403-gb4c7cf4a3'
- Branch: master
- Remote: origin
- Tracked URL: https://github.com/Klipper3d/klipper.git
- CPU: 4 core ?
- Device: Raspberry Pi 3 Model B Rev 1.2
- Linux: Linux version 6.12.47+rpt-rpi-v8 ([email protected]) (aarch64-linux-gnu-gcc-12 (Debian 12.2.0-14+deb12u1) 12.2.0, GNU ld (GNU Binutils for Debian) 2.40) #1 SMP PREEMPT Debian 1:6.12.47-1+rpt1~bookworm (2025-09-16)
- Python: '3.11.2 (main, Apr 28 2025, 14:11:48) [GCC 12.2.0]'
- Start printer at Tue Nov 18 19:06:03 2025 (1763492763.5 26.9)
- ===== Config file =====
- [virtual_sdcard]
- path = /home/klipper/printer_data/gcodes/
- on_error_gcode = CANCEL_PRINT
- [pause_resume]
- [display_status]
- [respond]
- [gcode_macro CANCEL_PRINT]
- description = Cancel the actual running print
- rename_existing = CANCEL_PRINT_BASE
- gcode =
- {% set client = printer['gcode_macro _CLIENT_VARIABLE']|default({}) %}
- {% set allow_park = client.park_at_cancel|default(false)|lower == 'true' %}
- {% set retract = client.cancel_retract|default(5.0)|abs %}
- {% set park_x = "" if (client.park_at_cancel_x|default(none) is none)
- else "X=" ~ client.park_at_cancel_x %}
- {% set park_y = "" if (client.park_at_cancel_y|default(none) is none)
- else "Y=" ~ client.park_at_cancel_y %}
- {% set custom_park = park_x|length > 0 or park_y|length > 0 %}
- {% if printer['gcode_macro RESUME'].restore_idle_timeout > 0 %}
- SET_IDLE_TIMEOUT TIMEOUT={printer['gcode_macro RESUME'].restore_idle_timeout}
- {% endif %}
- {% if (custom_park or not printer.pause_resume.is_paused) and allow_park %} _TOOLHEAD_PARK_PAUSE_CANCEL {park_x} {park_y} {% endif %}
- _CLIENT_RETRACT LENGTH={retract}
- TURN_OFF_HEATERS
- M106 S0
- {client.user_cancel_macro|default("")}
- SET_GCODE_VARIABLE MACRO=RESUME VARIABLE=idle_state VALUE=False
- SET_PAUSE_NEXT_LAYER ENABLE=0
- SET_PAUSE_AT_LAYER ENABLE=0 LAYER=0
- CANCEL_PRINT_BASE
- [gcode_macro PAUSE]
- description = Pause the actual running print
- rename_existing = PAUSE_BASE
- gcode =
- {% set client = printer['gcode_macro _CLIENT_VARIABLE']|default({}) %}
- {% set idle_timeout = client.idle_timeout|default(0) %}
- {% set temp = printer[printer.toolhead.extruder].target if printer.toolhead.extruder != '' else 0 %}
- {% set restore = False if printer.toolhead.extruder == ''
- else True if params.RESTORE|default(1)|int == 1 else False %}
- SET_GCODE_VARIABLE MACRO=RESUME VARIABLE=last_extruder_temp VALUE="{{'restore': restore, 'temp': temp}}"
- {% if idle_timeout > 0 %}
- SET_GCODE_VARIABLE MACRO=RESUME VARIABLE=restore_idle_timeout VALUE={printer.configfile.settings.idle_timeout.timeout}
- SET_IDLE_TIMEOUT TIMEOUT={idle_timeout}
- {% endif %}
- PAUSE_BASE
- {client.user_pause_macro|default("")}
- _TOOLHEAD_PARK_PAUSE_CANCEL {rawparams}
- [gcode_macro RESUME]
- description = Resume the actual running print
- rename_existing = RESUME_BASE
- variable_last_extruder_temp = {'restore': False, 'temp': 0}
- variable_restore_idle_timeout = 0
- variable_idle_state = False
- gcode =
- {% set client = printer['gcode_macro _CLIENT_VARIABLE']|default({}) %}
- {% set velocity = printer.configfile.settings.pause_resume.recover_velocity %}
- {% set sp_move = client.speed_move|default(velocity) %}
- {% set runout_resume = True if client.runout_sensor|default("") == ""
- else True if not printer[client.runout_sensor].enabled
- else printer[client.runout_sensor].filament_detected %}
- {% set can_extrude = True if printer.toolhead.extruder == ''
- else printer[printer.toolhead.extruder].can_extrude %}
- {% set do_resume = False %}
- {% set prompt_txt = [] %}
- {% if printer.idle_timeout.state|upper == "IDLE" or idle_state %}
- SET_GCODE_VARIABLE MACRO=RESUME VARIABLE=idle_state VALUE=False
- {% if last_extruder_temp.restore %}
- RESPOND TYPE=echo MSG='{"Restoring \"%s\" temperature to %3.1f\u00B0C, this may take some time" % (printer.toolhead.extruder, last_extruder_temp.temp) }'
- M109 S{last_extruder_temp.temp}
- {% set do_resume = True %}
- {% elif can_extrude %}
- {% set do_resume = True %}
- {% else %}
- RESPOND TYPE=error MSG='{"Resume aborted !!! \"%s\" not hot enough, please heat up again and press RESUME" % printer.toolhead.extruder}'
- {% set _d = prompt_txt.append("\"%s\" not hot enough, please heat up again and press RESUME" % printer.toolhead.extruder) %}
- {% endif %}
- {% elif can_extrude %}
- {% set do_resume = True %}
- {% else %}
- RESPOND TYPE=error MSG='{"Resume aborted !!! \"%s\" not hot enough, please heat up again and press RESUME" % printer.toolhead.extruder}'
- {% set _d = prompt_txt.append("\"%s\" not hot enough, please heat up again and press RESUME" % printer.toolhead.extruder) %}
- {% endif %}
- {% if runout_resume %}
- {% if do_resume %}
- {% if restore_idle_timeout > 0 %} SET_IDLE_TIMEOUT TIMEOUT={restore_idle_timeout} {% endif %}
- {client.user_resume_macro|default("")}
- _CLIENT_EXTRUDE
- RESUME_BASE VELOCITY={params.VELOCITY|default(sp_move)}
- {% endif %}
- {% else %}
- RESPOND TYPE=error MSG='{"Resume aborted !!! \"%s\" detects no filament, please load filament and press RESUME" % (client.runout_sensor.split(" "))[1]}'
- {% set _d = prompt_txt.append("\"%s\" detects no filament, please load filament and press RESUME" % (client.runout_sensor.split(" "))[1]) %}
- {% endif %}
- {% if not (runout_resume and do_resume) %}
- RESPOND TYPE=command MSG="action:prompt_begin RESUME aborted !!!"
- {% for element in prompt_txt %}
- RESPOND TYPE=command MSG='{"action:prompt_text %s" % element}'
- {% endfor %}
- RESPOND TYPE=command MSG="action:prompt_footer_button Ok|RESPOND TYPE=command MSG=action:prompt_end|info"
- RESPOND TYPE=command MSG="action:prompt_show"
- {% endif %}
- [gcode_macro SET_PAUSE_NEXT_LAYER]
- description = Enable a pause if the next layer is reached
- gcode =
- {% set pause_next_layer = printer['gcode_macro SET_PRINT_STATS_INFO'].pause_next_layer %}
- {% set ENABLE = params.ENABLE|default(1)|int != 0 %}
- {% set MACRO = params.MACRO|default(pause_next_layer.call, True) %}
- SET_GCODE_VARIABLE MACRO=SET_PRINT_STATS_INFO VARIABLE=pause_next_layer VALUE="{{ 'enable': ENABLE, 'call': MACRO }}"
- [gcode_macro SET_PAUSE_AT_LAYER]
- description = Enable/disable a pause if a given layer number is reached
- gcode =
- {% set pause_at_layer = printer['gcode_macro SET_PRINT_STATS_INFO'].pause_at_layer %}
- {% set ENABLE = params.ENABLE|int != 0 if params.ENABLE is defined
- else params.LAYER is defined %}
- {% set LAYER = params.LAYER|default(pause_at_layer.layer)|int %}
- {% set MACRO = params.MACRO|default(pause_at_layer.call, True) %}
- SET_GCODE_VARIABLE MACRO=SET_PRINT_STATS_INFO VARIABLE=pause_at_layer VALUE="{{ 'enable': ENABLE, 'layer': LAYER, 'call': MACRO }}"
- [gcode_macro SET_PRINT_STATS_INFO]
- rename_existing = SET_PRINT_STATS_INFO_BASE
- description = Overwrite, to get pause_next_layer and pause_at_layer feature
- variable_pause_next_layer = { 'enable': False, 'call': "PAUSE" }
- variable_pause_at_layer = { 'enable': False, 'layer': 0, 'call': "PAUSE" }
- gcode =
- {% if pause_next_layer.enable %}
- RESPOND TYPE=echo MSG='{"%s, forced by pause_next_layer" % pause_next_layer.call}'
- {pause_next_layer.call}
- SET_PAUSE_NEXT_LAYER ENABLE=0
- {% elif pause_at_layer.enable and params.CURRENT_LAYER is defined and params.CURRENT_LAYER|int == pause_at_layer.layer %}
- RESPOND TYPE=echo MSG='{"%s, forced by pause_at_layer [%d]" % (pause_at_layer.call, pause_at_layer.layer)}'
- {pause_at_layer.call}
- SET_PAUSE_AT_LAYER ENABLE=0
- {% endif %}
- SET_PRINT_STATS_INFO_BASE {rawparams}
- [gcode_macro _TOOLHEAD_PARK_PAUSE_CANCEL]
- description = Helper: park toolhead used in PAUSE and CANCEL_PRINT
- gcode =
- {% set client = printer['gcode_macro _CLIENT_VARIABLE']|default({}) %}
- {% set velocity = printer.configfile.settings.pause_resume.recover_velocity %}
- {% set use_custom = client.use_custom_pos|default(false)|lower == 'true' %}
- {% set custom_park_x = client.custom_park_x|default(0.0) %}
- {% set custom_park_y = client.custom_park_y|default(0.0) %}
- {% set park_dz = client.custom_park_dz|default(2.0)|abs %}
- {% set sp_hop = client.speed_hop|default(15) * 60 %}
- {% set sp_move = client.speed_move|default(velocity) * 60 %}
- {% set origin = printer.gcode_move.homing_origin %}
- {% set act = printer.gcode_move.gcode_position %}
- {% set max = printer.toolhead.axis_maximum %}
- {% set cone = printer.toolhead.cone_start_z|default(max.z) %}
- {% set round_bed = True if printer.configfile.settings.printer.kinematics is in ['delta','polar','rotary_delta','winch']
- else False %}
- {% set z_min = params.Z_MIN|default(0)|float %}
- {% set z_park = [[(act.z + park_dz), z_min]|max, (max.z - origin.z)]|min %}
- {% set x_park = params.X if params.X is defined
- else custom_park_x if use_custom
- else 0.0 if round_bed
- else (max.x - 5.0) %}
- {% set y_park = params.Y if params.Y is defined
- else custom_park_y if use_custom
- else (max.y - 5.0) if round_bed and z_park < cone
- else 0.0 if round_bed
- else (max.y - 5.0) %}
- _CLIENT_RETRACT
- {% if "xyz" in printer.toolhead.homed_axes %}
- G90
- G1 Z{z_park} F{sp_hop}
- G1 X{x_park} Y{y_park} F{sp_move}
- {% if not printer.gcode_move.absolute_coordinates %} G91 {% endif %}
- {% else %}
- RESPOND TYPE=echo MSG='Printer not homed'
- {% endif %}
- [gcode_macro _CLIENT_EXTRUDE]
- description = Extrudes, if the extruder is hot enough
- gcode =
- {% set client = printer['gcode_macro _CLIENT_VARIABLE']|default({}) %}
- {% set use_fw_retract = (client.use_fw_retract|default(false)|lower == 'true') and (printer.firmware_retraction is defined) %}
- {% set length = params.LENGTH|default(client.unretract)|default(1.0)|float %}
- {% set speed = params.SPEED|default(client.speed_unretract)|default(35) %}
- {% set absolute_extrude = printer.gcode_move.absolute_extrude %}
- {% if printer.toolhead.extruder != '' %}
- {% if printer[printer.toolhead.extruder].can_extrude %}
- {% if use_fw_retract %}
- {% if length < 0 %}
- G10
- {% else %}
- G11
- {% endif %}
- {% else %}
- M83
- G1 E{length} F{(speed|float|abs) * 60}
- {% if absolute_extrude %}
- M82
- {% endif %}
- {% endif %}
- {% else %}
- RESPOND TYPE=echo MSG='{"\"%s\" not hot enough" % printer.toolhead.extruder}'
- {% endif %}
- {% endif %}
- [gcode_macro _CLIENT_RETRACT]
- description = Retracts, if the extruder is hot enough
- gcode =
- {% set client = printer['gcode_macro _CLIENT_VARIABLE']|default({}) %}
- {% set length = params.LENGTH|default(client.retract)|default(1.0)|float %}
- {% set speed = params.SPEED|default(client.speed_retract)|default(35) %}
- _CLIENT_EXTRUDE LENGTH=-{length|float|abs} SPEED={speed|float|abs}
- [gcode_macro _CLIENT_LINEAR_MOVE]
- description = Linear move with save and restore of the gcode state
- gcode =
- {% set x_move = "X" ~ params.X if params.X is defined else "" %}
- {% set y_move = "Y" ~ params.Y if params.Y is defined else "" %}
- {% set z_move = "Z" ~ params.Z if params.Z is defined else "" %}
- {% set e_move = "E" ~ params.E if params.E is defined else "" %}
- {% set rate = "F" ~ params.F if params.F is defined else "" %}
- {% set ABSOLUTE = params.ABSOLUTE | default(0) | int != 0 %}
- {% set ABSOLUTE_E = params.ABSOLUTE_E | default(0) | int != 0 %}
- SAVE_GCODE_STATE NAME=_client_movement
- {% if x_move or y_move or z_move %}
- G9{ 0 if ABSOLUTE else 1 }
- {% endif %}
- {% if e_move %}
- M8{ 2 if ABSOLUTE_E else 3 }
- {% endif %}
- G1 { x_move } { y_move } { z_move } { e_move } { rate }
- RESTORE_GCODE_STATE NAME=_client_movement
- [stepper_x]
- step_pin = PD7
- dir_pin = !PC5
- enable_pin = !PD6
- microsteps = 16
- rotation_distance = 40
- endstop_pin = ^PC2
- position_endstop = 0
- position_max = 235
- homing_speed = 25
- [stepper_y]
- step_pin = PC6
- dir_pin = !PC7
- enable_pin = !PD6
- microsteps = 16
- rotation_distance = 40
- endstop_pin = ^PC3
- position_endstop = 0
- position_max = 235
- homing_speed = 25
- [stepper_z]
- step_pin = PB3
- dir_pin = PB2
- enable_pin = !PA5
- microsteps = 16
- rotation_distance = 8
- endstop_pin = probe:z_virtual_endstop
- position_min = -5
- position_max = 240
- [extruder]
- max_extrude_only_distance = 100.0
- step_pin = PB1
- dir_pin = !PB0
- enable_pin = !PD6
- microsteps = 16
- rotation_distance = 33.683
- nozzle_diameter = 0.400
- filament_diameter = 1.750
- heater_pin = PD5
- sensor_type = EPCOS 100K B57560G104F
- sensor_pin = PA7
- control = pid
- pid_kp = 29.211
- pid_ki = 10.819
- pid_kd = 19.717
- min_temp = 0
- max_temp = 300
- [heater_bed]
- heater_pin = PD4
- sensor_type = EPCOS 100K B57560G104F
- sensor_pin = PA6
- control = pid
- pid_kp = 73.853
- pid_ki = 1.901
- pid_kd = 717.301
- min_temp = 0
- max_temp = 130
- [fan]
- pin = PB4
- [mcu]
- serial = /dev/ttyUSB0
- baud = 115200
- [printer]
- kinematics = cartesian
- max_velocity = 500
- max_accel = 6000
- max_z_velocity = 5
- max_z_accel = 100
- [bed_screws]
- screw1 = 30.5, 37
- screw2 = 30.5, 207
- screw3 = 204.5, 207
- screw4 = 204.5, 37
- [display]
- lcd_type = st7920
- cs_pin = PA3
- sclk_pin = PA1
- sid_pin = PC1
- encoder_pins = ^PD2, ^PD3
- click_pin = ^!PC0
- [bltouch]
- sensor_pin = ^PC4
- control_pin = PA4
- x_offset = -45
- z_offset = 2.540
- speed = 10
- samples = 3
- probe_with_touch_mode = False
- samples_tolerance = 0.1
- sample_retract_dist = 5.0
- [safe_z_home]
- home_xy_position = 117, 117
- speed = 25
- z_hop = 5
- z_hop_speed = 10
- [bed_mesh]
- speed = 25
- horizontal_move_z = 5
- mesh_min = 47,56
- mesh_max = 190,210
- probe_count = 5,5
- =======================
- Extruder max_extrude_ratio=0.266081
- mcu 'mcu': Starting serial connect
- mcu 'mcu': Unable to open serial port: [Errno 2] could not open port /dev/ttyUSB0: [Errno 2] No such file or directory: '/dev/ttyUSB0'
- webhooks client 548416658576: New connection
- webhooks client 548416658576: Client info {'program': 'Moonraker', 'version': 'v0.9.3-125-g3129d89'}
- mcu 'mcu': Unable to open serial port: [Errno 2] could not open port /dev/ttyUSB0: [Errno 2] No such file or directory: '/dev/ttyUSB0'
- mcu 'mcu': Unable to open serial port: [Errno 2] could not open port /dev/ttyUSB0: [Errno 2] No such file or directory: '/dev/ttyUSB0'
- mcu 'mcu': Unable to open serial port: [Errno 2] could not open port /dev/ttyUSB0: [Errno 2] No such file or directory: '/dev/ttyUSB0'
- mcu 'mcu': Unable to open serial port: [Errno 2] could not open port /dev/ttyUSB0: [Errno 2] No such file or directory: '/dev/ttyUSB0'
- mcu 'mcu': Unable to open serial port: [Errno 2] could not open port /dev/ttyUSB0: [Errno 2] No such file or directory: '/dev/ttyUSB0'
- mcu 'mcu': Unable to open serial port: [Errno 2] could not open port /dev/ttyUSB0: [Errno 2] No such file or directory: '/dev/ttyUSB0'
- mcu 'mcu': Unable to open serial port: [Errno 2] could not open port /dev/ttyUSB0: [Errno 2] No such file or directory: '/dev/ttyUSB0'
- mcu 'mcu': Unable to open serial port: [Errno 2] could not open port /dev/ttyUSB0: [Errno 2] No such file or directory: '/dev/ttyUSB0'
- mcu 'mcu': Unable to open serial port: [Errno 2] could not open port /dev/ttyUSB0: [Errno 2] No such file or directory: '/dev/ttyUSB0'
- mcu 'mcu': Unable to open serial port: [Errno 2] could not open port /dev/ttyUSB0: [Errno 2] No such file or directory: '/dev/ttyUSB0'
- mcu 'mcu': Unable to open serial port: [Errno 2] could not open port /dev/ttyUSB0: [Errno 2] No such file or directory: '/dev/ttyUSB0'
- mcu 'mcu': Unable to open serial port: [Errno 2] could not open port /dev/ttyUSB0: [Errno 2] No such file or directory: '/dev/ttyUSB0'
- mcu 'mcu': Unable to open serial port: [Errno 2] could not open port /dev/ttyUSB0: [Errno 2] No such file or directory: '/dev/ttyUSB0'
- mcu 'mcu': Unable to open serial port: [Errno 2] could not open port /dev/ttyUSB0: [Errno 2] No such file or directory: '/dev/ttyUSB0'
- mcu 'mcu': Unable to open serial port: [Errno 2] could not open port /dev/ttyUSB0: [Errno 2] No such file or directory: '/dev/ttyUSB0'
- mcu 'mcu': Unable to open serial port: [Errno 2] could not open port /dev/ttyUSB0: [Errno 2] No such file or directory: '/dev/ttyUSB0'
- mcu 'mcu': Unable to open serial port: [Errno 2] could not open port /dev/ttyUSB0: [Errno 2] No such file or directory: '/dev/ttyUSB0'
- MCU error during connect
- Traceback (most recent call last):
- File "/home/pi/klipper/klippy/mcu.py", line 774, in _attach
- self._serial.connect_uart(self._serialport, self._baud, rts)
- File "/home/pi/klipper/klippy/serialhdl.py", line 191, in connect_uart
- self._error("Unable to connect")
- File "/home/pi/klipper/klippy/serialhdl.py", line 68, in _error
- raise error(self.warn_prefix + (msg % params))
- serialhdl.error: mcu 'mcu': Unable to connect
- During handling of the above exception, another exception occurred:
- Traceback (most recent call last):
- File "/home/pi/klipper/klippy/klippy.py", line 131, in _connect
- self.send_event("klippy:mcu_identify")
- File "/home/pi/klipper/klippy/klippy.py", line 227, in send_event
- return [cb(*params) for cb in self.event_handlers.get(event, [])]
- ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
- File "/home/pi/klipper/klippy/klippy.py", line 227, in <listcomp>
- return [cb(*params) for cb in self.event_handlers.get(event, [])]
- ^^^^^^^^^^^
- File "/home/pi/klipper/klippy/mcu.py", line 784, in _mcu_identify
- self._attach()
- File "/home/pi/klipper/klippy/mcu.py", line 779, in _attach
- raise error(str(e))
- mcu.error: mcu 'mcu': Unable to connect
- mcu 'mcu': Unable to connect
- Once the underlying issue is corrected, use the
- "FIRMWARE_RESTART" command to reset the firmware, reload the
- config, and restart the host software.
- Error configuring printer
- No build file /home/pi/klipper/klippy/../.config
- No build file /home/pi/klipper/klippy/../out/klipper.dict
- No build file /home/pi/klipper/klippy/../out/klipper.elf
- Attempting MCU 'mcu' reset
- Unhandled exception during post run
- Traceback (most recent call last):
- File "/home/pi/klippy-env/lib/python3.11/site-packages/serial/serialposix.py", line 265, in open
- self.fd = os.open(self.portstr, os.O_RDWR | os.O_NOCTTY | os.O_NONBLOCK)
- ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
- FileNotFoundError: [Errno 2] No such file or directory: '/dev/ttyUSB0'
- During handling of the above exception, another exception occurred:
- Traceback (most recent call last):
- File "/home/pi/klipper/klippy/klippy.py", line 194, in run
- self.send_event("klippy:firmware_restart")
- File "/home/pi/klipper/klippy/klippy.py", line 227, in send_event
- return [cb(*params) for cb in self.event_handlers.get(event, [])]
- ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
- File "/home/pi/klipper/klippy/klippy.py", line 227, in <listcomp>
- return [cb(*params) for cb in self.event_handlers.get(event, [])]
- ^^^^^^^^^^^
- File "/home/pi/klipper/klippy/mcu.py", line 672, in _firmware_restart
- self._restart_arduino()
- File "/home/pi/klipper/klippy/mcu.py", line 632, in _restart_arduino
- serialhdl.arduino_reset(serialport, self._reactor)
- File "/home/pi/klipper/klippy/serialhdl.py", line 392, in arduino_reset
- ser = serial.Serial(serialport, 2400, timeout=0, exclusive=True)
- ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
- File "/home/pi/klippy-env/lib/python3.11/site-packages/serial/serialutil.py", line 240, in __init__
- self.open()
- File "/home/pi/klippy-env/lib/python3.11/site-packages/serial/serialposix.py", line 268, in open
- raise SerialException(msg.errno, "could not open port {}: {}".format(self._port, msg))
- serial.serialutil.SerialException: [Errno 2] could not open port /dev/ttyUSB0: [Errno 2] No such file or directory: '/dev/ttyUSB0'
- Restarting printer
- Start printer at Tue Nov 18 19:30:26 2025 (1763494226.1 1489.5)
- ===== Config file =====
- [virtual_sdcard]
- path = /home/klipper/printer_data/gcodes/
- on_error_gcode = CANCEL_PRINT
- [pause_resume]
- [display_status]
- [respond]
- [gcode_macro CANCEL_PRINT]
- description = Cancel the actual running print
- rename_existing = CANCEL_PRINT_BASE
- gcode =
- {% set client = printer['gcode_macro _CLIENT_VARIABLE']|default({}) %}
- {% set allow_park = client.park_at_cancel|default(false)|lower == 'true' %}
- {% set retract = client.cancel_retract|default(5.0)|abs %}
- {% set park_x = "" if (client.park_at_cancel_x|default(none) is none)
- else "X=" ~ client.park_at_cancel_x %}
- {% set park_y = "" if (client.park_at_cancel_y|default(none) is none)
- else "Y=" ~ client.park_at_cancel_y %}
- {% set custom_park = park_x|length > 0 or park_y|length > 0 %}
- {% if printer['gcode_macro RESUME'].restore_idle_timeout > 0 %}
- SET_IDLE_TIMEOUT TIMEOUT={printer['gcode_macro RESUME'].restore_idle_timeout}
- {% endif %}
- {% if (custom_park or not printer.pause_resume.is_paused) and allow_park %} _TOOLHEAD_PARK_PAUSE_CANCEL {park_x} {park_y} {% endif %}
- _CLIENT_RETRACT LENGTH={retract}
- TURN_OFF_HEATERS
- M106 S0
- {client.user_cancel_macro|default("")}
- SET_GCODE_VARIABLE MACRO=RESUME VARIABLE=idle_state VALUE=False
- SET_PAUSE_NEXT_LAYER ENABLE=0
- SET_PAUSE_AT_LAYER ENABLE=0 LAYER=0
- CANCEL_PRINT_BASE
- [gcode_macro PAUSE]
- description = Pause the actual running print
- rename_existing = PAUSE_BASE
- gcode =
- {% set client = printer['gcode_macro _CLIENT_VARIABLE']|default({}) %}
- {% set idle_timeout = client.idle_timeout|default(0) %}
- {% set temp = printer[printer.toolhead.extruder].target if printer.toolhead.extruder != '' else 0 %}
- {% set restore = False if printer.toolhead.extruder == ''
- else True if params.RESTORE|default(1)|int == 1 else False %}
- SET_GCODE_VARIABLE MACRO=RESUME VARIABLE=last_extruder_temp VALUE="{{'restore': restore, 'temp': temp}}"
- {% if idle_timeout > 0 %}
- SET_GCODE_VARIABLE MACRO=RESUME VARIABLE=restore_idle_timeout VALUE={printer.configfile.settings.idle_timeout.timeout}
- SET_IDLE_TIMEOUT TIMEOUT={idle_timeout}
- {% endif %}
- PAUSE_BASE
- {client.user_pause_macro|default("")}
- _TOOLHEAD_PARK_PAUSE_CANCEL {rawparams}
- [gcode_macro RESUME]
- description = Resume the actual running print
- rename_existing = RESUME_BASE
- variable_last_extruder_temp = {'restore': False, 'temp': 0}
- variable_restore_idle_timeout = 0
- variable_idle_state = False
- gcode =
- {% set client = printer['gcode_macro _CLIENT_VARIABLE']|default({}) %}
- {% set velocity = printer.configfile.settings.pause_resume.recover_velocity %}
- {% set sp_move = client.speed_move|default(velocity) %}
- {% set runout_resume = True if client.runout_sensor|default("") == ""
- else True if not printer[client.runout_sensor].enabled
- else printer[client.runout_sensor].filament_detected %}
- {% set can_extrude = True if printer.toolhead.extruder == ''
- else printer[printer.toolhead.extruder].can_extrude %}
- {% set do_resume = False %}
- {% set prompt_txt = [] %}
- {% if printer.idle_timeout.state|upper == "IDLE" or idle_state %}
- SET_GCODE_VARIABLE MACRO=RESUME VARIABLE=idle_state VALUE=False
- {% if last_extruder_temp.restore %}
- RESPOND TYPE=echo MSG='{"Restoring \"%s\" temperature to %3.1f\u00B0C, this may take some time" % (printer.toolhead.extruder, last_extruder_temp.temp) }'
- M109 S{last_extruder_temp.temp}
- {% set do_resume = True %}
- {% elif can_extrude %}
- {% set do_resume = True %}
- {% else %}
- RESPOND TYPE=error MSG='{"Resume aborted !!! \"%s\" not hot enough, please heat up again and press RESUME" % printer.toolhead.extruder}'
- {% set _d = prompt_txt.append("\"%s\" not hot enough, please heat up again and press RESUME" % printer.toolhead.extruder) %}
- {% endif %}
- {% elif can_extrude %}
- {% set do_resume = True %}
- {% else %}
- RESPOND TYPE=error MSG='{"Resume aborted !!! \"%s\" not hot enough, please heat up again and press RESUME" % printer.toolhead.extruder}'
- {% set _d = prompt_txt.append("\"%s\" not hot enough, please heat up again and press RESUME" % printer.toolhead.extruder) %}
- {% endif %}
- {% if runout_resume %}
- {% if do_resume %}
- {% if restore_idle_timeout > 0 %} SET_IDLE_TIMEOUT TIMEOUT={restore_idle_timeout} {% endif %}
- {client.user_resume_macro|default("")}
- _CLIENT_EXTRUDE
- RESUME_BASE VELOCITY={params.VELOCITY|default(sp_move)}
- {% endif %}
- {% else %}
- RESPOND TYPE=error MSG='{"Resume aborted !!! \"%s\" detects no filament, please load filament and press RESUME" % (client.runout_sensor.split(" "))[1]}'
- {% set _d = prompt_txt.append("\"%s\" detects no filament, please load filament and press RESUME" % (client.runout_sensor.split(" "))[1]) %}
- {% endif %}
- {% if not (runout_resume and do_resume) %}
- RESPOND TYPE=command MSG="action:prompt_begin RESUME aborted !!!"
- {% for element in prompt_txt %}
- RESPOND TYPE=command MSG='{"action:prompt_text %s" % element}'
- {% endfor %}
- RESPOND TYPE=command MSG="action:prompt_footer_button Ok|RESPOND TYPE=command MSG=action:prompt_end|info"
- RESPOND TYPE=command MSG="action:prompt_show"
- {% endif %}
- [gcode_macro SET_PAUSE_NEXT_LAYER]
- description = Enable a pause if the next layer is reached
- gcode =
- {% set pause_next_layer = printer['gcode_macro SET_PRINT_STATS_INFO'].pause_next_layer %}
- {% set ENABLE = params.ENABLE|default(1)|int != 0 %}
- {% set MACRO = params.MACRO|default(pause_next_layer.call, True) %}
- SET_GCODE_VARIABLE MACRO=SET_PRINT_STATS_INFO VARIABLE=pause_next_layer VALUE="{{ 'enable': ENABLE, 'call': MACRO }}"
- [gcode_macro SET_PAUSE_AT_LAYER]
- description = Enable/disable a pause if a given layer number is reached
- gcode =
- {% set pause_at_layer = printer['gcode_macro SET_PRINT_STATS_INFO'].pause_at_layer %}
- {% set ENABLE = params.ENABLE|int != 0 if params.ENABLE is defined
- else params.LAYER is defined %}
- {% set LAYER = params.LAYER|default(pause_at_layer.layer)|int %}
- {% set MACRO = params.MACRO|default(pause_at_layer.call, True) %}
- SET_GCODE_VARIABLE MACRO=SET_PRINT_STATS_INFO VARIABLE=pause_at_layer VALUE="{{ 'enable': ENABLE, 'layer': LAYER, 'call': MACRO }}"
- [gcode_macro SET_PRINT_STATS_INFO]
- rename_existing = SET_PRINT_STATS_INFO_BASE
- description = Overwrite, to get pause_next_layer and pause_at_layer feature
- variable_pause_next_layer = { 'enable': False, 'call': "PAUSE" }
- variable_pause_at_layer = { 'enable': False, 'layer': 0, 'call': "PAUSE" }
- gcode =
- {% if pause_next_layer.enable %}
- RESPOND TYPE=echo MSG='{"%s, forced by pause_next_layer" % pause_next_layer.call}'
- {pause_next_layer.call}
- SET_PAUSE_NEXT_LAYER ENABLE=0
- {% elif pause_at_layer.enable and params.CURRENT_LAYER is defined and params.CURRENT_LAYER|int == pause_at_layer.layer %}
- RESPOND TYPE=echo MSG='{"%s, forced by pause_at_layer [%d]" % (pause_at_layer.call, pause_at_layer.layer)}'
- {pause_at_layer.call}
- SET_PAUSE_AT_LAYER ENABLE=0
- {% endif %}
- SET_PRINT_STATS_INFO_BASE {rawparams}
- [gcode_macro _TOOLHEAD_PARK_PAUSE_CANCEL]
- description = Helper: park toolhead used in PAUSE and CANCEL_PRINT
- gcode =
- {% set client = printer['gcode_macro _CLIENT_VARIABLE']|default({}) %}
- {% set velocity = printer.configfile.settings.pause_resume.recover_velocity %}
- {% set use_custom = client.use_custom_pos|default(false)|lower == 'true' %}
- {% set custom_park_x = client.custom_park_x|default(0.0) %}
- {% set custom_park_y = client.custom_park_y|default(0.0) %}
- {% set park_dz = client.custom_park_dz|default(2.0)|abs %}
- {% set sp_hop = client.speed_hop|default(15) * 60 %}
- {% set sp_move = client.speed_move|default(velocity) * 60 %}
- {% set origin = printer.gcode_move.homing_origin %}
- {% set act = printer.gcode_move.gcode_position %}
- {% set max = printer.toolhead.axis_maximum %}
- {% set cone = printer.toolhead.cone_start_z|default(max.z) %}
- {% set round_bed = True if printer.configfile.settings.printer.kinematics is in ['delta','polar','rotary_delta','winch']
- else False %}
- {% set z_min = params.Z_MIN|default(0)|float %}
- {% set z_park = [[(act.z + park_dz), z_min]|max, (max.z - origin.z)]|min %}
- {% set x_park = params.X if params.X is defined
- else custom_park_x if use_custom
- else 0.0 if round_bed
- else (max.x - 5.0) %}
- {% set y_park = params.Y if params.Y is defined
- else custom_park_y if use_custom
- else (max.y - 5.0) if round_bed and z_park < cone
- else 0.0 if round_bed
- else (max.y - 5.0) %}
- _CLIENT_RETRACT
- {% if "xyz" in printer.toolhead.homed_axes %}
- G90
- G1 Z{z_park} F{sp_hop}
- G1 X{x_park} Y{y_park} F{sp_move}
- {% if not printer.gcode_move.absolute_coordinates %} G91 {% endif %}
- {% else %}
- RESPOND TYPE=echo MSG='Printer not homed'
- {% endif %}
- [gcode_macro _CLIENT_EXTRUDE]
- description = Extrudes, if the extruder is hot enough
- gcode =
- {% set client = printer['gcode_macro _CLIENT_VARIABLE']|default({}) %}
- {% set use_fw_retract = (client.use_fw_retract|default(false)|lower == 'true') and (printer.firmware_retraction is defined) %}
- {% set length = params.LENGTH|default(client.unretract)|default(1.0)|float %}
- {% set speed = params.SPEED|default(client.speed_unretract)|default(35) %}
- {% set absolute_extrude = printer.gcode_move.absolute_extrude %}
- {% if printer.toolhead.extruder != '' %}
- {% if printer[printer.toolhead.extruder].can_extrude %}
- {% if use_fw_retract %}
- {% if length < 0 %}
- G10
- {% else %}
- G11
- {% endif %}
- {% else %}
- M83
- G1 E{length} F{(speed|float|abs) * 60}
- {% if absolute_extrude %}
- M82
- {% endif %}
- {% endif %}
- {% else %}
- RESPOND TYPE=echo MSG='{"\"%s\" not hot enough" % printer.toolhead.extruder}'
- {% endif %}
- {% endif %}
- [gcode_macro _CLIENT_RETRACT]
- description = Retracts, if the extruder is hot enough
- gcode =
- {% set client = printer['gcode_macro _CLIENT_VARIABLE']|default({}) %}
- {% set length = params.LENGTH|default(client.retract)|default(1.0)|float %}
- {% set speed = params.SPEED|default(client.speed_retract)|default(35) %}
- _CLIENT_EXTRUDE LENGTH=-{length|float|abs} SPEED={speed|float|abs}
- [gcode_macro _CLIENT_LINEAR_MOVE]
- description = Linear move with save and restore of the gcode state
- gcode =
- {% set x_move = "X" ~ params.X if params.X is defined else "" %}
- {% set y_move = "Y" ~ params.Y if params.Y is defined else "" %}
- {% set z_move = "Z" ~ params.Z if params.Z is defined else "" %}
- {% set e_move = "E" ~ params.E if params.E is defined else "" %}
- {% set rate = "F" ~ params.F if params.F is defined else "" %}
- {% set ABSOLUTE = params.ABSOLUTE | default(0) | int != 0 %}
- {% set ABSOLUTE_E = params.ABSOLUTE_E | default(0) | int != 0 %}
- SAVE_GCODE_STATE NAME=_client_movement
- {% if x_move or y_move or z_move %}
- G9{ 0 if ABSOLUTE else 1 }
- {% endif %}
- {% if e_move %}
- M8{ 2 if ABSOLUTE_E else 3 }
- {% endif %}
- G1 { x_move } { y_move } { z_move } { e_move } { rate }
- RESTORE_GCODE_STATE NAME=_client_movement
- [stepper_x]
- step_pin = PD7
- dir_pin = !PC5
- enable_pin = !PD6
- microsteps = 16
- rotation_distance = 40
- endstop_pin = ^PC2
- position_endstop = 0
- position_max = 235
- homing_speed = 25
- [stepper_y]
- step_pin = PC6
- dir_pin = !PC7
- enable_pin = !PD6
- microsteps = 16
- rotation_distance = 40
- endstop_pin = ^PC3
- position_endstop = 0
- position_max = 235
- homing_speed = 25
- [stepper_z]
- step_pin = PB3
- dir_pin = PB2
- enable_pin = !PA5
- microsteps = 16
- rotation_distance = 8
- endstop_pin = probe:z_virtual_endstop
- position_min = -5
- position_max = 240
- [extruder]
- max_extrude_only_distance = 100.0
- step_pin = PB1
- dir_pin = !PB0
- enable_pin = !PD6
- microsteps = 16
- rotation_distance = 33.683
- nozzle_diameter = 0.400
- filament_diameter = 1.750
- heater_pin = PD5
- sensor_type = EPCOS 100K B57560G104F
- sensor_pin = PA7
- control = pid
- pid_kp = 29.211
- pid_ki = 10.819
- pid_kd = 19.717
- min_temp = 0
- max_temp = 300
- [heater_bed]
- heater_pin = PD4
- sensor_type = EPCOS 100K B57560G104F
- sensor_pin = PA6
- control = pid
- pid_kp = 73.853
- pid_ki = 1.901
- pid_kd = 717.301
- min_temp = 0
- max_temp = 130
- [fan]
- pin = PB4
- [mcu]
- serial = /dev/ttyUSB0
- baud = 115200
- [printer]
- kinematics = cartesian
- max_velocity = 500
- max_accel = 6000
- max_z_velocity = 5
- max_z_accel = 100
- [bed_screws]
- screw1 = 30.5, 37
- screw2 = 30.5, 207
- screw3 = 204.5, 207
- screw4 = 204.5, 37
- [display]
- lcd_type = st7920
- cs_pin = PA3
- sclk_pin = PA1
- sid_pin = PC1
- encoder_pins = ^PD2, ^PD3
- click_pin = ^!PC0
- [bltouch]
- sensor_pin = ^PC4
- control_pin = PA4
- x_offset = -45
- z_offset = 2.540
- speed = 10
- samples = 3
- probe_with_touch_mode = False
- samples_tolerance = 0.1
- sample_retract_dist = 5.0
- [safe_z_home]
- home_xy_position = 117, 117
- speed = 25
- z_hop = 5
- z_hop_speed = 10
- [bed_mesh]
- speed = 25
- horizontal_move_z = 5
- mesh_min = 47,56
- mesh_max = 190,210
- probe_count = 5,5
- =======================
- Extruder max_extrude_ratio=0.266081
- mcu 'mcu': Starting serial connect
- mcu 'mcu': Unable to open serial port: [Errno 2] could not open port /dev/ttyUSB0: [Errno 2] No such file or directory: '/dev/ttyUSB0'
- webhooks client 548414719568: New connection
- webhooks client 548414719568: Client info {'program': 'Moonraker', 'version': 'v0.9.3-125-g3129d89'}
- mcu 'mcu': Unable to open serial port: [Errno 2] could not open port /dev/ttyUSB0: [Errno 2] No such file or directory: '/dev/ttyUSB0'
- mcu 'mcu': Unable to open serial port: [Errno 2] could not open port /dev/ttyUSB0: [Errno 2] No such file or directory: '/dev/ttyUSB0'
- mcu 'mcu': Unable to open serial port: [Errno 2] could not open port /dev/ttyUSB0: [Errno 2] No such file or directory: '/dev/ttyUSB0'
- mcu 'mcu': Unable to open serial port: [Errno 2] could not open port /dev/ttyUSB0: [Errno 2] No such file or directory: '/dev/ttyUSB0'
- mcu 'mcu': Unable to open serial port: [Errno 2] could not open port /dev/ttyUSB0: [Errno 2] No such file or directory: '/dev/ttyUSB0'
- mcu 'mcu': Unable to open serial port: [Errno 2] could not open port /dev/ttyUSB0: [Errno 2] No such file or directory: '/dev/ttyUSB0'
- mcu 'mcu': Unable to open serial port: [Errno 2] could not open port /dev/ttyUSB0: [Errno 2] No such file or directory: '/dev/ttyUSB0'
- mcu 'mcu': Unable to open serial port: [Errno 2] could not open port /dev/ttyUSB0: [Errno 2] No such file or directory: '/dev/ttyUSB0'
- mcu 'mcu': Unable to open serial port: [Errno 2] could not open port /dev/ttyUSB0: [Errno 2] No such file or directory: '/dev/ttyUSB0'
- mcu 'mcu': Unable to open serial port: [Errno 2] could not open port /dev/ttyUSB0: [Errno 2] No such file or directory: '/dev/ttyUSB0'
- mcu 'mcu': Unable to open serial port: [Errno 2] could not open port /dev/ttyUSB0: [Errno 2] No such file or directory: '/dev/ttyUSB0'
- mcu 'mcu': Unable to open serial port: [Errno 2] could not open port /dev/ttyUSB0: [Errno 2] No such file or directory: '/dev/ttyUSB0'
- mcu 'mcu': Unable to open serial port: [Errno 2] could not open port /dev/ttyUSB0: [Errno 2] No such file or directory: '/dev/ttyUSB0'
- mcu 'mcu': Unable to open serial port: [Errno 2] could not open port /dev/ttyUSB0: [Errno 2] No such file or directory: '/dev/ttyUSB0'
- mcu 'mcu': Unable to open serial port: [Errno 2] could not open port /dev/ttyUSB0: [Errno 2] No such file or directory: '/dev/ttyUSB0'
- mcu 'mcu': Unable to open serial port: [Errno 2] could not open port /dev/ttyUSB0: [Errno 2] No such file or directory: '/dev/ttyUSB0'
- mcu 'mcu': Unable to open serial port: [Errno 2] could not open port /dev/ttyUSB0: [Errno 2] No such file or directory: '/dev/ttyUSB0'
- MCU error during connect
- Traceback (most recent call last):
- File "/home/pi/klipper/klippy/mcu.py", line 774, in _attach
- self._serial.connect_uart(self._serialport, self._baud, rts)
- File "/home/pi/klipper/klippy/serialhdl.py", line 191, in connect_uart
- self._error("Unable to connect")
- File "/home/pi/klipper/klippy/serialhdl.py", line 68, in _error
- raise error(self.warn_prefix + (msg % params))
- serialhdl.error: mcu 'mcu': Unable to connect
- During handling of the above exception, another exception occurred:
- Traceback (most recent call last):
- File "/home/pi/klipper/klippy/klippy.py", line 131, in _connect
- self.send_event("klippy:mcu_identify")
- File "/home/pi/klipper/klippy/klippy.py", line 227, in send_event
- return [cb(*params) for cb in self.event_handlers.get(event, [])]
- ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
- File "/home/pi/klipper/klippy/klippy.py", line 227, in <listcomp>
- return [cb(*params) for cb in self.event_handlers.get(event, [])]
- ^^^^^^^^^^^
- File "/home/pi/klipper/klippy/mcu.py", line 784, in _mcu_identify
- self._attach()
- File "/home/pi/klipper/klippy/mcu.py", line 779, in _attach
- raise error(str(e))
- mcu.error: mcu 'mcu': Unable to connect
- mcu 'mcu': Unable to connect
- Once the underlying issue is corrected, use the
- "FIRMWARE_RESTART" command to reset the firmware, reload the
- config, and restart the host software.
- Error configuring printer
- No build file /home/pi/klipper/klippy/../.config
- No build file /home/pi/klipper/klippy/../out/klipper.dict
- No build file /home/pi/klipper/klippy/../out/klipper.elf
- webhooks client 548414719568: Disconnected
- Starting Klippy...
- Args: ['/home/pi/klipper/klippy/klippy.py', '/home/pi/printer_data/config/printer.cfg', '-l', '/home/pi/printer_data/logs/klippy.log', '-I', '/home/pi/printer_data/comms/klippy.serial', '-a', '/home/pi/printer_data/comms/klippy.sock']
- Git version: 'v0.13.0-403-gb4c7cf4a3'
- Branch: master
- Remote: origin
- Tracked URL: https://github.com/Klipper3d/klipper.git
- CPU: 4 core ?
- Device: Raspberry Pi 3 Model B Rev 1.2
- Linux: Linux version 6.12.47+rpt-rpi-v8 ([email protected]) (aarch64-linux-gnu-gcc-12 (Debian 12.2.0-14+deb12u1) 12.2.0, GNU ld (GNU Binutils for Debian) 2.40) #1 SMP PREEMPT Debian 1:6.12.47-1+rpt1~bookworm (2025-09-16)
- Python: '3.11.2 (main, Apr 28 2025, 14:11:48) [GCC 12.2.0]'
- Start printer at Tue Nov 18 19:56:45 2025 (1763495805.9 20.9)
- ===== Config file =====
- [virtual_sdcard]
- path = /home/klipper/printer_data/gcodes/
- on_error_gcode = CANCEL_PRINT
- [pause_resume]
- [display_status]
- [respond]
- [gcode_macro CANCEL_PRINT]
- description = Cancel the actual running print
- rename_existing = CANCEL_PRINT_BASE
- gcode =
- {% set client = printer['gcode_macro _CLIENT_VARIABLE']|default({}) %}
- {% set allow_park = client.park_at_cancel|default(false)|lower == 'true' %}
- {% set retract = client.cancel_retract|default(5.0)|abs %}
- {% set park_x = "" if (client.park_at_cancel_x|default(none) is none)
- else "X=" ~ client.park_at_cancel_x %}
- {% set park_y = "" if (client.park_at_cancel_y|default(none) is none)
- else "Y=" ~ client.park_at_cancel_y %}
- {% set custom_park = park_x|length > 0 or park_y|length > 0 %}
- {% if printer['gcode_macro RESUME'].restore_idle_timeout > 0 %}
- SET_IDLE_TIMEOUT TIMEOUT={printer['gcode_macro RESUME'].restore_idle_timeout}
- {% endif %}
- {% if (custom_park or not printer.pause_resume.is_paused) and allow_park %} _TOOLHEAD_PARK_PAUSE_CANCEL {park_x} {park_y} {% endif %}
- _CLIENT_RETRACT LENGTH={retract}
- TURN_OFF_HEATERS
- M106 S0
- {client.user_cancel_macro|default("")}
- SET_GCODE_VARIABLE MACRO=RESUME VARIABLE=idle_state VALUE=False
- SET_PAUSE_NEXT_LAYER ENABLE=0
- SET_PAUSE_AT_LAYER ENABLE=0 LAYER=0
- CANCEL_PRINT_BASE
- [gcode_macro PAUSE]
- description = Pause the actual running print
- rename_existing = PAUSE_BASE
- gcode =
- {% set client = printer['gcode_macro _CLIENT_VARIABLE']|default({}) %}
- {% set idle_timeout = client.idle_timeout|default(0) %}
- {% set temp = printer[printer.toolhead.extruder].target if printer.toolhead.extruder != '' else 0 %}
- {% set restore = False if printer.toolhead.extruder == ''
- else True if params.RESTORE|default(1)|int == 1 else False %}
- SET_GCODE_VARIABLE MACRO=RESUME VARIABLE=last_extruder_temp VALUE="{{'restore': restore, 'temp': temp}}"
- {% if idle_timeout > 0 %}
- SET_GCODE_VARIABLE MACRO=RESUME VARIABLE=restore_idle_timeout VALUE={printer.configfile.settings.idle_timeout.timeout}
- SET_IDLE_TIMEOUT TIMEOUT={idle_timeout}
- {% endif %}
- PAUSE_BASE
- {client.user_pause_macro|default("")}
- _TOOLHEAD_PARK_PAUSE_CANCEL {rawparams}
- [gcode_macro RESUME]
- description = Resume the actual running print
- rename_existing = RESUME_BASE
- variable_last_extruder_temp = {'restore': False, 'temp': 0}
- variable_restore_idle_timeout = 0
- variable_idle_state = False
- gcode =
- {% set client = printer['gcode_macro _CLIENT_VARIABLE']|default({}) %}
- {% set velocity = printer.configfile.settings.pause_resume.recover_velocity %}
- {% set sp_move = client.speed_move|default(velocity) %}
- {% set runout_resume = True if client.runout_sensor|default("") == ""
- else True if not printer[client.runout_sensor].enabled
- else printer[client.runout_sensor].filament_detected %}
- {% set can_extrude = True if printer.toolhead.extruder == ''
- else printer[printer.toolhead.extruder].can_extrude %}
- {% set do_resume = False %}
- {% set prompt_txt = [] %}
- {% if printer.idle_timeout.state|upper == "IDLE" or idle_state %}
- SET_GCODE_VARIABLE MACRO=RESUME VARIABLE=idle_state VALUE=False
- {% if last_extruder_temp.restore %}
- RESPOND TYPE=echo MSG='{"Restoring \"%s\" temperature to %3.1f\u00B0C, this may take some time" % (printer.toolhead.extruder, last_extruder_temp.temp) }'
- M109 S{last_extruder_temp.temp}
- {% set do_resume = True %}
- {% elif can_extrude %}
- {% set do_resume = True %}
- {% else %}
- RESPOND TYPE=error MSG='{"Resume aborted !!! \"%s\" not hot enough, please heat up again and press RESUME" % printer.toolhead.extruder}'
- {% set _d = prompt_txt.append("\"%s\" not hot enough, please heat up again and press RESUME" % printer.toolhead.extruder) %}
- {% endif %}
- {% elif can_extrude %}
- {% set do_resume = True %}
- {% else %}
- RESPOND TYPE=error MSG='{"Resume aborted !!! \"%s\" not hot enough, please heat up again and press RESUME" % printer.toolhead.extruder}'
- {% set _d = prompt_txt.append("\"%s\" not hot enough, please heat up again and press RESUME" % printer.toolhead.extruder) %}
- {% endif %}
- {% if runout_resume %}
- {% if do_resume %}
- {% if restore_idle_timeout > 0 %} SET_IDLE_TIMEOUT TIMEOUT={restore_idle_timeout} {% endif %}
- {client.user_resume_macro|default("")}
- _CLIENT_EXTRUDE
- RESUME_BASE VELOCITY={params.VELOCITY|default(sp_move)}
- {% endif %}
- {% else %}
- RESPOND TYPE=error MSG='{"Resume aborted !!! \"%s\" detects no filament, please load filament and press RESUME" % (client.runout_sensor.split(" "))[1]}'
- {% set _d = prompt_txt.append("\"%s\" detects no filament, please load filament and press RESUME" % (client.runout_sensor.split(" "))[1]) %}
- {% endif %}
- {% if not (runout_resume and do_resume) %}
- RESPOND TYPE=command MSG="action:prompt_begin RESUME aborted !!!"
- {% for element in prompt_txt %}
- RESPOND TYPE=command MSG='{"action:prompt_text %s" % element}'
- {% endfor %}
- RESPOND TYPE=command MSG="action:prompt_footer_button Ok|RESPOND TYPE=command MSG=action:prompt_end|info"
- RESPOND TYPE=command MSG="action:prompt_show"
- {% endif %}
- [gcode_macro SET_PAUSE_NEXT_LAYER]
- description = Enable a pause if the next layer is reached
- gcode =
- {% set pause_next_layer = printer['gcode_macro SET_PRINT_STATS_INFO'].pause_next_layer %}
- {% set ENABLE = params.ENABLE|default(1)|int != 0 %}
- {% set MACRO = params.MACRO|default(pause_next_layer.call, True) %}
- SET_GCODE_VARIABLE MACRO=SET_PRINT_STATS_INFO VARIABLE=pause_next_layer VALUE="{{ 'enable': ENABLE, 'call': MACRO }}"
- [gcode_macro SET_PAUSE_AT_LAYER]
- description = Enable/disable a pause if a given layer number is reached
- gcode =
- {% set pause_at_layer = printer['gcode_macro SET_PRINT_STATS_INFO'].pause_at_layer %}
- {% set ENABLE = params.ENABLE|int != 0 if params.ENABLE is defined
- else params.LAYER is defined %}
- {% set LAYER = params.LAYER|default(pause_at_layer.layer)|int %}
- {% set MACRO = params.MACRO|default(pause_at_layer.call, True) %}
- SET_GCODE_VARIABLE MACRO=SET_PRINT_STATS_INFO VARIABLE=pause_at_layer VALUE="{{ 'enable': ENABLE, 'layer': LAYER, 'call': MACRO }}"
- [gcode_macro SET_PRINT_STATS_INFO]
- rename_existing = SET_PRINT_STATS_INFO_BASE
- description = Overwrite, to get pause_next_layer and pause_at_layer feature
- variable_pause_next_layer = { 'enable': False, 'call': "PAUSE" }
- variable_pause_at_layer = { 'enable': False, 'layer': 0, 'call': "PAUSE" }
- gcode =
- {% if pause_next_layer.enable %}
- RESPOND TYPE=echo MSG='{"%s, forced by pause_next_layer" % pause_next_layer.call}'
- {pause_next_layer.call}
- SET_PAUSE_NEXT_LAYER ENABLE=0
- {% elif pause_at_layer.enable and params.CURRENT_LAYER is defined and params.CURRENT_LAYER|int == pause_at_layer.layer %}
- RESPOND TYPE=echo MSG='{"%s, forced by pause_at_layer [%d]" % (pause_at_layer.call, pause_at_layer.layer)}'
- {pause_at_layer.call}
- SET_PAUSE_AT_LAYER ENABLE=0
- {% endif %}
- SET_PRINT_STATS_INFO_BASE {rawparams}
- [gcode_macro _TOOLHEAD_PARK_PAUSE_CANCEL]
- description = Helper: park toolhead used in PAUSE and CANCEL_PRINT
- gcode =
- {% set client = printer['gcode_macro _CLIENT_VARIABLE']|default({}) %}
- {% set velocity = printer.configfile.settings.pause_resume.recover_velocity %}
- {% set use_custom = client.use_custom_pos|default(false)|lower == 'true' %}
- {% set custom_park_x = client.custom_park_x|default(0.0) %}
- {% set custom_park_y = client.custom_park_y|default(0.0) %}
- {% set park_dz = client.custom_park_dz|default(2.0)|abs %}
- {% set sp_hop = client.speed_hop|default(15) * 60 %}
- {% set sp_move = client.speed_move|default(velocity) * 60 %}
- {% set origin = printer.gcode_move.homing_origin %}
- {% set act = printer.gcode_move.gcode_position %}
- {% set max = printer.toolhead.axis_maximum %}
- {% set cone = printer.toolhead.cone_start_z|default(max.z) %}
- {% set round_bed = True if printer.configfile.settings.printer.kinematics is in ['delta','polar','rotary_delta','winch']
- else False %}
- {% set z_min = params.Z_MIN|default(0)|float %}
- {% set z_park = [[(act.z + park_dz), z_min]|max, (max.z - origin.z)]|min %}
- {% set x_park = params.X if params.X is defined
- else custom_park_x if use_custom
- else 0.0 if round_bed
- else (max.x - 5.0) %}
- {% set y_park = params.Y if params.Y is defined
- else custom_park_y if use_custom
- else (max.y - 5.0) if round_bed and z_park < cone
- else 0.0 if round_bed
- else (max.y - 5.0) %}
- _CLIENT_RETRACT
- {% if "xyz" in printer.toolhead.homed_axes %}
- G90
- G1 Z{z_park} F{sp_hop}
- G1 X{x_park} Y{y_park} F{sp_move}
- {% if not printer.gcode_move.absolute_coordinates %} G91 {% endif %}
- {% else %}
- RESPOND TYPE=echo MSG='Printer not homed'
- {% endif %}
- [gcode_macro _CLIENT_EXTRUDE]
- description = Extrudes, if the extruder is hot enough
- gcode =
- {% set client = printer['gcode_macro _CLIENT_VARIABLE']|default({}) %}
- {% set use_fw_retract = (client.use_fw_retract|default(false)|lower == 'true') and (printer.firmware_retraction is defined) %}
- {% set length = params.LENGTH|default(client.unretract)|default(1.0)|float %}
- {% set speed = params.SPEED|default(client.speed_unretract)|default(35) %}
- {% set absolute_extrude = printer.gcode_move.absolute_extrude %}
- {% if printer.toolhead.extruder != '' %}
- {% if printer[printer.toolhead.extruder].can_extrude %}
- {% if use_fw_retract %}
- {% if length < 0 %}
- G10
- {% else %}
- G11
- {% endif %}
- {% else %}
- M83
- G1 E{length} F{(speed|float|abs) * 60}
- {% if absolute_extrude %}
- M82
- {% endif %}
- {% endif %}
- {% else %}
- RESPOND TYPE=echo MSG='{"\"%s\" not hot enough" % printer.toolhead.extruder}'
- {% endif %}
- {% endif %}
- [gcode_macro _CLIENT_RETRACT]
- description = Retracts, if the extruder is hot enough
- gcode =
- {% set client = printer['gcode_macro _CLIENT_VARIABLE']|default({}) %}
- {% set length = params.LENGTH|default(client.retract)|default(1.0)|float %}
- {% set speed = params.SPEED|default(client.speed_retract)|default(35) %}
- _CLIENT_EXTRUDE LENGTH=-{length|float|abs} SPEED={speed|float|abs}
- [gcode_macro _CLIENT_LINEAR_MOVE]
- description = Linear move with save and restore of the gcode state
- gcode =
- {% set x_move = "X" ~ params.X if params.X is defined else "" %}
- {% set y_move = "Y" ~ params.Y if params.Y is defined else "" %}
- {% set z_move = "Z" ~ params.Z if params.Z is defined else "" %}
- {% set e_move = "E" ~ params.E if params.E is defined else "" %}
- {% set rate = "F" ~ params.F if params.F is defined else "" %}
- {% set ABSOLUTE = params.ABSOLUTE | default(0) | int != 0 %}
- {% set ABSOLUTE_E = params.ABSOLUTE_E | default(0) | int != 0 %}
- SAVE_GCODE_STATE NAME=_client_movement
- {% if x_move or y_move or z_move %}
- G9{ 0 if ABSOLUTE else 1 }
- {% endif %}
- {% if e_move %}
- M8{ 2 if ABSOLUTE_E else 3 }
- {% endif %}
- G1 { x_move } { y_move } { z_move } { e_move } { rate }
- RESTORE_GCODE_STATE NAME=_client_movement
- [stepper_x]
- step_pin = PD7
- dir_pin = !PC5
- enable_pin = !PD6
- microsteps = 16
- rotation_distance = 40
- endstop_pin = ^PC2
- position_endstop = 0
- position_max = 235
- homing_speed = 25
- [stepper_y]
- step_pin = PC6
- dir_pin = !PC7
- enable_pin = !PD6
- microsteps = 16
- rotation_distance = 40
- endstop_pin = ^PC3
- position_endstop = 0
- position_max = 235
- homing_speed = 25
- [stepper_z]
- step_pin = PB3
- dir_pin = PB2
- enable_pin = !PA5
- microsteps = 16
- rotation_distance = 8
- endstop_pin = probe:z_virtual_endstop
- position_min = -5
- position_max = 240
- [extruder]
- max_extrude_only_distance = 100.0
- step_pin = PB1
- dir_pin = !PB0
- enable_pin = !PD6
- microsteps = 16
- rotation_distance = 33.683
- nozzle_diameter = 0.400
- filament_diameter = 1.750
- heater_pin = PD5
- sensor_type = EPCOS 100K B57560G104F
- sensor_pin = PA7
- control = pid
- pid_kp = 29.211
- pid_ki = 10.819
- pid_kd = 19.717
- min_temp = 0
- max_temp = 300
- [heater_bed]
- heater_pin = PD4
- sensor_type = EPCOS 100K B57560G104F
- sensor_pin = PA6
- control = pid
- pid_kp = 73.853
- pid_ki = 1.901
- pid_kd = 717.301
- min_temp = 0
- max_temp = 130
- [fan]
- pin = PB4
- [mcu]
- serial = /dev/ttyUSB0
- baud = 115200
- [printer]
- kinematics = cartesian
- max_velocity = 500
- max_accel = 6000
- max_z_velocity = 5
- max_z_accel = 100
- [bed_screws]
- screw1 = 30.5, 37
- screw2 = 30.5, 207
- screw3 = 204.5, 207
- screw4 = 204.5, 37
- [display]
- lcd_type = st7920
- cs_pin = PA3
- sclk_pin = PA1
- sid_pin = PC1
- encoder_pins = ^PD2, ^PD3
- click_pin = ^!PC0
- [bltouch]
- sensor_pin = ^PC4
- control_pin = PA4
- x_offset = -45
- z_offset = 2.540
- speed = 10
- samples = 3
- probe_with_touch_mode = False
- samples_tolerance = 0.1
- sample_retract_dist = 5.0
- [safe_z_home]
- home_xy_position = 117, 117
- speed = 25
- z_hop = 5
- z_hop_speed = 10
- [bed_mesh]
- speed = 25
- horizontal_move_z = 5
- mesh_min = 47,56
- mesh_max = 190,210
- probe_count = 5,5
- =======================
- Extruder max_extrude_ratio=0.266081
- mcu 'mcu': Starting serial connect
- mcu 'mcu': Unable to open serial port: [Errno 2] could not open port /dev/ttyUSB0: [Errno 2] No such file or directory: '/dev/ttyUSB0'
- webhooks client 548024465360: New connection
- webhooks client 548024465360: Client info {'program': 'Moonraker', 'version': 'v0.9.3-125-g3129d89'}
- mcu 'mcu': Unable to open serial port: [Errno 2] could not open port /dev/ttyUSB0: [Errno 2] No such file or directory: '/dev/ttyUSB0'
- mcu 'mcu': Unable to open serial port: [Errno 2] could not open port /dev/ttyUSB0: [Errno 2] No such file or directory: '/dev/ttyUSB0'
- mcu 'mcu': Unable to open serial port: [Errno 2] could not open port /dev/ttyUSB0: [Errno 2] No such file or directory: '/dev/ttyUSB0'
- mcu 'mcu': Unable to open serial port: [Errno 2] could not open port /dev/ttyUSB0: [Errno 2] No such file or directory: '/dev/ttyUSB0'
- mcu 'mcu': Unable to open serial port: [Errno 2] could not open port /dev/ttyUSB0: [Errno 2] No such file or directory: '/dev/ttyUSB0'
- mcu 'mcu': Unable to open serial port: [Errno 2] could not open port /dev/ttyUSB0: [Errno 2] No such file or directory: '/dev/ttyUSB0'
- mcu 'mcu': Unable to open serial port: [Errno 2] could not open port /dev/ttyUSB0: [Errno 2] No such file or directory: '/dev/ttyUSB0'
- mcu 'mcu': Unable to open serial port: [Errno 2] could not open port /dev/ttyUSB0: [Errno 2] No such file or directory: '/dev/ttyUSB0'
- mcu 'mcu': Unable to open serial port: [Errno 2] could not open port /dev/ttyUSB0: [Errno 2] No such file or directory: '/dev/ttyUSB0'
- mcu 'mcu': Unable to open serial port: [Errno 2] could not open port /dev/ttyUSB0: [Errno 2] No such file or directory: '/dev/ttyUSB0'
- mcu 'mcu': Unable to open serial port: [Errno 2] could not open port /dev/ttyUSB0: [Errno 2] No such file or directory: '/dev/ttyUSB0'
- mcu 'mcu': Unable to open serial port: [Errno 2] could not open port /dev/ttyUSB0: [Errno 2] No such file or directory: '/dev/ttyUSB0'
- mcu 'mcu': Unable to open serial port: [Errno 2] could not open port /dev/ttyUSB0: [Errno 2] No such file or directory: '/dev/ttyUSB0'
- mcu 'mcu': Unable to open serial port: [Errno 2] could not open port /dev/ttyUSB0: [Errno 2] No such file or directory: '/dev/ttyUSB0'
- mcu 'mcu': Unable to open serial port: [Errno 2] could not open port /dev/ttyUSB0: [Errno 2] No such file or directory: '/dev/ttyUSB0'
- mcu 'mcu': Unable to open serial port: [Errno 2] could not open port /dev/ttyUSB0: [Errno 2] No such file or directory: '/dev/ttyUSB0'
- mcu 'mcu': Unable to open serial port: [Errno 2] could not open port /dev/ttyUSB0: [Errno 2] No such file or directory: '/dev/ttyUSB0'
- MCU error during connect
- Traceback (most recent call last):
- File "/home/pi/klipper/klippy/mcu.py", line 774, in _attach
- self._serial.connect_uart(self._serialport, self._baud, rts)
- File "/home/pi/klipper/klippy/serialhdl.py", line 191, in connect_uart
- self._error("Unable to connect")
- File "/home/pi/klipper/klippy/serialhdl.py", line 68, in _error
- raise error(self.warn_prefix + (msg % params))
- serialhdl.error: mcu 'mcu': Unable to connect
- During handling of the above exception, another exception occurred:
- Traceback (most recent call last):
- File "/home/pi/klipper/klippy/klippy.py", line 131, in _connect
- self.send_event("klippy:mcu_identify")
- File "/home/pi/klipper/klippy/klippy.py", line 227, in send_event
- return [cb(*params) for cb in self.event_handlers.get(event, [])]
- ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
- File "/home/pi/klipper/klippy/klippy.py", line 227, in <listcomp>
- return [cb(*params) for cb in self.event_handlers.get(event, [])]
- ^^^^^^^^^^^
- File "/home/pi/klipper/klippy/mcu.py", line 784, in _mcu_identify
- self._attach()
- File "/home/pi/klipper/klippy/mcu.py", line 779, in _attach
- raise error(str(e))
- mcu.error: mcu 'mcu': Unable to connect
- mcu 'mcu': Unable to connect
- Once the underlying issue is corrected, use the
- "FIRMWARE_RESTART" command to reset the firmware, reload the
- config, and restart the host software.
- Error configuring printer
- Build file /home/pi/klipper/klippy/../.config(1858): Tue Nov 18 19:44:05 2025
- ========= Last MCU build config =========
- # CONFIG_LOW_LEVEL_OPTIONS is not set
- CONFIG_MACH_AVR=y
- # CONFIG_MACH_ATSAM is not set
- # CONFIG_MACH_ATSAMD is not set
- # CONFIG_MACH_LPC176X is not set
- # CONFIG_MACH_STM32 is not set
- # CONFIG_MACH_HC32F460 is not set
- # CONFIG_MACH_RPXXXX is not set
- # CONFIG_MACH_PRU is not set
- # CONFIG_MACH_AR100 is not set
- # CONFIG_MACH_LINUX is not set
- # CONFIG_MACH_SIMU is not set
- CONFIG_AVR_SELECT=y
- CONFIG_BOARD_DIRECTORY="avr"
- CONFIG_MACH_atmega2560=y
- # CONFIG_MACH_atmega1280 is not set
- # CONFIG_MACH_at90usb1286 is not set
- # CONFIG_MACH_at90usb646 is not set
- # CONFIG_MACH_atmega32u4 is not set
- # CONFIG_MACH_atmega1284p is not set
- # CONFIG_MACH_atmega644p is not set
- # CONFIG_MACH_atmega328p is not set
- # CONFIG_MACH_atmega328 is not set
- # CONFIG_MACH_atmega168 is not set
- CONFIG_MCU="atmega2560"
- CONFIG_AVRDUDE_PROTOCOL="wiring"
- CONFIG_CLOCK_FREQ=16000000
- CONFIG_AVR_CLKPR=-1
- CONFIG_AVR_STACK_SIZE=256
- CONFIG_AVR_WATCHDOG=y
- CONFIG_SERIAL=y
- CONFIG_SERIAL_BAUD_U2X=y
- CONFIG_SERIAL_PORT=0
- CONFIG_SERIAL_BAUD=250000
- CONFIG_USB_VENDOR_ID=0x1d50
- CONFIG_USB_DEVICE_ID=0x614e
- CONFIG_USB_SERIAL_NUMBER="12345"
- CONFIG_WANT_ADC=y
- CONFIG_WANT_SPI=y
- CONFIG_WANT_SOFTWARE_SPI=y
- CONFIG_WANT_I2C=y
- CONFIG_WANT_SOFTWARE_I2C=y
- CONFIG_WANT_HARD_PWM=y
- CONFIG_WANT_BUTTONS=y
- CONFIG_WANT_TMCUART=y
- CONFIG_WANT_NEOPIXEL=y
- CONFIG_WANT_PULSE_COUNTER=y
- CONFIG_WANT_ST7920=y
- CONFIG_WANT_HD44780=y
- CONFIG_WANT_ADXL345=y
- CONFIG_WANT_LIS2DW=y
- CONFIG_WANT_MPU9250=y
- CONFIG_WANT_ICM20948=y
- CONFIG_WANT_THERMOCOUPLE=y
- CONFIG_WANT_HX71X=y
- CONFIG_WANT_ADS1220=y
- CONFIG_WANT_LDC1612=y
- CONFIG_WANT_SENSOR_ANGLE=y
- CONFIG_NEED_SENSOR_BULK=y
- CONFIG_WANT_LOAD_CELL_PROBE=y
- CONFIG_NEED_SOS_FILTER=y
- CONFIG_CANBUS_FREQUENCY=1000000
- CONFIG_INLINE_STEPPER_HACK=y
- CONFIG_HAVE_GPIO=y
- CONFIG_HAVE_GPIO_ADC=y
- CONFIG_HAVE_GPIO_SPI=y
- CONFIG_HAVE_GPIO_I2C=y
- CONFIG_HAVE_GPIO_HARD_PWM=y
- CONFIG_HAVE_STRICT_TIMING=y
- =======================
- No build file /home/pi/klipper/klippy/../out/klipper.dict
- No build file /home/pi/klipper/klippy/../out/klipper.elf
- Starting Klippy...
- Args: ['/home/pi/klipper/klippy/klippy.py', '/home/pi/printer_data/config/printer.cfg', '-l', '/home/pi/printer_data/logs/klippy.log', '-I', '/home/pi/printer_data/comms/klippy.serial', '-a', '/home/pi/printer_data/comms/klippy.sock']
- Git version: 'v0.13.0-403-gb4c7cf4a3'
- Branch: master
- Remote: origin
- Tracked URL: https://github.com/Klipper3d/klipper.git
- CPU: 4 core ?
- Device: Raspberry Pi 3 Model B Rev 1.2
- Linux: Linux version 6.12.47+rpt-rpi-v8 ([email protected]) (aarch64-linux-gnu-gcc-12 (Debian 12.2.0-14+deb12u1) 12.2.0, GNU ld (GNU Binutils for Debian) 2.40) #1 SMP PREEMPT Debian 1:6.12.47-1+rpt1~bookworm (2025-09-16)
- Python: '3.11.2 (main, Apr 28 2025, 14:11:48) [GCC 12.2.0]'
- Start printer at Tue Nov 18 20:02:20 2025 (1763496140.9 355.9)
- ===== Config file =====
- [virtual_sdcard]
- path = /home/klipper/printer_data/gcodes/
- on_error_gcode = CANCEL_PRINT
- [pause_resume]
- [display_status]
- [respond]
- [gcode_macro CANCEL_PRINT]
- description = Cancel the actual running print
- rename_existing = CANCEL_PRINT_BASE
- gcode =
- {% set client = printer['gcode_macro _CLIENT_VARIABLE']|default({}) %}
- {% set allow_park = client.park_at_cancel|default(false)|lower == 'true' %}
- {% set retract = client.cancel_retract|default(5.0)|abs %}
- {% set park_x = "" if (client.park_at_cancel_x|default(none) is none)
- else "X=" ~ client.park_at_cancel_x %}
- {% set park_y = "" if (client.park_at_cancel_y|default(none) is none)
- else "Y=" ~ client.park_at_cancel_y %}
- {% set custom_park = park_x|length > 0 or park_y|length > 0 %}
- {% if printer['gcode_macro RESUME'].restore_idle_timeout > 0 %}
- SET_IDLE_TIMEOUT TIMEOUT={printer['gcode_macro RESUME'].restore_idle_timeout}
- {% endif %}
- {% if (custom_park or not printer.pause_resume.is_paused) and allow_park %} _TOOLHEAD_PARK_PAUSE_CANCEL {park_x} {park_y} {% endif %}
- _CLIENT_RETRACT LENGTH={retract}
- TURN_OFF_HEATERS
- M106 S0
- {client.user_cancel_macro|default("")}
- SET_GCODE_VARIABLE MACRO=RESUME VARIABLE=idle_state VALUE=False
- SET_PAUSE_NEXT_LAYER ENABLE=0
- SET_PAUSE_AT_LAYER ENABLE=0 LAYER=0
- CANCEL_PRINT_BASE
- [gcode_macro PAUSE]
- description = Pause the actual running print
- rename_existing = PAUSE_BASE
- gcode =
- {% set client = printer['gcode_macro _CLIENT_VARIABLE']|default({}) %}
- {% set idle_timeout = client.idle_timeout|default(0) %}
- {% set temp = printer[printer.toolhead.extruder].target if printer.toolhead.extruder != '' else 0 %}
- {% set restore = False if printer.toolhead.extruder == ''
- else True if params.RESTORE|default(1)|int == 1 else False %}
- SET_GCODE_VARIABLE MACRO=RESUME VARIABLE=last_extruder_temp VALUE="{{'restore': restore, 'temp': temp}}"
- {% if idle_timeout > 0 %}
- SET_GCODE_VARIABLE MACRO=RESUME VARIABLE=restore_idle_timeout VALUE={printer.configfile.settings.idle_timeout.timeout}
- SET_IDLE_TIMEOUT TIMEOUT={idle_timeout}
- {% endif %}
- PAUSE_BASE
- {client.user_pause_macro|default("")}
- _TOOLHEAD_PARK_PAUSE_CANCEL {rawparams}
- [gcode_macro RESUME]
- description = Resume the actual running print
- rename_existing = RESUME_BASE
- variable_last_extruder_temp = {'restore': False, 'temp': 0}
- variable_restore_idle_timeout = 0
- variable_idle_state = False
- gcode =
- {% set client = printer['gcode_macro _CLIENT_VARIABLE']|default({}) %}
- {% set velocity = printer.configfile.settings.pause_resume.recover_velocity %}
- {% set sp_move = client.speed_move|default(velocity) %}
- {% set runout_resume = True if client.runout_sensor|default("") == ""
- else True if not printer[client.runout_sensor].enabled
- else printer[client.runout_sensor].filament_detected %}
- {% set can_extrude = True if printer.toolhead.extruder == ''
- else printer[printer.toolhead.extruder].can_extrude %}
- {% set do_resume = False %}
- {% set prompt_txt = [] %}
- {% if printer.idle_timeout.state|upper == "IDLE" or idle_state %}
- SET_GCODE_VARIABLE MACRO=RESUME VARIABLE=idle_state VALUE=False
- {% if last_extruder_temp.restore %}
- RESPOND TYPE=echo MSG='{"Restoring \"%s\" temperature to %3.1f\u00B0C, this may take some time" % (printer.toolhead.extruder, last_extruder_temp.temp) }'
- M109 S{last_extruder_temp.temp}
- {% set do_resume = True %}
- {% elif can_extrude %}
- {% set do_resume = True %}
- {% else %}
- RESPOND TYPE=error MSG='{"Resume aborted !!! \"%s\" not hot enough, please heat up again and press RESUME" % printer.toolhead.extruder}'
- {% set _d = prompt_txt.append("\"%s\" not hot enough, please heat up again and press RESUME" % printer.toolhead.extruder) %}
- {% endif %}
- {% elif can_extrude %}
- {% set do_resume = True %}
- {% else %}
- RESPOND TYPE=error MSG='{"Resume aborted !!! \"%s\" not hot enough, please heat up again and press RESUME" % printer.toolhead.extruder}'
- {% set _d = prompt_txt.append("\"%s\" not hot enough, please heat up again and press RESUME" % printer.toolhead.extruder) %}
- {% endif %}
- {% if runout_resume %}
- {% if do_resume %}
- {% if restore_idle_timeout > 0 %} SET_IDLE_TIMEOUT TIMEOUT={restore_idle_timeout} {% endif %}
- {client.user_resume_macro|default("")}
- _CLIENT_EXTRUDE
- RESUME_BASE VELOCITY={params.VELOCITY|default(sp_move)}
- {% endif %}
- {% else %}
- RESPOND TYPE=error MSG='{"Resume aborted !!! \"%s\" detects no filament, please load filament and press RESUME" % (client.runout_sensor.split(" "))[1]}'
- {% set _d = prompt_txt.append("\"%s\" detects no filament, please load filament and press RESUME" % (client.runout_sensor.split(" "))[1]) %}
- {% endif %}
- {% if not (runout_resume and do_resume) %}
- RESPOND TYPE=command MSG="action:prompt_begin RESUME aborted !!!"
- {% for element in prompt_txt %}
- RESPOND TYPE=command MSG='{"action:prompt_text %s" % element}'
- {% endfor %}
- RESPOND TYPE=command MSG="action:prompt_footer_button Ok|RESPOND TYPE=command MSG=action:prompt_end|info"
- RESPOND TYPE=command MSG="action:prompt_show"
- {% endif %}
- [gcode_macro SET_PAUSE_NEXT_LAYER]
- description = Enable a pause if the next layer is reached
- gcode =
- {% set pause_next_layer = printer['gcode_macro SET_PRINT_STATS_INFO'].pause_next_layer %}
- {% set ENABLE = params.ENABLE|default(1)|int != 0 %}
- {% set MACRO = params.MACRO|default(pause_next_layer.call, True) %}
- SET_GCODE_VARIABLE MACRO=SET_PRINT_STATS_INFO VARIABLE=pause_next_layer VALUE="{{ 'enable': ENABLE, 'call': MACRO }}"
- [gcode_macro SET_PAUSE_AT_LAYER]
- description = Enable/disable a pause if a given layer number is reached
- gcode =
- {% set pause_at_layer = printer['gcode_macro SET_PRINT_STATS_INFO'].pause_at_layer %}
- {% set ENABLE = params.ENABLE|int != 0 if params.ENABLE is defined
- else params.LAYER is defined %}
- {% set LAYER = params.LAYER|default(pause_at_layer.layer)|int %}
- {% set MACRO = params.MACRO|default(pause_at_layer.call, True) %}
- SET_GCODE_VARIABLE MACRO=SET_PRINT_STATS_INFO VARIABLE=pause_at_layer VALUE="{{ 'enable': ENABLE, 'layer': LAYER, 'call': MACRO }}"
- [gcode_macro SET_PRINT_STATS_INFO]
- rename_existing = SET_PRINT_STATS_INFO_BASE
- description = Overwrite, to get pause_next_layer and pause_at_layer feature
- variable_pause_next_layer = { 'enable': False, 'call': "PAUSE" }
- variable_pause_at_layer = { 'enable': False, 'layer': 0, 'call': "PAUSE" }
- gcode =
- {% if pause_next_layer.enable %}
- RESPOND TYPE=echo MSG='{"%s, forced by pause_next_layer" % pause_next_layer.call}'
- {pause_next_layer.call}
- SET_PAUSE_NEXT_LAYER ENABLE=0
- {% elif pause_at_layer.enable and params.CURRENT_LAYER is defined and params.CURRENT_LAYER|int == pause_at_layer.layer %}
- RESPOND TYPE=echo MSG='{"%s, forced by pause_at_layer [%d]" % (pause_at_layer.call, pause_at_layer.layer)}'
- {pause_at_layer.call}
- SET_PAUSE_AT_LAYER ENABLE=0
- {% endif %}
- SET_PRINT_STATS_INFO_BASE {rawparams}
- [gcode_macro _TOOLHEAD_PARK_PAUSE_CANCEL]
- description = Helper: park toolhead used in PAUSE and CANCEL_PRINT
- gcode =
- {% set client = printer['gcode_macro _CLIENT_VARIABLE']|default({}) %}
- {% set velocity = printer.configfile.settings.pause_resume.recover_velocity %}
- {% set use_custom = client.use_custom_pos|default(false)|lower == 'true' %}
- {% set custom_park_x = client.custom_park_x|default(0.0) %}
- {% set custom_park_y = client.custom_park_y|default(0.0) %}
- {% set park_dz = client.custom_park_dz|default(2.0)|abs %}
- {% set sp_hop = client.speed_hop|default(15) * 60 %}
- {% set sp_move = client.speed_move|default(velocity) * 60 %}
- {% set origin = printer.gcode_move.homing_origin %}
- {% set act = printer.gcode_move.gcode_position %}
- {% set max = printer.toolhead.axis_maximum %}
- {% set cone = printer.toolhead.cone_start_z|default(max.z) %}
- {% set round_bed = True if printer.configfile.settings.printer.kinematics is in ['delta','polar','rotary_delta','winch']
- else False %}
- {% set z_min = params.Z_MIN|default(0)|float %}
- {% set z_park = [[(act.z + park_dz), z_min]|max, (max.z - origin.z)]|min %}
- {% set x_park = params.X if params.X is defined
- else custom_park_x if use_custom
- else 0.0 if round_bed
- else (max.x - 5.0) %}
- {% set y_park = params.Y if params.Y is defined
- else custom_park_y if use_custom
- else (max.y - 5.0) if round_bed and z_park < cone
- else 0.0 if round_bed
- else (max.y - 5.0) %}
- _CLIENT_RETRACT
- {% if "xyz" in printer.toolhead.homed_axes %}
- G90
- G1 Z{z_park} F{sp_hop}
- G1 X{x_park} Y{y_park} F{sp_move}
- {% if not printer.gcode_move.absolute_coordinates %} G91 {% endif %}
- {% else %}
- RESPOND TYPE=echo MSG='Printer not homed'
- {% endif %}
- [gcode_macro _CLIENT_EXTRUDE]
- description = Extrudes, if the extruder is hot enough
- gcode =
- {% set client = printer['gcode_macro _CLIENT_VARIABLE']|default({}) %}
- {% set use_fw_retract = (client.use_fw_retract|default(false)|lower == 'true') and (printer.firmware_retraction is defined) %}
- {% set length = params.LENGTH|default(client.unretract)|default(1.0)|float %}
- {% set speed = params.SPEED|default(client.speed_unretract)|default(35) %}
- {% set absolute_extrude = printer.gcode_move.absolute_extrude %}
- {% if printer.toolhead.extruder != '' %}
- {% if printer[printer.toolhead.extruder].can_extrude %}
- {% if use_fw_retract %}
- {% if length < 0 %}
- G10
- {% else %}
- G11
- {% endif %}
- {% else %}
- M83
- G1 E{length} F{(speed|float|abs) * 60}
- {% if absolute_extrude %}
- M82
- {% endif %}
- {% endif %}
- {% else %}
- RESPOND TYPE=echo MSG='{"\"%s\" not hot enough" % printer.toolhead.extruder}'
- {% endif %}
- {% endif %}
- [gcode_macro _CLIENT_RETRACT]
- description = Retracts, if the extruder is hot enough
- gcode =
- {% set client = printer['gcode_macro _CLIENT_VARIABLE']|default({}) %}
- {% set length = params.LENGTH|default(client.retract)|default(1.0)|float %}
- {% set speed = params.SPEED|default(client.speed_retract)|default(35) %}
- _CLIENT_EXTRUDE LENGTH=-{length|float|abs} SPEED={speed|float|abs}
- [gcode_macro _CLIENT_LINEAR_MOVE]
- description = Linear move with save and restore of the gcode state
- gcode =
- {% set x_move = "X" ~ params.X if params.X is defined else "" %}
- {% set y_move = "Y" ~ params.Y if params.Y is defined else "" %}
- {% set z_move = "Z" ~ params.Z if params.Z is defined else "" %}
- {% set e_move = "E" ~ params.E if params.E is defined else "" %}
- {% set rate = "F" ~ params.F if params.F is defined else "" %}
- {% set ABSOLUTE = params.ABSOLUTE | default(0) | int != 0 %}
- {% set ABSOLUTE_E = params.ABSOLUTE_E | default(0) | int != 0 %}
- SAVE_GCODE_STATE NAME=_client_movement
- {% if x_move or y_move or z_move %}
- G9{ 0 if ABSOLUTE else 1 }
- {% endif %}
- {% if e_move %}
- M8{ 2 if ABSOLUTE_E else 3 }
- {% endif %}
- G1 { x_move } { y_move } { z_move } { e_move } { rate }
- RESTORE_GCODE_STATE NAME=_client_movement
- [stepper_x]
- step_pin = PD7
- dir_pin = !PC5
- enable_pin = !PD6
- microsteps = 16
- rotation_distance = 40
- endstop_pin = ^PC2
- position_endstop = 0
- position_max = 235
- homing_speed = 25
- [stepper_y]
- step_pin = PC6
- dir_pin = !PC7
- enable_pin = !PD6
- microsteps = 16
- rotation_distance = 40
- endstop_pin = ^PC3
- position_endstop = 0
- position_max = 235
- homing_speed = 25
- [stepper_z]
- step_pin = PB3
- dir_pin = PB2
- enable_pin = !PA5
- microsteps = 16
- rotation_distance = 8
- endstop_pin = probe:z_virtual_endstop
- position_min = -5
- position_max = 240
- [extruder]
- max_extrude_only_distance = 100.0
- step_pin = PB1
- dir_pin = !PB0
- enable_pin = !PD6
- microsteps = 16
- rotation_distance = 33.683
- nozzle_diameter = 0.400
- filament_diameter = 1.750
- heater_pin = PD5
- sensor_type = EPCOS 100K B57560G104F
- sensor_pin = PA7
- control = pid
- pid_kp = 29.211
- pid_ki = 10.819
- pid_kd = 19.717
- min_temp = 0
- max_temp = 300
- [heater_bed]
- heater_pin = PD4
- sensor_type = EPCOS 100K B57560G104F
- sensor_pin = PA6
- control = pid
- pid_kp = 73.853
- pid_ki = 1.901
- pid_kd = 717.301
- min_temp = 0
- max_temp = 130
- [fan]
- pin = PB4
- [mcu]
- serial = /dev/ttyUSB0
- baud = 115200
- [printer]
- kinematics = cartesian
- max_velocity = 500
- max_accel = 6000
- max_z_velocity = 5
- max_z_accel = 100
- [bed_screws]
- screw1 = 30.5, 37
- screw2 = 30.5, 207
- screw3 = 204.5, 207
- screw4 = 204.5, 37
- [display]
- lcd_type = st7920
- cs_pin = PA3
- sclk_pin = PA1
- sid_pin = PC1
- encoder_pins = ^PD2, ^PD3
- click_pin = ^!PC0
- [bltouch]
- sensor_pin = ^PC4
- control_pin = PA4
- x_offset = -45
- z_offset = 2.540
- speed = 10
- samples = 3
- probe_with_touch_mode = False
- samples_tolerance = 0.1
- sample_retract_dist = 5.0
- [safe_z_home]
- home_xy_position = 117, 117
- speed = 25
- z_hop = 5
- z_hop_speed = 10
- [bed_mesh]
- speed = 25
- horizontal_move_z = 5
- mesh_min = 47,56
- mesh_max = 190,210
- probe_count = 5,5
- =======================
- Extruder max_extrude_ratio=0.266081
- mcu 'mcu': Starting serial connect
- mcu 'mcu': Unable to open serial port: [Errno 2] could not open port /dev/ttyUSB0: [Errno 2] No such file or directory: '/dev/ttyUSB0'
- webhooks client 548127052688: New connection
- webhooks client 548127052688: Client info {'program': 'Moonraker', 'version': 'v0.9.3-125-g3129d89'}
- mcu 'mcu': Unable to open serial port: [Errno 2] could not open port /dev/ttyUSB0: [Errno 2] No such file or directory: '/dev/ttyUSB0'
- mcu 'mcu': Unable to open serial port: [Errno 2] could not open port /dev/ttyUSB0: [Errno 2] No such file or directory: '/dev/ttyUSB0'
- mcu 'mcu': Unable to open serial port: [Errno 2] could not open port /dev/ttyUSB0: [Errno 2] No such file or directory: '/dev/ttyUSB0'
- mcu 'mcu': Unable to open serial port: [Errno 2] could not open port /dev/ttyUSB0: [Errno 2] No such file or directory: '/dev/ttyUSB0'
- mcu 'mcu': Unable to open serial port: [Errno 2] could not open port /dev/ttyUSB0: [Errno 2] No such file or directory: '/dev/ttyUSB0'
- mcu 'mcu': Unable to open serial port: [Errno 2] could not open port /dev/ttyUSB0: [Errno 2] No such file or directory: '/dev/ttyUSB0'
- mcu 'mcu': Unable to open serial port: [Errno 2] could not open port /dev/ttyUSB0: [Errno 2] No such file or directory: '/dev/ttyUSB0'
- mcu 'mcu': Unable to open serial port: [Errno 2] could not open port /dev/ttyUSB0: [Errno 2] No such file or directory: '/dev/ttyUSB0'
- mcu 'mcu': Unable to open serial port: [Errno 2] could not open port /dev/ttyUSB0: [Errno 2] No such file or directory: '/dev/ttyUSB0'
- mcu 'mcu': Unable to open serial port: [Errno 2] could not open port /dev/ttyUSB0: [Errno 2] No such file or directory: '/dev/ttyUSB0'
- mcu 'mcu': Unable to open serial port: [Errno 2] could not open port /dev/ttyUSB0: [Errno 2] No such file or directory: '/dev/ttyUSB0'
- mcu 'mcu': Unable to open serial port: [Errno 2] could not open port /dev/ttyUSB0: [Errno 2] No such file or directory: '/dev/ttyUSB0'
- mcu 'mcu': Unable to open serial port: [Errno 2] could not open port /dev/ttyUSB0: [Errno 2] No such file or directory: '/dev/ttyUSB0'
- mcu 'mcu': Unable to open serial port: [Errno 2] could not open port /dev/ttyUSB0: [Errno 2] No such file or directory: '/dev/ttyUSB0'
- mcu 'mcu': Unable to open serial port: [Errno 2] could not open port /dev/ttyUSB0: [Errno 2] No such file or directory: '/dev/ttyUSB0'
- mcu 'mcu': Unable to open serial port: [Errno 2] could not open port /dev/ttyUSB0: [Errno 2] No such file or directory: '/dev/ttyUSB0'
- mcu 'mcu': Unable to open serial port: [Errno 2] could not open port /dev/ttyUSB0: [Errno 2] No such file or directory: '/dev/ttyUSB0'
- MCU error during connect
- Traceback (most recent call last):
- File "/home/pi/klipper/klippy/mcu.py", line 774, in _attach
- self._serial.connect_uart(self._serialport, self._baud, rts)
- File "/home/pi/klipper/klippy/serialhdl.py", line 191, in connect_uart
- self._error("Unable to connect")
- File "/home/pi/klipper/klippy/serialhdl.py", line 68, in _error
- raise error(self.warn_prefix + (msg % params))
- serialhdl.error: mcu 'mcu': Unable to connect
- During handling of the above exception, another exception occurred:
- Traceback (most recent call last):
- File "/home/pi/klipper/klippy/klippy.py", line 131, in _connect
- self.send_event("klippy:mcu_identify")
- File "/home/pi/klipper/klippy/klippy.py", line 227, in send_event
- return [cb(*params) for cb in self.event_handlers.get(event, [])]
- ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
- File "/home/pi/klipper/klippy/klippy.py", line 227, in <listcomp>
- return [cb(*params) for cb in self.event_handlers.get(event, [])]
- ^^^^^^^^^^^
- File "/home/pi/klipper/klippy/mcu.py", line 784, in _mcu_identify
- self._attach()
- File "/home/pi/klipper/klippy/mcu.py", line 779, in _attach
- raise error(str(e))
- mcu.error: mcu 'mcu': Unable to connect
- mcu 'mcu': Unable to connect
- Once the underlying issue is corrected, use the
- "FIRMWARE_RESTART" command to reset the firmware, reload the
- config, and restart the host software.
- Error configuring printer
- Build file /home/pi/klipper/klippy/../.config(1272): Tue Nov 18 20:00:58 2025
- ========= Last MCU build config =========
- # CONFIG_LOW_LEVEL_OPTIONS is not set
- # CONFIG_MACH_AVR is not set
- # CONFIG_MACH_ATSAM is not set
- # CONFIG_MACH_ATSAMD is not set
- # CONFIG_MACH_LPC176X is not set
- # CONFIG_MACH_STM32 is not set
- # CONFIG_MACH_HC32F460 is not set
- # CONFIG_MACH_RPXXXX is not set
- # CONFIG_MACH_PRU is not set
- # CONFIG_MACH_AR100 is not set
- CONFIG_MACH_LINUX=y
- # CONFIG_MACH_SIMU is not set
- CONFIG_BOARD_DIRECTORY="linux"
- CONFIG_CLOCK_FREQ=50000000
- CONFIG_LINUX_SELECT=y
- CONFIG_USB_VENDOR_ID=0x1d50
- CONFIG_USB_DEVICE_ID=0x614e
- CONFIG_USB_SERIAL_NUMBER="12345"
- CONFIG_WANT_ADC=y
- CONFIG_WANT_SPI=y
- CONFIG_WANT_SOFTWARE_SPI=y
- CONFIG_WANT_I2C=y
- CONFIG_WANT_SOFTWARE_I2C=y
- CONFIG_WANT_HARD_PWM=y
- CONFIG_WANT_BUTTONS=y
- CONFIG_WANT_TMCUART=y
- CONFIG_WANT_NEOPIXEL=y
- CONFIG_WANT_PULSE_COUNTER=y
- CONFIG_WANT_ST7920=y
- CONFIG_WANT_HD44780=y
- CONFIG_WANT_ADXL345=y
- CONFIG_WANT_LIS2DW=y
- CONFIG_WANT_MPU9250=y
- CONFIG_WANT_ICM20948=y
- CONFIG_WANT_THERMOCOUPLE=y
- CONFIG_WANT_HX71X=y
- CONFIG_WANT_ADS1220=y
- CONFIG_WANT_LDC1612=y
- CONFIG_WANT_SENSOR_ANGLE=y
- CONFIG_NEED_SENSOR_BULK=y
- CONFIG_WANT_LOAD_CELL_PROBE=y
- CONFIG_NEED_SOS_FILTER=y
- CONFIG_CANBUS_FREQUENCY=1000000
- CONFIG_INLINE_STEPPER_HACK=y
- CONFIG_HAVE_GPIO=y
- CONFIG_HAVE_GPIO_ADC=y
- CONFIG_HAVE_GPIO_SPI=y
- CONFIG_HAVE_GPIO_I2C=y
- CONFIG_HAVE_GPIO_HARD_PWM=y
- =======================
- Build file /home/pi/klipper/klippy/../out/klipper.dict(11210): Tue Nov 18 20:01:38 2025
- Last MCU build version: v0.13.0-403-gb4c7cf4a3
- Last MCU build tools: gcc: (Debian 12.2.0-14+deb12u1) 12.2.0 binutils: (GNU Binutils for Debian) 2.40
- Last MCU build config: ADC_MAX=4095 CLOCK_FREQ=50000000 MCU=linux PCA9685_MAX=4096 PWM_MAX=32768 STATS_SUMSQ_BASE=256 STEPPER_STEP_BOTH_EDGE=1
- Build file /home/pi/klipper/klippy/../out/klipper.elf(897288): Tue Nov 18 20:01:51 2025
- Attempting MCU 'mcu' reset
- Unhandled exception during post run
- Traceback (most recent call last):
- File "/home/pi/klippy-env/lib/python3.11/site-packages/serial/serialposix.py", line 265, in open
- self.fd = os.open(self.portstr, os.O_RDWR | os.O_NOCTTY | os.O_NONBLOCK)
- ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
- FileNotFoundError: [Errno 2] No such file or directory: '/dev/ttyUSB0'
- During handling of the above exception, another exception occurred:
- Traceback (most recent call last):
- File "/home/pi/klipper/klippy/klippy.py", line 194, in run
- self.send_event("klippy:firmware_restart")
- File "/home/pi/klipper/klippy/klippy.py", line 227, in send_event
- return [cb(*params) for cb in self.event_handlers.get(event, [])]
- ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
- File "/home/pi/klipper/klippy/klippy.py", line 227, in <listcomp>
- return [cb(*params) for cb in self.event_handlers.get(event, [])]
- ^^^^^^^^^^^
- File "/home/pi/klipper/klippy/mcu.py", line 672, in _firmware_restart
- self._restart_arduino()
- File "/home/pi/klipper/klippy/mcu.py", line 632, in _restart_arduino
- serialhdl.arduino_reset(serialport, self._reactor)
- File "/home/pi/klipper/klippy/serialhdl.py", line 392, in arduino_reset
- ser = serial.Serial(serialport, 2400, timeout=0, exclusive=True)
- ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
- File "/home/pi/klippy-env/lib/python3.11/site-packages/serial/serialutil.py", line 240, in __init__
- self.open()
- File "/home/pi/klippy-env/lib/python3.11/site-packages/serial/serialposix.py", line 268, in open
- raise SerialException(msg.errno, "could not open port {}: {}".format(self._port, msg))
- serial.serialutil.SerialException: [Errno 2] could not open port /dev/ttyUSB0: [Errno 2] No such file or directory: '/dev/ttyUSB0'
- Restarting printer
- Start printer at Tue Nov 18 20:05:20 2025 (1763496321.0 536.0)
- ===== Config file =====
- [virtual_sdcard]
- path = /home/klipper/printer_data/gcodes/
- on_error_gcode = CANCEL_PRINT
- [pause_resume]
- [display_status]
- [respond]
- [gcode_macro CANCEL_PRINT]
- description = Cancel the actual running print
- rename_existing = CANCEL_PRINT_BASE
- gcode =
- {% set client = printer['gcode_macro _CLIENT_VARIABLE']|default({}) %}
- {% set allow_park = client.park_at_cancel|default(false)|lower == 'true' %}
- {% set retract = client.cancel_retract|default(5.0)|abs %}
- {% set park_x = "" if (client.park_at_cancel_x|default(none) is none)
- else "X=" ~ client.park_at_cancel_x %}
- {% set park_y = "" if (client.park_at_cancel_y|default(none) is none)
- else "Y=" ~ client.park_at_cancel_y %}
- {% set custom_park = park_x|length > 0 or park_y|length > 0 %}
- {% if printer['gcode_macro RESUME'].restore_idle_timeout > 0 %}
- SET_IDLE_TIMEOUT TIMEOUT={printer['gcode_macro RESUME'].restore_idle_timeout}
- {% endif %}
- {% if (custom_park or not printer.pause_resume.is_paused) and allow_park %} _TOOLHEAD_PARK_PAUSE_CANCEL {park_x} {park_y} {% endif %}
- _CLIENT_RETRACT LENGTH={retract}
- TURN_OFF_HEATERS
- M106 S0
- {client.user_cancel_macro|default("")}
- SET_GCODE_VARIABLE MACRO=RESUME VARIABLE=idle_state VALUE=False
- SET_PAUSE_NEXT_LAYER ENABLE=0
- SET_PAUSE_AT_LAYER ENABLE=0 LAYER=0
- CANCEL_PRINT_BASE
- [gcode_macro PAUSE]
- description = Pause the actual running print
- rename_existing = PAUSE_BASE
- gcode =
- {% set client = printer['gcode_macro _CLIENT_VARIABLE']|default({}) %}
- {% set idle_timeout = client.idle_timeout|default(0) %}
- {% set temp = printer[printer.toolhead.extruder].target if printer.toolhead.extruder != '' else 0 %}
- {% set restore = False if printer.toolhead.extruder == ''
- else True if params.RESTORE|default(1)|int == 1 else False %}
- SET_GCODE_VARIABLE MACRO=RESUME VARIABLE=last_extruder_temp VALUE="{{'restore': restore, 'temp': temp}}"
- {% if idle_timeout > 0 %}
- SET_GCODE_VARIABLE MACRO=RESUME VARIABLE=restore_idle_timeout VALUE={printer.configfile.settings.idle_timeout.timeout}
- SET_IDLE_TIMEOUT TIMEOUT={idle_timeout}
- {% endif %}
- PAUSE_BASE
- {client.user_pause_macro|default("")}
- _TOOLHEAD_PARK_PAUSE_CANCEL {rawparams}
- [gcode_macro RESUME]
- description = Resume the actual running print
- rename_existing = RESUME_BASE
- variable_last_extruder_temp = {'restore': False, 'temp': 0}
- variable_restore_idle_timeout = 0
- variable_idle_state = False
- gcode =
- {% set client = printer['gcode_macro _CLIENT_VARIABLE']|default({}) %}
- {% set velocity = printer.configfile.settings.pause_resume.recover_velocity %}
- {% set sp_move = client.speed_move|default(velocity) %}
- {% set runout_resume = True if client.runout_sensor|default("") == ""
- else True if not printer[client.runout_sensor].enabled
- else printer[client.runout_sensor].filament_detected %}
- {% set can_extrude = True if printer.toolhead.extruder == ''
- else printer[printer.toolhead.extruder].can_extrude %}
- {% set do_resume = False %}
- {% set prompt_txt = [] %}
- {% if printer.idle_timeout.state|upper == "IDLE" or idle_state %}
- SET_GCODE_VARIABLE MACRO=RESUME VARIABLE=idle_state VALUE=False
- {% if last_extruder_temp.restore %}
- RESPOND TYPE=echo MSG='{"Restoring \"%s\" temperature to %3.1f\u00B0C, this may take some time" % (printer.toolhead.extruder, last_extruder_temp.temp) }'
- M109 S{last_extruder_temp.temp}
- {% set do_resume = True %}
- {% elif can_extrude %}
- {% set do_resume = True %}
- {% else %}
- RESPOND TYPE=error MSG='{"Resume aborted !!! \"%s\" not hot enough, please heat up again and press RESUME" % printer.toolhead.extruder}'
- {% set _d = prompt_txt.append("\"%s\" not hot enough, please heat up again and press RESUME" % printer.toolhead.extruder) %}
- {% endif %}
- {% elif can_extrude %}
- {% set do_resume = True %}
- {% else %}
- RESPOND TYPE=error MSG='{"Resume aborted !!! \"%s\" not hot enough, please heat up again and press RESUME" % printer.toolhead.extruder}'
- {% set _d = prompt_txt.append("\"%s\" not hot enough, please heat up again and press RESUME" % printer.toolhead.extruder) %}
- {% endif %}
- {% if runout_resume %}
- {% if do_resume %}
- {% if restore_idle_timeout > 0 %} SET_IDLE_TIMEOUT TIMEOUT={restore_idle_timeout} {% endif %}
- {client.user_resume_macro|default("")}
- _CLIENT_EXTRUDE
- RESUME_BASE VELOCITY={params.VELOCITY|default(sp_move)}
- {% endif %}
- {% else %}
- RESPOND TYPE=error MSG='{"Resume aborted !!! \"%s\" detects no filament, please load filament and press RESUME" % (client.runout_sensor.split(" "))[1]}'
- {% set _d = prompt_txt.append("\"%s\" detects no filament, please load filament and press RESUME" % (client.runout_sensor.split(" "))[1]) %}
- {% endif %}
- {% if not (runout_resume and do_resume) %}
- RESPOND TYPE=command MSG="action:prompt_begin RESUME aborted !!!"
- {% for element in prompt_txt %}
- RESPOND TYPE=command MSG='{"action:prompt_text %s" % element}'
- {% endfor %}
- RESPOND TYPE=command MSG="action:prompt_footer_button Ok|RESPOND TYPE=command MSG=action:prompt_end|info"
- RESPOND TYPE=command MSG="action:prompt_show"
- {% endif %}
- [gcode_macro SET_PAUSE_NEXT_LAYER]
- description = Enable a pause if the next layer is reached
- gcode =
- {% set pause_next_layer = printer['gcode_macro SET_PRINT_STATS_INFO'].pause_next_layer %}
- {% set ENABLE = params.ENABLE|default(1)|int != 0 %}
- {% set MACRO = params.MACRO|default(pause_next_layer.call, True) %}
- SET_GCODE_VARIABLE MACRO=SET_PRINT_STATS_INFO VARIABLE=pause_next_layer VALUE="{{ 'enable': ENABLE, 'call': MACRO }}"
- [gcode_macro SET_PAUSE_AT_LAYER]
- description = Enable/disable a pause if a given layer number is reached
- gcode =
- {% set pause_at_layer = printer['gcode_macro SET_PRINT_STATS_INFO'].pause_at_layer %}
- {% set ENABLE = params.ENABLE|int != 0 if params.ENABLE is defined
- else params.LAYER is defined %}
- {% set LAYER = params.LAYER|default(pause_at_layer.layer)|int %}
- {% set MACRO = params.MACRO|default(pause_at_layer.call, True) %}
- SET_GCODE_VARIABLE MACRO=SET_PRINT_STATS_INFO VARIABLE=pause_at_layer VALUE="{{ 'enable': ENABLE, 'layer': LAYER, 'call': MACRO }}"
- [gcode_macro SET_PRINT_STATS_INFO]
- rename_existing = SET_PRINT_STATS_INFO_BASE
- description = Overwrite, to get pause_next_layer and pause_at_layer feature
- variable_pause_next_layer = { 'enable': False, 'call': "PAUSE" }
- variable_pause_at_layer = { 'enable': False, 'layer': 0, 'call': "PAUSE" }
- gcode =
- {% if pause_next_layer.enable %}
- RESPOND TYPE=echo MSG='{"%s, forced by pause_next_layer" % pause_next_layer.call}'
- {pause_next_layer.call}
- SET_PAUSE_NEXT_LAYER ENABLE=0
- {% elif pause_at_layer.enable and params.CURRENT_LAYER is defined and params.CURRENT_LAYER|int == pause_at_layer.layer %}
- RESPOND TYPE=echo MSG='{"%s, forced by pause_at_layer [%d]" % (pause_at_layer.call, pause_at_layer.layer)}'
- {pause_at_layer.call}
- SET_PAUSE_AT_LAYER ENABLE=0
- {% endif %}
- SET_PRINT_STATS_INFO_BASE {rawparams}
- [gcode_macro _TOOLHEAD_PARK_PAUSE_CANCEL]
- description = Helper: park toolhead used in PAUSE and CANCEL_PRINT
- gcode =
- {% set client = printer['gcode_macro _CLIENT_VARIABLE']|default({}) %}
- {% set velocity = printer.configfile.settings.pause_resume.recover_velocity %}
- {% set use_custom = client.use_custom_pos|default(false)|lower == 'true' %}
- {% set custom_park_x = client.custom_park_x|default(0.0) %}
- {% set custom_park_y = client.custom_park_y|default(0.0) %}
- {% set park_dz = client.custom_park_dz|default(2.0)|abs %}
- {% set sp_hop = client.speed_hop|default(15) * 60 %}
- {% set sp_move = client.speed_move|default(velocity) * 60 %}
- {% set origin = printer.gcode_move.homing_origin %}
- {% set act = printer.gcode_move.gcode_position %}
- {% set max = printer.toolhead.axis_maximum %}
- {% set cone = printer.toolhead.cone_start_z|default(max.z) %}
- {% set round_bed = True if printer.configfile.settings.printer.kinematics is in ['delta','polar','rotary_delta','winch']
- else False %}
- {% set z_min = params.Z_MIN|default(0)|float %}
- {% set z_park = [[(act.z + park_dz), z_min]|max, (max.z - origin.z)]|min %}
- {% set x_park = params.X if params.X is defined
- else custom_park_x if use_custom
- else 0.0 if round_bed
- else (max.x - 5.0) %}
- {% set y_park = params.Y if params.Y is defined
- else custom_park_y if use_custom
- else (max.y - 5.0) if round_bed and z_park < cone
- else 0.0 if round_bed
- else (max.y - 5.0) %}
- _CLIENT_RETRACT
- {% if "xyz" in printer.toolhead.homed_axes %}
- G90
- G1 Z{z_park} F{sp_hop}
- G1 X{x_park} Y{y_park} F{sp_move}
- {% if not printer.gcode_move.absolute_coordinates %} G91 {% endif %}
- {% else %}
- RESPOND TYPE=echo MSG='Printer not homed'
- {% endif %}
- [gcode_macro _CLIENT_EXTRUDE]
- description = Extrudes, if the extruder is hot enough
- gcode =
- {% set client = printer['gcode_macro _CLIENT_VARIABLE']|default({}) %}
- {% set use_fw_retract = (client.use_fw_retract|default(false)|lower == 'true') and (printer.firmware_retraction is defined) %}
- {% set length = params.LENGTH|default(client.unretract)|default(1.0)|float %}
- {% set speed = params.SPEED|default(client.speed_unretract)|default(35) %}
- {% set absolute_extrude = printer.gcode_move.absolute_extrude %}
- {% if printer.toolhead.extruder != '' %}
- {% if printer[printer.toolhead.extruder].can_extrude %}
- {% if use_fw_retract %}
- {% if length < 0 %}
- G10
- {% else %}
- G11
- {% endif %}
- {% else %}
- M83
- G1 E{length} F{(speed|float|abs) * 60}
- {% if absolute_extrude %}
- M82
- {% endif %}
- {% endif %}
- {% else %}
- RESPOND TYPE=echo MSG='{"\"%s\" not hot enough" % printer.toolhead.extruder}'
- {% endif %}
- {% endif %}
- [gcode_macro _CLIENT_RETRACT]
- description = Retracts, if the extruder is hot enough
- gcode =
- {% set client = printer['gcode_macro _CLIENT_VARIABLE']|default({}) %}
- {% set length = params.LENGTH|default(client.retract)|default(1.0)|float %}
- {% set speed = params.SPEED|default(client.speed_retract)|default(35) %}
- _CLIENT_EXTRUDE LENGTH=-{length|float|abs} SPEED={speed|float|abs}
- [gcode_macro _CLIENT_LINEAR_MOVE]
- description = Linear move with save and restore of the gcode state
- gcode =
- {% set x_move = "X" ~ params.X if params.X is defined else "" %}
- {% set y_move = "Y" ~ params.Y if params.Y is defined else "" %}
- {% set z_move = "Z" ~ params.Z if params.Z is defined else "" %}
- {% set e_move = "E" ~ params.E if params.E is defined else "" %}
- {% set rate = "F" ~ params.F if params.F is defined else "" %}
- {% set ABSOLUTE = params.ABSOLUTE | default(0) | int != 0 %}
- {% set ABSOLUTE_E = params.ABSOLUTE_E | default(0) | int != 0 %}
- SAVE_GCODE_STATE NAME=_client_movement
- {% if x_move or y_move or z_move %}
- G9{ 0 if ABSOLUTE else 1 }
- {% endif %}
- {% if e_move %}
- M8{ 2 if ABSOLUTE_E else 3 }
- {% endif %}
- G1 { x_move } { y_move } { z_move } { e_move } { rate }
- RESTORE_GCODE_STATE NAME=_client_movement
- [stepper_x]
- step_pin = PD7
- dir_pin = !PC5
- enable_pin = !PD6
- microsteps = 16
- rotation_distance = 40
- endstop_pin = ^PC2
- position_endstop = 0
- position_max = 235
- homing_speed = 25
- [stepper_y]
- step_pin = PC6
- dir_pin = !PC7
- enable_pin = !PD6
- microsteps = 16
- rotation_distance = 40
- endstop_pin = ^PC3
- position_endstop = 0
- position_max = 235
- homing_speed = 25
- [stepper_z]
- step_pin = PB3
- dir_pin = PB2
- enable_pin = !PA5
- microsteps = 16
- rotation_distance = 8
- endstop_pin = probe:z_virtual_endstop
- position_min = -5
- position_max = 240
- [extruder]
- max_extrude_only_distance = 100.0
- step_pin = PB1
- dir_pin = !PB0
- enable_pin = !PD6
- microsteps = 16
- rotation_distance = 33.683
- nozzle_diameter = 0.400
- filament_diameter = 1.750
- heater_pin = PD5
- sensor_type = EPCOS 100K B57560G104F
- sensor_pin = PA7
- control = pid
- pid_kp = 29.211
- pid_ki = 10.819
- pid_kd = 19.717
- min_temp = 0
- max_temp = 300
- [heater_bed]
- heater_pin = PD4
- sensor_type = EPCOS 100K B57560G104F
- sensor_pin = PA6
- control = pid
- pid_kp = 73.853
- pid_ki = 1.901
- pid_kd = 717.301
- min_temp = 0
- max_temp = 130
- [fan]
- pin = PB4
- [mcu]
- serial = /dev/ttyUSB0
- baud = 115200
- [printer]
- kinematics = cartesian
- max_velocity = 500
- max_accel = 6000
- max_z_velocity = 5
- max_z_accel = 100
- [bed_screws]
- screw1 = 30.5, 37
- screw2 = 30.5, 207
- screw3 = 204.5, 207
- screw4 = 204.5, 37
- [display]
- lcd_type = st7920
- cs_pin = PA3
- sclk_pin = PA1
- sid_pin = PC1
- encoder_pins = ^PD2, ^PD3
- click_pin = ^!PC0
- [bltouch]
- sensor_pin = ^PC4
- control_pin = PA4
- x_offset = -45
- z_offset = 2.540
- speed = 10
- samples = 3
- probe_with_touch_mode = False
- samples_tolerance = 0.1
- sample_retract_dist = 5.0
- [safe_z_home]
- home_xy_position = 117, 117
- speed = 25
- z_hop = 5
- z_hop_speed = 10
- [bed_mesh]
- speed = 25
- horizontal_move_z = 5
- mesh_min = 47,56
- mesh_max = 190,210
- probe_count = 5,5
- =======================
- Extruder max_extrude_ratio=0.266081
- mcu 'mcu': Starting serial connect
- mcu 'mcu': Unable to open serial port: [Errno 2] could not open port /dev/ttyUSB0: [Errno 2] No such file or directory: '/dev/ttyUSB0'
- webhooks client 548127920400: New connection
- webhooks client 548127920400: Client info {'program': 'Moonraker', 'version': 'v0.9.3-125-g3129d89'}
- mcu 'mcu': Unable to open serial port: [Errno 2] could not open port /dev/ttyUSB0: [Errno 2] No such file or directory: '/dev/ttyUSB0'
- mcu 'mcu': Unable to open serial port: [Errno 2] could not open port /dev/ttyUSB0: [Errno 2] No such file or directory: '/dev/ttyUSB0'
- mcu 'mcu': Unable to open serial port: [Errno 2] could not open port /dev/ttyUSB0: [Errno 2] No such file or directory: '/dev/ttyUSB0'
- mcu 'mcu': Unable to open serial port: [Errno 2] could not open port /dev/ttyUSB0: [Errno 2] No such file or directory: '/dev/ttyUSB0'
- mcu 'mcu': Unable to open serial port: [Errno 2] could not open port /dev/ttyUSB0: [Errno 2] No such file or directory: '/dev/ttyUSB0'
- mcu 'mcu': Unable to open serial port: [Errno 2] could not open port /dev/ttyUSB0: [Errno 2] No such file or directory: '/dev/ttyUSB0'
- mcu 'mcu': Unable to open serial port: [Errno 2] could not open port /dev/ttyUSB0: [Errno 2] No such file or directory: '/dev/ttyUSB0'
- mcu 'mcu': Unable to open serial port: [Errno 2] could not open port /dev/ttyUSB0: [Errno 2] No such file or directory: '/dev/ttyUSB0'
- mcu 'mcu': Unable to open serial port: [Errno 2] could not open port /dev/ttyUSB0: [Errno 2] No such file or directory: '/dev/ttyUSB0'
- mcu 'mcu': Unable to open serial port: [Errno 2] could not open port /dev/ttyUSB0: [Errno 2] No such file or directory: '/dev/ttyUSB0'
- mcu 'mcu': Unable to open serial port: [Errno 2] could not open port /dev/ttyUSB0: [Errno 2] No such file or directory: '/dev/ttyUSB0'
- mcu 'mcu': Unable to open serial port: [Errno 2] could not open port /dev/ttyUSB0: [Errno 2] No such file or directory: '/dev/ttyUSB0'
- mcu 'mcu': Unable to open serial port: [Errno 2] could not open port /dev/ttyUSB0: [Errno 2] No such file or directory: '/dev/ttyUSB0'
- mcu 'mcu': Unable to open serial port: [Errno 2] could not open port /dev/ttyUSB0: [Errno 2] No such file or directory: '/dev/ttyUSB0'
- mcu 'mcu': Unable to open serial port: [Errno 2] could not open port /dev/ttyUSB0: [Errno 2] No such file or directory: '/dev/ttyUSB0'
- mcu 'mcu': Unable to open serial port: [Errno 2] could not open port /dev/ttyUSB0: [Errno 2] No such file or directory: '/dev/ttyUSB0'
- mcu 'mcu': Unable to open serial port: [Errno 2] could not open port /dev/ttyUSB0: [Errno 2] No such file or directory: '/dev/ttyUSB0'
- MCU error during connect
- Traceback (most recent call last):
- File "/home/pi/klipper/klippy/mcu.py", line 774, in _attach
- self._serial.connect_uart(self._serialport, self._baud, rts)
- File "/home/pi/klipper/klippy/serialhdl.py", line 191, in connect_uart
- self._error("Unable to connect")
- File "/home/pi/klipper/klippy/serialhdl.py", line 68, in _error
- raise error(self.warn_prefix + (msg % params))
- serialhdl.error: mcu 'mcu': Unable to connect
- During handling of the above exception, another exception occurred:
- Traceback (most recent call last):
- File "/home/pi/klipper/klippy/klippy.py", line 131, in _connect
- self.send_event("klippy:mcu_identify")
- File "/home/pi/klipper/klippy/klippy.py", line 227, in send_event
- return [cb(*params) for cb in self.event_handlers.get(event, [])]
- ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
- File "/home/pi/klipper/klippy/klippy.py", line 227, in <listcomp>
- return [cb(*params) for cb in self.event_handlers.get(event, [])]
- ^^^^^^^^^^^
- File "/home/pi/klipper/klippy/mcu.py", line 784, in _mcu_identify
- self._attach()
- File "/home/pi/klipper/klippy/mcu.py", line 779, in _attach
- raise error(str(e))
- mcu.error: mcu 'mcu': Unable to connect
- mcu 'mcu': Unable to connect
- Once the underlying issue is corrected, use the
- "FIRMWARE_RESTART" command to reset the firmware, reload the
- config, and restart the host software.
- Error configuring printer
- Build file /home/pi/klipper/klippy/../.config(1272): Tue Nov 18 20:00:58 2025
- ========= Last MCU build config =========
- # CONFIG_LOW_LEVEL_OPTIONS is not set
- # CONFIG_MACH_AVR is not set
- # CONFIG_MACH_ATSAM is not set
- # CONFIG_MACH_ATSAMD is not set
- # CONFIG_MACH_LPC176X is not set
- # CONFIG_MACH_STM32 is not set
- # CONFIG_MACH_HC32F460 is not set
- # CONFIG_MACH_RPXXXX is not set
- # CONFIG_MACH_PRU is not set
- # CONFIG_MACH_AR100 is not set
- CONFIG_MACH_LINUX=y
- # CONFIG_MACH_SIMU is not set
- CONFIG_BOARD_DIRECTORY="linux"
- CONFIG_CLOCK_FREQ=50000000
- CONFIG_LINUX_SELECT=y
- CONFIG_USB_VENDOR_ID=0x1d50
- CONFIG_USB_DEVICE_ID=0x614e
- CONFIG_USB_SERIAL_NUMBER="12345"
- CONFIG_WANT_ADC=y
- CONFIG_WANT_SPI=y
- CONFIG_WANT_SOFTWARE_SPI=y
- CONFIG_WANT_I2C=y
- CONFIG_WANT_SOFTWARE_I2C=y
- CONFIG_WANT_HARD_PWM=y
- CONFIG_WANT_BUTTONS=y
- CONFIG_WANT_TMCUART=y
- CONFIG_WANT_NEOPIXEL=y
- CONFIG_WANT_PULSE_COUNTER=y
- CONFIG_WANT_ST7920=y
- CONFIG_WANT_HD44780=y
- CONFIG_WANT_ADXL345=y
- CONFIG_WANT_LIS2DW=y
- CONFIG_WANT_MPU9250=y
- CONFIG_WANT_ICM20948=y
- CONFIG_WANT_THERMOCOUPLE=y
- CONFIG_WANT_HX71X=y
- CONFIG_WANT_ADS1220=y
- CONFIG_WANT_LDC1612=y
- CONFIG_WANT_SENSOR_ANGLE=y
- CONFIG_NEED_SENSOR_BULK=y
- CONFIG_WANT_LOAD_CELL_PROBE=y
- CONFIG_NEED_SOS_FILTER=y
- CONFIG_CANBUS_FREQUENCY=1000000
- CONFIG_INLINE_STEPPER_HACK=y
- CONFIG_HAVE_GPIO=y
- CONFIG_HAVE_GPIO_ADC=y
- CONFIG_HAVE_GPIO_SPI=y
- CONFIG_HAVE_GPIO_I2C=y
- CONFIG_HAVE_GPIO_HARD_PWM=y
- =======================
- Build file /home/pi/klipper/klippy/../out/klipper.dict(11210): Tue Nov 18 20:01:38 2025
- Last MCU build version: v0.13.0-403-gb4c7cf4a3
- Last MCU build tools: gcc: (Debian 12.2.0-14+deb12u1) 12.2.0 binutils: (GNU Binutils for Debian) 2.40
- Last MCU build config: ADC_MAX=4095 CLOCK_FREQ=50000000 MCU=linux PCA9685_MAX=4096 PWM_MAX=32768 STATS_SUMSQ_BASE=256 STEPPER_STEP_BOTH_EDGE=1
- Build file /home/pi/klipper/klippy/../out/klipper.elf(897288): Tue Nov 18 20:01:51 2025
- Attempting MCU 'mcu' reset
- Unhandled exception during post run
- Traceback (most recent call last):
- File "/home/pi/klippy-env/lib/python3.11/site-packages/serial/serialposix.py", line 265, in open
- self.fd = os.open(self.portstr, os.O_RDWR | os.O_NOCTTY | os.O_NONBLOCK)
- ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
- FileNotFoundError: [Errno 2] No such file or directory: '/dev/ttyUSB0'
- During handling of the above exception, another exception occurred:
- Traceback (most recent call last):
- File "/home/pi/klipper/klippy/klippy.py", line 194, in run
- self.send_event("klippy:firmware_restart")
- File "/home/pi/klipper/klippy/klippy.py", line 227, in send_event
- return [cb(*params) for cb in self.event_handlers.get(event, [])]
- ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
- File "/home/pi/klipper/klippy/klippy.py", line 227, in <listcomp>
- return [cb(*params) for cb in self.event_handlers.get(event, [])]
- ^^^^^^^^^^^
- File "/home/pi/klipper/klippy/mcu.py", line 672, in _firmware_restart
- self._restart_arduino()
- File "/home/pi/klipper/klippy/mcu.py", line 632, in _restart_arduino
- serialhdl.arduino_reset(serialport, self._reactor)
- File "/home/pi/klipper/klippy/serialhdl.py", line 392, in arduino_reset
- ser = serial.Serial(serialport, 2400, timeout=0, exclusive=True)
- ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
- File "/home/pi/klippy-env/lib/python3.11/site-packages/serial/serialutil.py", line 240, in __init__
- self.open()
- File "/home/pi/klippy-env/lib/python3.11/site-packages/serial/serialposix.py", line 268, in open
- raise SerialException(msg.errno, "could not open port {}: {}".format(self._port, msg))
- serial.serialutil.SerialException: [Errno 2] could not open port /dev/ttyUSB0: [Errno 2] No such file or directory: '/dev/ttyUSB0'
- Restarting printer
- Start printer at Tue Nov 18 20:10:03 2025 (1763496603.6 818.6)
- ===== Config file =====
- [virtual_sdcard]
- path = /home/klipper/printer_data/gcodes/
- on_error_gcode = CANCEL_PRINT
- [pause_resume]
- [display_status]
- [respond]
- [gcode_macro CANCEL_PRINT]
- description = Cancel the actual running print
- rename_existing = CANCEL_PRINT_BASE
- gcode =
- {% set client = printer['gcode_macro _CLIENT_VARIABLE']|default({}) %}
- {% set allow_park = client.park_at_cancel|default(false)|lower == 'true' %}
- {% set retract = client.cancel_retract|default(5.0)|abs %}
- {% set park_x = "" if (client.park_at_cancel_x|default(none) is none)
- else "X=" ~ client.park_at_cancel_x %}
- {% set park_y = "" if (client.park_at_cancel_y|default(none) is none)
- else "Y=" ~ client.park_at_cancel_y %}
- {% set custom_park = park_x|length > 0 or park_y|length > 0 %}
- {% if printer['gcode_macro RESUME'].restore_idle_timeout > 0 %}
- SET_IDLE_TIMEOUT TIMEOUT={printer['gcode_macro RESUME'].restore_idle_timeout}
- {% endif %}
- {% if (custom_park or not printer.pause_resume.is_paused) and allow_park %} _TOOLHEAD_PARK_PAUSE_CANCEL {park_x} {park_y} {% endif %}
- _CLIENT_RETRACT LENGTH={retract}
- TURN_OFF_HEATERS
- M106 S0
- {client.user_cancel_macro|default("")}
- SET_GCODE_VARIABLE MACRO=RESUME VARIABLE=idle_state VALUE=False
- SET_PAUSE_NEXT_LAYER ENABLE=0
- SET_PAUSE_AT_LAYER ENABLE=0 LAYER=0
- CANCEL_PRINT_BASE
- [gcode_macro PAUSE]
- description = Pause the actual running print
- rename_existing = PAUSE_BASE
- gcode =
- {% set client = printer['gcode_macro _CLIENT_VARIABLE']|default({}) %}
- {% set idle_timeout = client.idle_timeout|default(0) %}
- {% set temp = printer[printer.toolhead.extruder].target if printer.toolhead.extruder != '' else 0 %}
- {% set restore = False if printer.toolhead.extruder == ''
- else True if params.RESTORE|default(1)|int == 1 else False %}
- SET_GCODE_VARIABLE MACRO=RESUME VARIABLE=last_extruder_temp VALUE="{{'restore': restore, 'temp': temp}}"
- {% if idle_timeout > 0 %}
- SET_GCODE_VARIABLE MACRO=RESUME VARIABLE=restore_idle_timeout VALUE={printer.configfile.settings.idle_timeout.timeout}
- SET_IDLE_TIMEOUT TIMEOUT={idle_timeout}
- {% endif %}
- PAUSE_BASE
- {client.user_pause_macro|default("")}
- _TOOLHEAD_PARK_PAUSE_CANCEL {rawparams}
- [gcode_macro RESUME]
- description = Resume the actual running print
- rename_existing = RESUME_BASE
- variable_last_extruder_temp = {'restore': False, 'temp': 0}
- variable_restore_idle_timeout = 0
- variable_idle_state = False
- gcode =
- {% set client = printer['gcode_macro _CLIENT_VARIABLE']|default({}) %}
- {% set velocity = printer.configfile.settings.pause_resume.recover_velocity %}
- {% set sp_move = client.speed_move|default(velocity) %}
- {% set runout_resume = True if client.runout_sensor|default("") == ""
- else True if not printer[client.runout_sensor].enabled
- else printer[client.runout_sensor].filament_detected %}
- {% set can_extrude = True if printer.toolhead.extruder == ''
- else printer[printer.toolhead.extruder].can_extrude %}
- {% set do_resume = False %}
- {% set prompt_txt = [] %}
- {% if printer.idle_timeout.state|upper == "IDLE" or idle_state %}
- SET_GCODE_VARIABLE MACRO=RESUME VARIABLE=idle_state VALUE=False
- {% if last_extruder_temp.restore %}
- RESPOND TYPE=echo MSG='{"Restoring \"%s\" temperature to %3.1f\u00B0C, this may take some time" % (printer.toolhead.extruder, last_extruder_temp.temp) }'
- M109 S{last_extruder_temp.temp}
- {% set do_resume = True %}
- {% elif can_extrude %}
- {% set do_resume = True %}
- {% else %}
- RESPOND TYPE=error MSG='{"Resume aborted !!! \"%s\" not hot enough, please heat up again and press RESUME" % printer.toolhead.extruder}'
- {% set _d = prompt_txt.append("\"%s\" not hot enough, please heat up again and press RESUME" % printer.toolhead.extruder) %}
- {% endif %}
- {% elif can_extrude %}
- {% set do_resume = True %}
- {% else %}
- RESPOND TYPE=error MSG='{"Resume aborted !!! \"%s\" not hot enough, please heat up again and press RESUME" % printer.toolhead.extruder}'
- {% set _d = prompt_txt.append("\"%s\" not hot enough, please heat up again and press RESUME" % printer.toolhead.extruder) %}
- {% endif %}
- {% if runout_resume %}
- {% if do_resume %}
- {% if restore_idle_timeout > 0 %} SET_IDLE_TIMEOUT TIMEOUT={restore_idle_timeout} {% endif %}
- {client.user_resume_macro|default("")}
- _CLIENT_EXTRUDE
- RESUME_BASE VELOCITY={params.VELOCITY|default(sp_move)}
- {% endif %}
- {% else %}
- RESPOND TYPE=error MSG='{"Resume aborted !!! \"%s\" detects no filament, please load filament and press RESUME" % (client.runout_sensor.split(" "))[1]}'
- {% set _d = prompt_txt.append("\"%s\" detects no filament, please load filament and press RESUME" % (client.runout_sensor.split(" "))[1]) %}
- {% endif %}
- {% if not (runout_resume and do_resume) %}
- RESPOND TYPE=command MSG="action:prompt_begin RESUME aborted !!!"
- {% for element in prompt_txt %}
- RESPOND TYPE=command MSG='{"action:prompt_text %s" % element}'
- {% endfor %}
- RESPOND TYPE=command MSG="action:prompt_footer_button Ok|RESPOND TYPE=command MSG=action:prompt_end|info"
- RESPOND TYPE=command MSG="action:prompt_show"
- {% endif %}
- [gcode_macro SET_PAUSE_NEXT_LAYER]
- description = Enable a pause if the next layer is reached
- gcode =
- {% set pause_next_layer = printer['gcode_macro SET_PRINT_STATS_INFO'].pause_next_layer %}
- {% set ENABLE = params.ENABLE|default(1)|int != 0 %}
- {% set MACRO = params.MACRO|default(pause_next_layer.call, True) %}
- SET_GCODE_VARIABLE MACRO=SET_PRINT_STATS_INFO VARIABLE=pause_next_layer VALUE="{{ 'enable': ENABLE, 'call': MACRO }}"
- [gcode_macro SET_PAUSE_AT_LAYER]
- description = Enable/disable a pause if a given layer number is reached
- gcode =
- {% set pause_at_layer = printer['gcode_macro SET_PRINT_STATS_INFO'].pause_at_layer %}
- {% set ENABLE = params.ENABLE|int != 0 if params.ENABLE is defined
- else params.LAYER is defined %}
- {% set LAYER = params.LAYER|default(pause_at_layer.layer)|int %}
- {% set MACRO = params.MACRO|default(pause_at_layer.call, True) %}
- SET_GCODE_VARIABLE MACRO=SET_PRINT_STATS_INFO VARIABLE=pause_at_layer VALUE="{{ 'enable': ENABLE, 'layer': LAYER, 'call': MACRO }}"
- [gcode_macro SET_PRINT_STATS_INFO]
- rename_existing = SET_PRINT_STATS_INFO_BASE
- description = Overwrite, to get pause_next_layer and pause_at_layer feature
- variable_pause_next_layer = { 'enable': False, 'call': "PAUSE" }
- variable_pause_at_layer = { 'enable': False, 'layer': 0, 'call': "PAUSE" }
- gcode =
- {% if pause_next_layer.enable %}
- RESPOND TYPE=echo MSG='{"%s, forced by pause_next_layer" % pause_next_layer.call}'
- {pause_next_layer.call}
- SET_PAUSE_NEXT_LAYER ENABLE=0
- {% elif pause_at_layer.enable and params.CURRENT_LAYER is defined and params.CURRENT_LAYER|int == pause_at_layer.layer %}
- RESPOND TYPE=echo MSG='{"%s, forced by pause_at_layer [%d]" % (pause_at_layer.call, pause_at_layer.layer)}'
- {pause_at_layer.call}
- SET_PAUSE_AT_LAYER ENABLE=0
- {% endif %}
- SET_PRINT_STATS_INFO_BASE {rawparams}
- [gcode_macro _TOOLHEAD_PARK_PAUSE_CANCEL]
- description = Helper: park toolhead used in PAUSE and CANCEL_PRINT
- gcode =
- {% set client = printer['gcode_macro _CLIENT_VARIABLE']|default({}) %}
- {% set velocity = printer.configfile.settings.pause_resume.recover_velocity %}
- {% set use_custom = client.use_custom_pos|default(false)|lower == 'true' %}
- {% set custom_park_x = client.custom_park_x|default(0.0) %}
- {% set custom_park_y = client.custom_park_y|default(0.0) %}
- {% set park_dz = client.custom_park_dz|default(2.0)|abs %}
- {% set sp_hop = client.speed_hop|default(15) * 60 %}
- {% set sp_move = client.speed_move|default(velocity) * 60 %}
- {% set origin = printer.gcode_move.homing_origin %}
- {% set act = printer.gcode_move.gcode_position %}
- {% set max = printer.toolhead.axis_maximum %}
- {% set cone = printer.toolhead.cone_start_z|default(max.z) %}
- {% set round_bed = True if printer.configfile.settings.printer.kinematics is in ['delta','polar','rotary_delta','winch']
- else False %}
- {% set z_min = params.Z_MIN|default(0)|float %}
- {% set z_park = [[(act.z + park_dz), z_min]|max, (max.z - origin.z)]|min %}
- {% set x_park = params.X if params.X is defined
- else custom_park_x if use_custom
- else 0.0 if round_bed
- else (max.x - 5.0) %}
- {% set y_park = params.Y if params.Y is defined
- else custom_park_y if use_custom
- else (max.y - 5.0) if round_bed and z_park < cone
- else 0.0 if round_bed
- else (max.y - 5.0) %}
- _CLIENT_RETRACT
- {% if "xyz" in printer.toolhead.homed_axes %}
- G90
- G1 Z{z_park} F{sp_hop}
- G1 X{x_park} Y{y_park} F{sp_move}
- {% if not printer.gcode_move.absolute_coordinates %} G91 {% endif %}
- {% else %}
- RESPOND TYPE=echo MSG='Printer not homed'
- {% endif %}
- [gcode_macro _CLIENT_EXTRUDE]
- description = Extrudes, if the extruder is hot enough
- gcode =
- {% set client = printer['gcode_macro _CLIENT_VARIABLE']|default({}) %}
- {% set use_fw_retract = (client.use_fw_retract|default(false)|lower == 'true') and (printer.firmware_retraction is defined) %}
- {% set length = params.LENGTH|default(client.unretract)|default(1.0)|float %}
- {% set speed = params.SPEED|default(client.speed_unretract)|default(35) %}
- {% set absolute_extrude = printer.gcode_move.absolute_extrude %}
- {% if printer.toolhead.extruder != '' %}
- {% if printer[printer.toolhead.extruder].can_extrude %}
- {% if use_fw_retract %}
- {% if length < 0 %}
- G10
- {% else %}
- G11
- {% endif %}
- {% else %}
- M83
- G1 E{length} F{(speed|float|abs) * 60}
- {% if absolute_extrude %}
- M82
- {% endif %}
- {% endif %}
- {% else %}
- RESPOND TYPE=echo MSG='{"\"%s\" not hot enough" % printer.toolhead.extruder}'
- {% endif %}
- {% endif %}
- [gcode_macro _CLIENT_RETRACT]
- description = Retracts, if the extruder is hot enough
- gcode =
- {% set client = printer['gcode_macro _CLIENT_VARIABLE']|default({}) %}
- {% set length = params.LENGTH|default(client.retract)|default(1.0)|float %}
- {% set speed = params.SPEED|default(client.speed_retract)|default(35) %}
- _CLIENT_EXTRUDE LENGTH=-{length|float|abs} SPEED={speed|float|abs}
- [gcode_macro _CLIENT_LINEAR_MOVE]
- description = Linear move with save and restore of the gcode state
- gcode =
- {% set x_move = "X" ~ params.X if params.X is defined else "" %}
- {% set y_move = "Y" ~ params.Y if params.Y is defined else "" %}
- {% set z_move = "Z" ~ params.Z if params.Z is defined else "" %}
- {% set e_move = "E" ~ params.E if params.E is defined else "" %}
- {% set rate = "F" ~ params.F if params.F is defined else "" %}
- {% set ABSOLUTE = params.ABSOLUTE | default(0) | int != 0 %}
- {% set ABSOLUTE_E = params.ABSOLUTE_E | default(0) | int != 0 %}
- SAVE_GCODE_STATE NAME=_client_movement
- {% if x_move or y_move or z_move %}
- G9{ 0 if ABSOLUTE else 1 }
- {% endif %}
- {% if e_move %}
- M8{ 2 if ABSOLUTE_E else 3 }
- {% endif %}
- G1 { x_move } { y_move } { z_move } { e_move } { rate }
- RESTORE_GCODE_STATE NAME=_client_movement
- [stepper_x]
- step_pin = PD7
- dir_pin = !PC5
- enable_pin = !PD6
- microsteps = 16
- rotation_distance = 40
- endstop_pin = ^PC2
- position_endstop = 0
- position_max = 235
- homing_speed = 25
- [stepper_y]
- step_pin = PC6
- dir_pin = !PC7
- enable_pin = !PD6
- microsteps = 16
- rotation_distance = 40
- endstop_pin = ^PC3
- position_endstop = 0
- position_max = 235
- homing_speed = 25
- [stepper_z]
- step_pin = PB3
- dir_pin = PB2
- enable_pin = !PA5
- microsteps = 16
- rotation_distance = 8
- endstop_pin = probe:z_virtual_endstop
- position_min = -5
- position_max = 240
- [extruder]
- max_extrude_only_distance = 100.0
- step_pin = PB1
- dir_pin = !PB0
- enable_pin = !PD6
- microsteps = 16
- rotation_distance = 33.683
- nozzle_diameter = 0.400
- filament_diameter = 1.750
- heater_pin = PD5
- sensor_type = EPCOS 100K B57560G104F
- sensor_pin = PA7
- control = pid
- pid_kp = 29.211
- pid_ki = 10.819
- pid_kd = 19.717
- min_temp = 0
- max_temp = 300
- [heater_bed]
- heater_pin = PD4
- sensor_type = EPCOS 100K B57560G104F
- sensor_pin = PA6
- control = pid
- pid_kp = 73.853
- pid_ki = 1.901
- pid_kd = 717.301
- min_temp = 0
- max_temp = 130
- [fan]
- pin = PB4
- [mcu]
- serial = /tmp/klipper_host_mcu
- baud = 115200
- [printer]
- kinematics = cartesian
- max_velocity = 500
- max_accel = 6000
- max_z_velocity = 5
- max_z_accel = 100
- [bed_screws]
- screw1 = 30.5, 37
- screw2 = 30.5, 207
- screw3 = 204.5, 207
- screw4 = 204.5, 37
- [display]
- lcd_type = st7920
- cs_pin = PA3
- sclk_pin = PA1
- sid_pin = PC1
- encoder_pins = ^PD2, ^PD3
- click_pin = ^!PC0
- [bltouch]
- sensor_pin = ^PC4
- control_pin = PA4
- x_offset = -45
- z_offset = 2.540
- speed = 10
- samples = 3
- probe_with_touch_mode = False
- samples_tolerance = 0.1
- sample_retract_dist = 5.0
- [safe_z_home]
- home_xy_position = 117, 117
- speed = 25
- z_hop = 5
- z_hop_speed = 10
- [bed_mesh]
- speed = 25
- horizontal_move_z = 5
- mesh_min = 47,56
- mesh_max = 190,210
- probe_count = 5,5
- =======================
- Extruder max_extrude_ratio=0.266081
- Config error
- Traceback (most recent call last):
- File "/home/pi/klipper/klippy/klippy.py", line 130, in _connect
- self._read_config()
- File "/home/pi/klipper/klippy/klippy.py", line 127, in _read_config
- pconfig.check_unused_options(config)
- File "/home/pi/klipper/klippy/configfile.py", line 497, in check_unused_options
- self.validate.check_unused(config.fileconfig)
- File "/home/pi/klipper/klippy/configfile.py", line 446, in check_unused
- raise error("Option '%s' is not valid in section '%s'"
- configparser.Error: Option 'baud' is not valid in section 'mcu'
- webhooks client 548127052688: New connection
- webhooks client 548127052688: Client info {'program': 'Moonraker', 'version': 'v0.9.3-125-g3129d89'}
- webhooks client 548127052688: Disconnected
- Restarting printer
- Start printer at Tue Nov 18 20:11:35 2025 (1763496695.0 910.0)
- ===== Config file =====
- [virtual_sdcard]
- path = /home/klipper/printer_data/gcodes/
- on_error_gcode = CANCEL_PRINT
- [pause_resume]
- [display_status]
- [respond]
- [gcode_macro CANCEL_PRINT]
- description = Cancel the actual running print
- rename_existing = CANCEL_PRINT_BASE
- gcode =
- {% set client = printer['gcode_macro _CLIENT_VARIABLE']|default({}) %}
- {% set allow_park = client.park_at_cancel|default(false)|lower == 'true' %}
- {% set retract = client.cancel_retract|default(5.0)|abs %}
- {% set park_x = "" if (client.park_at_cancel_x|default(none) is none)
- else "X=" ~ client.park_at_cancel_x %}
- {% set park_y = "" if (client.park_at_cancel_y|default(none) is none)
- else "Y=" ~ client.park_at_cancel_y %}
- {% set custom_park = park_x|length > 0 or park_y|length > 0 %}
- {% if printer['gcode_macro RESUME'].restore_idle_timeout > 0 %}
- SET_IDLE_TIMEOUT TIMEOUT={printer['gcode_macro RESUME'].restore_idle_timeout}
- {% endif %}
- {% if (custom_park or not printer.pause_resume.is_paused) and allow_park %} _TOOLHEAD_PARK_PAUSE_CANCEL {park_x} {park_y} {% endif %}
- _CLIENT_RETRACT LENGTH={retract}
- TURN_OFF_HEATERS
- M106 S0
- {client.user_cancel_macro|default("")}
- SET_GCODE_VARIABLE MACRO=RESUME VARIABLE=idle_state VALUE=False
- SET_PAUSE_NEXT_LAYER ENABLE=0
- SET_PAUSE_AT_LAYER ENABLE=0 LAYER=0
- CANCEL_PRINT_BASE
- [gcode_macro PAUSE]
- description = Pause the actual running print
- rename_existing = PAUSE_BASE
- gcode =
- {% set client = printer['gcode_macro _CLIENT_VARIABLE']|default({}) %}
- {% set idle_timeout = client.idle_timeout|default(0) %}
- {% set temp = printer[printer.toolhead.extruder].target if printer.toolhead.extruder != '' else 0 %}
- {% set restore = False if printer.toolhead.extruder == ''
- else True if params.RESTORE|default(1)|int == 1 else False %}
- SET_GCODE_VARIABLE MACRO=RESUME VARIABLE=last_extruder_temp VALUE="{{'restore': restore, 'temp': temp}}"
- {% if idle_timeout > 0 %}
- SET_GCODE_VARIABLE MACRO=RESUME VARIABLE=restore_idle_timeout VALUE={printer.configfile.settings.idle_timeout.timeout}
- SET_IDLE_TIMEOUT TIMEOUT={idle_timeout}
- {% endif %}
- PAUSE_BASE
- {client.user_pause_macro|default("")}
- _TOOLHEAD_PARK_PAUSE_CANCEL {rawparams}
- [gcode_macro RESUME]
- description = Resume the actual running print
- rename_existing = RESUME_BASE
- variable_last_extruder_temp = {'restore': False, 'temp': 0}
- variable_restore_idle_timeout = 0
- variable_idle_state = False
- gcode =
- {% set client = printer['gcode_macro _CLIENT_VARIABLE']|default({}) %}
- {% set velocity = printer.configfile.settings.pause_resume.recover_velocity %}
- {% set sp_move = client.speed_move|default(velocity) %}
- {% set runout_resume = True if client.runout_sensor|default("") == ""
- else True if not printer[client.runout_sensor].enabled
- else printer[client.runout_sensor].filament_detected %}
- {% set can_extrude = True if printer.toolhead.extruder == ''
- else printer[printer.toolhead.extruder].can_extrude %}
- {% set do_resume = False %}
- {% set prompt_txt = [] %}
- {% if printer.idle_timeout.state|upper == "IDLE" or idle_state %}
- SET_GCODE_VARIABLE MACRO=RESUME VARIABLE=idle_state VALUE=False
- {% if last_extruder_temp.restore %}
- RESPOND TYPE=echo MSG='{"Restoring \"%s\" temperature to %3.1f\u00B0C, this may take some time" % (printer.toolhead.extruder, last_extruder_temp.temp) }'
- M109 S{last_extruder_temp.temp}
- {% set do_resume = True %}
- {% elif can_extrude %}
- {% set do_resume = True %}
- {% else %}
- RESPOND TYPE=error MSG='{"Resume aborted !!! \"%s\" not hot enough, please heat up again and press RESUME" % printer.toolhead.extruder}'
- {% set _d = prompt_txt.append("\"%s\" not hot enough, please heat up again and press RESUME" % printer.toolhead.extruder) %}
- {% endif %}
- {% elif can_extrude %}
- {% set do_resume = True %}
- {% else %}
- RESPOND TYPE=error MSG='{"Resume aborted !!! \"%s\" not hot enough, please heat up again and press RESUME" % printer.toolhead.extruder}'
- {% set _d = prompt_txt.append("\"%s\" not hot enough, please heat up again and press RESUME" % printer.toolhead.extruder) %}
- {% endif %}
- {% if runout_resume %}
- {% if do_resume %}
- {% if restore_idle_timeout > 0 %} SET_IDLE_TIMEOUT TIMEOUT={restore_idle_timeout} {% endif %}
- {client.user_resume_macro|default("")}
- _CLIENT_EXTRUDE
- RESUME_BASE VELOCITY={params.VELOCITY|default(sp_move)}
- {% endif %}
- {% else %}
- RESPOND TYPE=error MSG='{"Resume aborted !!! \"%s\" detects no filament, please load filament and press RESUME" % (client.runout_sensor.split(" "))[1]}'
- {% set _d = prompt_txt.append("\"%s\" detects no filament, please load filament and press RESUME" % (client.runout_sensor.split(" "))[1]) %}
- {% endif %}
- {% if not (runout_resume and do_resume) %}
- RESPOND TYPE=command MSG="action:prompt_begin RESUME aborted !!!"
- {% for element in prompt_txt %}
- RESPOND TYPE=command MSG='{"action:prompt_text %s" % element}'
- {% endfor %}
- RESPOND TYPE=command MSG="action:prompt_footer_button Ok|RESPOND TYPE=command MSG=action:prompt_end|info"
- RESPOND TYPE=command MSG="action:prompt_show"
- {% endif %}
- [gcode_macro SET_PAUSE_NEXT_LAYER]
- description = Enable a pause if the next layer is reached
- gcode =
- {% set pause_next_layer = printer['gcode_macro SET_PRINT_STATS_INFO'].pause_next_layer %}
- {% set ENABLE = params.ENABLE|default(1)|int != 0 %}
- {% set MACRO = params.MACRO|default(pause_next_layer.call, True) %}
- SET_GCODE_VARIABLE MACRO=SET_PRINT_STATS_INFO VARIABLE=pause_next_layer VALUE="{{ 'enable': ENABLE, 'call': MACRO }}"
- [gcode_macro SET_PAUSE_AT_LAYER]
- description = Enable/disable a pause if a given layer number is reached
- gcode =
- {% set pause_at_layer = printer['gcode_macro SET_PRINT_STATS_INFO'].pause_at_layer %}
- {% set ENABLE = params.ENABLE|int != 0 if params.ENABLE is defined
- else params.LAYER is defined %}
- {% set LAYER = params.LAYER|default(pause_at_layer.layer)|int %}
- {% set MACRO = params.MACRO|default(pause_at_layer.call, True) %}
- SET_GCODE_VARIABLE MACRO=SET_PRINT_STATS_INFO VARIABLE=pause_at_layer VALUE="{{ 'enable': ENABLE, 'layer': LAYER, 'call': MACRO }}"
- [gcode_macro SET_PRINT_STATS_INFO]
- rename_existing = SET_PRINT_STATS_INFO_BASE
- description = Overwrite, to get pause_next_layer and pause_at_layer feature
- variable_pause_next_layer = { 'enable': False, 'call': "PAUSE" }
- variable_pause_at_layer = { 'enable': False, 'layer': 0, 'call': "PAUSE" }
- gcode =
- {% if pause_next_layer.enable %}
- RESPOND TYPE=echo MSG='{"%s, forced by pause_next_layer" % pause_next_layer.call}'
- {pause_next_layer.call}
- SET_PAUSE_NEXT_LAYER ENABLE=0
- {% elif pause_at_layer.enable and params.CURRENT_LAYER is defined and params.CURRENT_LAYER|int == pause_at_layer.layer %}
- RESPOND TYPE=echo MSG='{"%s, forced by pause_at_layer [%d]" % (pause_at_layer.call, pause_at_layer.layer)}'
- {pause_at_layer.call}
- SET_PAUSE_AT_LAYER ENABLE=0
- {% endif %}
- SET_PRINT_STATS_INFO_BASE {rawparams}
- [gcode_macro _TOOLHEAD_PARK_PAUSE_CANCEL]
- description = Helper: park toolhead used in PAUSE and CANCEL_PRINT
- gcode =
- {% set client = printer['gcode_macro _CLIENT_VARIABLE']|default({}) %}
- {% set velocity = printer.configfile.settings.pause_resume.recover_velocity %}
- {% set use_custom = client.use_custom_pos|default(false)|lower == 'true' %}
- {% set custom_park_x = client.custom_park_x|default(0.0) %}
- {% set custom_park_y = client.custom_park_y|default(0.0) %}
- {% set park_dz = client.custom_park_dz|default(2.0)|abs %}
- {% set sp_hop = client.speed_hop|default(15) * 60 %}
- {% set sp_move = client.speed_move|default(velocity) * 60 %}
- {% set origin = printer.gcode_move.homing_origin %}
- {% set act = printer.gcode_move.gcode_position %}
- {% set max = printer.toolhead.axis_maximum %}
- {% set cone = printer.toolhead.cone_start_z|default(max.z) %}
- {% set round_bed = True if printer.configfile.settings.printer.kinematics is in ['delta','polar','rotary_delta','winch']
- else False %}
- {% set z_min = params.Z_MIN|default(0)|float %}
- {% set z_park = [[(act.z + park_dz), z_min]|max, (max.z - origin.z)]|min %}
- {% set x_park = params.X if params.X is defined
- else custom_park_x if use_custom
- else 0.0 if round_bed
- else (max.x - 5.0) %}
- {% set y_park = params.Y if params.Y is defined
- else custom_park_y if use_custom
- else (max.y - 5.0) if round_bed and z_park < cone
- else 0.0 if round_bed
- else (max.y - 5.0) %}
- _CLIENT_RETRACT
- {% if "xyz" in printer.toolhead.homed_axes %}
- G90
- G1 Z{z_park} F{sp_hop}
- G1 X{x_park} Y{y_park} F{sp_move}
- {% if not printer.gcode_move.absolute_coordinates %} G91 {% endif %}
- {% else %}
- RESPOND TYPE=echo MSG='Printer not homed'
- {% endif %}
- [gcode_macro _CLIENT_EXTRUDE]
- description = Extrudes, if the extruder is hot enough
- gcode =
- {% set client = printer['gcode_macro _CLIENT_VARIABLE']|default({}) %}
- {% set use_fw_retract = (client.use_fw_retract|default(false)|lower == 'true') and (printer.firmware_retraction is defined) %}
- {% set length = params.LENGTH|default(client.unretract)|default(1.0)|float %}
- {% set speed = params.SPEED|default(client.speed_unretract)|default(35) %}
- {% set absolute_extrude = printer.gcode_move.absolute_extrude %}
- {% if printer.toolhead.extruder != '' %}
- {% if printer[printer.toolhead.extruder].can_extrude %}
- {% if use_fw_retract %}
- {% if length < 0 %}
- G10
- {% else %}
- G11
- {% endif %}
- {% else %}
- M83
- G1 E{length} F{(speed|float|abs) * 60}
- {% if absolute_extrude %}
- M82
- {% endif %}
- {% endif %}
- {% else %}
- RESPOND TYPE=echo MSG='{"\"%s\" not hot enough" % printer.toolhead.extruder}'
- {% endif %}
- {% endif %}
- [gcode_macro _CLIENT_RETRACT]
- description = Retracts, if the extruder is hot enough
- gcode =
- {% set client = printer['gcode_macro _CLIENT_VARIABLE']|default({}) %}
- {% set length = params.LENGTH|default(client.retract)|default(1.0)|float %}
- {% set speed = params.SPEED|default(client.speed_retract)|default(35) %}
- _CLIENT_EXTRUDE LENGTH=-{length|float|abs} SPEED={speed|float|abs}
- [gcode_macro _CLIENT_LINEAR_MOVE]
- description = Linear move with save and restore of the gcode state
- gcode =
- {% set x_move = "X" ~ params.X if params.X is defined else "" %}
- {% set y_move = "Y" ~ params.Y if params.Y is defined else "" %}
- {% set z_move = "Z" ~ params.Z if params.Z is defined else "" %}
- {% set e_move = "E" ~ params.E if params.E is defined else "" %}
- {% set rate = "F" ~ params.F if params.F is defined else "" %}
- {% set ABSOLUTE = params.ABSOLUTE | default(0) | int != 0 %}
- {% set ABSOLUTE_E = params.ABSOLUTE_E | default(0) | int != 0 %}
- SAVE_GCODE_STATE NAME=_client_movement
- {% if x_move or y_move or z_move %}
- G9{ 0 if ABSOLUTE else 1 }
- {% endif %}
- {% if e_move %}
- M8{ 2 if ABSOLUTE_E else 3 }
- {% endif %}
- G1 { x_move } { y_move } { z_move } { e_move } { rate }
- RESTORE_GCODE_STATE NAME=_client_movement
- [stepper_x]
- step_pin = PD7
- dir_pin = !PC5
- enable_pin = !PD6
- microsteps = 16
- rotation_distance = 40
- endstop_pin = ^PC2
- position_endstop = 0
- position_max = 235
- homing_speed = 25
- [stepper_y]
- step_pin = PC6
- dir_pin = !PC7
- enable_pin = !PD6
- microsteps = 16
- rotation_distance = 40
- endstop_pin = ^PC3
- position_endstop = 0
- position_max = 235
- homing_speed = 25
- [stepper_z]
- step_pin = PB3
- dir_pin = PB2
- enable_pin = !PA5
- microsteps = 16
- rotation_distance = 8
- endstop_pin = probe:z_virtual_endstop
- position_min = -5
- position_max = 240
- [extruder]
- max_extrude_only_distance = 100.0
- step_pin = PB1
- dir_pin = !PB0
- enable_pin = !PD6
- microsteps = 16
- rotation_distance = 33.683
- nozzle_diameter = 0.400
- filament_diameter = 1.750
- heater_pin = PD5
- sensor_type = EPCOS 100K B57560G104F
- sensor_pin = PA7
- control = pid
- pid_kp = 29.211
- pid_ki = 10.819
- pid_kd = 19.717
- min_temp = 0
- max_temp = 300
- [heater_bed]
- heater_pin = PD4
- sensor_type = EPCOS 100K B57560G104F
- sensor_pin = PA6
- control = pid
- pid_kp = 73.853
- pid_ki = 1.901
- pid_kd = 717.301
- min_temp = 0
- max_temp = 130
- [fan]
- pin = PB4
- [mcu]
- serial = /tmp/klipper_host_mcu
- baud = 250000
- [printer]
- kinematics = cartesian
- max_velocity = 500
- max_accel = 6000
- max_z_velocity = 5
- max_z_accel = 100
- [bed_screws]
- screw1 = 30.5, 37
- screw2 = 30.5, 207
- screw3 = 204.5, 207
- screw4 = 204.5, 37
- [display]
- lcd_type = st7920
- cs_pin = PA3
- sclk_pin = PA1
- sid_pin = PC1
- encoder_pins = ^PD2, ^PD3
- click_pin = ^!PC0
- [bltouch]
- sensor_pin = ^PC4
- control_pin = PA4
- x_offset = -45
- z_offset = 2.540
- speed = 10
- samples = 3
- probe_with_touch_mode = False
- samples_tolerance = 0.1
- sample_retract_dist = 5.0
- [safe_z_home]
- home_xy_position = 117, 117
- speed = 25
- z_hop = 5
- z_hop_speed = 10
- [bed_mesh]
- speed = 25
- horizontal_move_z = 5
- mesh_min = 47,56
- mesh_max = 190,210
- probe_count = 5,5
- =======================
- Extruder max_extrude_ratio=0.266081
- Config error
- Traceback (most recent call last):
- File "/home/pi/klipper/klippy/klippy.py", line 130, in _connect
- self._read_config()
- File "/home/pi/klipper/klippy/klippy.py", line 127, in _read_config
- pconfig.check_unused_options(config)
- File "/home/pi/klipper/klippy/configfile.py", line 497, in check_unused_options
- self.validate.check_unused(config.fileconfig)
- File "/home/pi/klipper/klippy/configfile.py", line 446, in check_unused
- raise error("Option '%s' is not valid in section '%s'"
- configparser.Error: Option 'baud' is not valid in section 'mcu'
- webhooks client 548129457616: New connection
- webhooks client 548129457616: Client info {'program': 'Moonraker', 'version': 'v0.9.3-125-g3129d89'}
- Unable to issue reset command on MCU 'mcu'
- webhooks client 548129457616: Disconnected
- Restarting printer
- Start printer at Tue Nov 18 20:14:05 2025 (1763496845.1 1060.1)
- ===== Config file =====
- [virtual_sdcard]
- path = /home/klipper/printer_data/gcodes/
- on_error_gcode = CANCEL_PRINT
- [pause_resume]
- [display_status]
- [respond]
- [gcode_macro CANCEL_PRINT]
- description = Cancel the actual running print
- rename_existing = CANCEL_PRINT_BASE
- gcode =
- {% set client = printer['gcode_macro _CLIENT_VARIABLE']|default({}) %}
- {% set allow_park = client.park_at_cancel|default(false)|lower == 'true' %}
- {% set retract = client.cancel_retract|default(5.0)|abs %}
- {% set park_x = "" if (client.park_at_cancel_x|default(none) is none)
- else "X=" ~ client.park_at_cancel_x %}
- {% set park_y = "" if (client.park_at_cancel_y|default(none) is none)
- else "Y=" ~ client.park_at_cancel_y %}
- {% set custom_park = park_x|length > 0 or park_y|length > 0 %}
- {% if printer['gcode_macro RESUME'].restore_idle_timeout > 0 %}
- SET_IDLE_TIMEOUT TIMEOUT={printer['gcode_macro RESUME'].restore_idle_timeout}
- {% endif %}
- {% if (custom_park or not printer.pause_resume.is_paused) and allow_park %} _TOOLHEAD_PARK_PAUSE_CANCEL {park_x} {park_y} {% endif %}
- _CLIENT_RETRACT LENGTH={retract}
- TURN_OFF_HEATERS
- M106 S0
- {client.user_cancel_macro|default("")}
- SET_GCODE_VARIABLE MACRO=RESUME VARIABLE=idle_state VALUE=False
- SET_PAUSE_NEXT_LAYER ENABLE=0
- SET_PAUSE_AT_LAYER ENABLE=0 LAYER=0
- CANCEL_PRINT_BASE
- [gcode_macro PAUSE]
- description = Pause the actual running print
- rename_existing = PAUSE_BASE
- gcode =
- {% set client = printer['gcode_macro _CLIENT_VARIABLE']|default({}) %}
- {% set idle_timeout = client.idle_timeout|default(0) %}
- {% set temp = printer[printer.toolhead.extruder].target if printer.toolhead.extruder != '' else 0 %}
- {% set restore = False if printer.toolhead.extruder == ''
- else True if params.RESTORE|default(1)|int == 1 else False %}
- SET_GCODE_VARIABLE MACRO=RESUME VARIABLE=last_extruder_temp VALUE="{{'restore': restore, 'temp': temp}}"
- {% if idle_timeout > 0 %}
- SET_GCODE_VARIABLE MACRO=RESUME VARIABLE=restore_idle_timeout VALUE={printer.configfile.settings.idle_timeout.timeout}
- SET_IDLE_TIMEOUT TIMEOUT={idle_timeout}
- {% endif %}
- PAUSE_BASE
- {client.user_pause_macro|default("")}
- _TOOLHEAD_PARK_PAUSE_CANCEL {rawparams}
- [gcode_macro RESUME]
- description = Resume the actual running print
- rename_existing = RESUME_BASE
- variable_last_extruder_temp = {'restore': False, 'temp': 0}
- variable_restore_idle_timeout = 0
- variable_idle_state = False
- gcode =
- {% set client = printer['gcode_macro _CLIENT_VARIABLE']|default({}) %}
- {% set velocity = printer.configfile.settings.pause_resume.recover_velocity %}
- {% set sp_move = client.speed_move|default(velocity) %}
- {% set runout_resume = True if client.runout_sensor|default("") == ""
- else True if not printer[client.runout_sensor].enabled
- else printer[client.runout_sensor].filament_detected %}
- {% set can_extrude = True if printer.toolhead.extruder == ''
- else printer[printer.toolhead.extruder].can_extrude %}
- {% set do_resume = False %}
- {% set prompt_txt = [] %}
- {% if printer.idle_timeout.state|upper == "IDLE" or idle_state %}
- SET_GCODE_VARIABLE MACRO=RESUME VARIABLE=idle_state VALUE=False
- {% if last_extruder_temp.restore %}
- RESPOND TYPE=echo MSG='{"Restoring \"%s\" temperature to %3.1f\u00B0C, this may take some time" % (printer.toolhead.extruder, last_extruder_temp.temp) }'
- M109 S{last_extruder_temp.temp}
- {% set do_resume = True %}
- {% elif can_extrude %}
- {% set do_resume = True %}
- {% else %}
- RESPOND TYPE=error MSG='{"Resume aborted !!! \"%s\" not hot enough, please heat up again and press RESUME" % printer.toolhead.extruder}'
- {% set _d = prompt_txt.append("\"%s\" not hot enough, please heat up again and press RESUME" % printer.toolhead.extruder) %}
- {% endif %}
- {% elif can_extrude %}
- {% set do_resume = True %}
- {% else %}
- RESPOND TYPE=error MSG='{"Resume aborted !!! \"%s\" not hot enough, please heat up again and press RESUME" % printer.toolhead.extruder}'
- {% set _d = prompt_txt.append("\"%s\" not hot enough, please heat up again and press RESUME" % printer.toolhead.extruder) %}
- {% endif %}
- {% if runout_resume %}
- {% if do_resume %}
- {% if restore_idle_timeout > 0 %} SET_IDLE_TIMEOUT TIMEOUT={restore_idle_timeout} {% endif %}
- {client.user_resume_macro|default("")}
- _CLIENT_EXTRUDE
- RESUME_BASE VELOCITY={params.VELOCITY|default(sp_move)}
- {% endif %}
- {% else %}
- RESPOND TYPE=error MSG='{"Resume aborted !!! \"%s\" detects no filament, please load filament and press RESUME" % (client.runout_sensor.split(" "))[1]}'
- {% set _d = prompt_txt.append("\"%s\" detects no filament, please load filament and press RESUME" % (client.runout_sensor.split(" "))[1]) %}
- {% endif %}
- {% if not (runout_resume and do_resume) %}
- RESPOND TYPE=command MSG="action:prompt_begin RESUME aborted !!!"
- {% for element in prompt_txt %}
- RESPOND TYPE=command MSG='{"action:prompt_text %s" % element}'
- {% endfor %}
- RESPOND TYPE=command MSG="action:prompt_footer_button Ok|RESPOND TYPE=command MSG=action:prompt_end|info"
- RESPOND TYPE=command MSG="action:prompt_show"
- {% endif %}
- [gcode_macro SET_PAUSE_NEXT_LAYER]
- description = Enable a pause if the next layer is reached
- gcode =
- {% set pause_next_layer = printer['gcode_macro SET_PRINT_STATS_INFO'].pause_next_layer %}
- {% set ENABLE = params.ENABLE|default(1)|int != 0 %}
- {% set MACRO = params.MACRO|default(pause_next_layer.call, True) %}
- SET_GCODE_VARIABLE MACRO=SET_PRINT_STATS_INFO VARIABLE=pause_next_layer VALUE="{{ 'enable': ENABLE, 'call': MACRO }}"
- [gcode_macro SET_PAUSE_AT_LAYER]
- description = Enable/disable a pause if a given layer number is reached
- gcode =
- {% set pause_at_layer = printer['gcode_macro SET_PRINT_STATS_INFO'].pause_at_layer %}
- {% set ENABLE = params.ENABLE|int != 0 if params.ENABLE is defined
- else params.LAYER is defined %}
- {% set LAYER = params.LAYER|default(pause_at_layer.layer)|int %}
- {% set MACRO = params.MACRO|default(pause_at_layer.call, True) %}
- SET_GCODE_VARIABLE MACRO=SET_PRINT_STATS_INFO VARIABLE=pause_at_layer VALUE="{{ 'enable': ENABLE, 'layer': LAYER, 'call': MACRO }}"
- [gcode_macro SET_PRINT_STATS_INFO]
- rename_existing = SET_PRINT_STATS_INFO_BASE
- description = Overwrite, to get pause_next_layer and pause_at_layer feature
- variable_pause_next_layer = { 'enable': False, 'call': "PAUSE" }
- variable_pause_at_layer = { 'enable': False, 'layer': 0, 'call': "PAUSE" }
- gcode =
- {% if pause_next_layer.enable %}
- RESPOND TYPE=echo MSG='{"%s, forced by pause_next_layer" % pause_next_layer.call}'
- {pause_next_layer.call}
- SET_PAUSE_NEXT_LAYER ENABLE=0
- {% elif pause_at_layer.enable and params.CURRENT_LAYER is defined and params.CURRENT_LAYER|int == pause_at_layer.layer %}
- RESPOND TYPE=echo MSG='{"%s, forced by pause_at_layer [%d]" % (pause_at_layer.call, pause_at_layer.layer)}'
- {pause_at_layer.call}
- SET_PAUSE_AT_LAYER ENABLE=0
- {% endif %}
- SET_PRINT_STATS_INFO_BASE {rawparams}
- [gcode_macro _TOOLHEAD_PARK_PAUSE_CANCEL]
- description = Helper: park toolhead used in PAUSE and CANCEL_PRINT
- gcode =
- {% set client = printer['gcode_macro _CLIENT_VARIABLE']|default({}) %}
- {% set velocity = printer.configfile.settings.pause_resume.recover_velocity %}
- {% set use_custom = client.use_custom_pos|default(false)|lower == 'true' %}
- {% set custom_park_x = client.custom_park_x|default(0.0) %}
- {% set custom_park_y = client.custom_park_y|default(0.0) %}
- {% set park_dz = client.custom_park_dz|default(2.0)|abs %}
- {% set sp_hop = client.speed_hop|default(15) * 60 %}
- {% set sp_move = client.speed_move|default(velocity) * 60 %}
- {% set origin = printer.gcode_move.homing_origin %}
- {% set act = printer.gcode_move.gcode_position %}
- {% set max = printer.toolhead.axis_maximum %}
- {% set cone = printer.toolhead.cone_start_z|default(max.z) %}
- {% set round_bed = True if printer.configfile.settings.printer.kinematics is in ['delta','polar','rotary_delta','winch']
- else False %}
- {% set z_min = params.Z_MIN|default(0)|float %}
- {% set z_park = [[(act.z + park_dz), z_min]|max, (max.z - origin.z)]|min %}
- {% set x_park = params.X if params.X is defined
- else custom_park_x if use_custom
- else 0.0 if round_bed
- else (max.x - 5.0) %}
- {% set y_park = params.Y if params.Y is defined
- else custom_park_y if use_custom
- else (max.y - 5.0) if round_bed and z_park < cone
- else 0.0 if round_bed
- else (max.y - 5.0) %}
- _CLIENT_RETRACT
- {% if "xyz" in printer.toolhead.homed_axes %}
- G90
- G1 Z{z_park} F{sp_hop}
- G1 X{x_park} Y{y_park} F{sp_move}
- {% if not printer.gcode_move.absolute_coordinates %} G91 {% endif %}
- {% else %}
- RESPOND TYPE=echo MSG='Printer not homed'
- {% endif %}
- [gcode_macro _CLIENT_EXTRUDE]
- description = Extrudes, if the extruder is hot enough
- gcode =
- {% set client = printer['gcode_macro _CLIENT_VARIABLE']|default({}) %}
- {% set use_fw_retract = (client.use_fw_retract|default(false)|lower == 'true') and (printer.firmware_retraction is defined) %}
- {% set length = params.LENGTH|default(client.unretract)|default(1.0)|float %}
- {% set speed = params.SPEED|default(client.speed_unretract)|default(35) %}
- {% set absolute_extrude = printer.gcode_move.absolute_extrude %}
- {% if printer.toolhead.extruder != '' %}
- {% if printer[printer.toolhead.extruder].can_extrude %}
- {% if use_fw_retract %}
- {% if length < 0 %}
- G10
- {% else %}
- G11
- {% endif %}
- {% else %}
- M83
- G1 E{length} F{(speed|float|abs) * 60}
- {% if absolute_extrude %}
- M82
- {% endif %}
- {% endif %}
- {% else %}
- RESPOND TYPE=echo MSG='{"\"%s\" not hot enough" % printer.toolhead.extruder}'
- {% endif %}
- {% endif %}
- [gcode_macro _CLIENT_RETRACT]
- description = Retracts, if the extruder is hot enough
- gcode =
- {% set client = printer['gcode_macro _CLIENT_VARIABLE']|default({}) %}
- {% set length = params.LENGTH|default(client.retract)|default(1.0)|float %}
- {% set speed = params.SPEED|default(client.speed_retract)|default(35) %}
- _CLIENT_EXTRUDE LENGTH=-{length|float|abs} SPEED={speed|float|abs}
- [gcode_macro _CLIENT_LINEAR_MOVE]
- description = Linear move with save and restore of the gcode state
- gcode =
- {% set x_move = "X" ~ params.X if params.X is defined else "" %}
- {% set y_move = "Y" ~ params.Y if params.Y is defined else "" %}
- {% set z_move = "Z" ~ params.Z if params.Z is defined else "" %}
- {% set e_move = "E" ~ params.E if params.E is defined else "" %}
- {% set rate = "F" ~ params.F if params.F is defined else "" %}
- {% set ABSOLUTE = params.ABSOLUTE | default(0) | int != 0 %}
- {% set ABSOLUTE_E = params.ABSOLUTE_E | default(0) | int != 0 %}
- SAVE_GCODE_STATE NAME=_client_movement
- {% if x_move or y_move or z_move %}
- G9{ 0 if ABSOLUTE else 1 }
- {% endif %}
- {% if e_move %}
- M8{ 2 if ABSOLUTE_E else 3 }
- {% endif %}
- G1 { x_move } { y_move } { z_move } { e_move } { rate }
- RESTORE_GCODE_STATE NAME=_client_movement
- [stepper_x]
- step_pin = PD7
- dir_pin = !PC5
- enable_pin = !PD6
- microsteps = 16
- rotation_distance = 40
- endstop_pin = ^PC2
- position_endstop = 0
- position_max = 235
- homing_speed = 25
- [stepper_y]
- step_pin = PC6
- dir_pin = !PC7
- enable_pin = !PD6
- microsteps = 16
- rotation_distance = 40
- endstop_pin = ^PC3
- position_endstop = 0
- position_max = 235
- homing_speed = 25
- [stepper_z]
- step_pin = PB3
- dir_pin = PB2
- enable_pin = !PA5
- microsteps = 16
- rotation_distance = 8
- endstop_pin = probe:z_virtual_endstop
- position_min = -5
- position_max = 240
- [extruder]
- max_extrude_only_distance = 100.0
- step_pin = PB1
- dir_pin = !PB0
- enable_pin = !PD6
- microsteps = 16
- rotation_distance = 33.683
- nozzle_diameter = 0.400
- filament_diameter = 1.750
- heater_pin = PD5
- sensor_type = EPCOS 100K B57560G104F
- sensor_pin = PA7
- control = pid
- pid_kp = 29.211
- pid_ki = 10.819
- pid_kd = 19.717
- min_temp = 0
- max_temp = 300
- [heater_bed]
- heater_pin = PD4
- sensor_type = EPCOS 100K B57560G104F
- sensor_pin = PA6
- control = pid
- pid_kp = 73.853
- pid_ki = 1.901
- pid_kd = 717.301
- min_temp = 0
- max_temp = 130
- [fan]
- pin = PB4
- [mcu]
- serial = /tmp/klipper_host_mcu, baud: 250000
- [printer]
- kinematics = cartesian
- max_velocity = 500
- max_accel = 6000
- max_z_velocity = 5
- max_z_accel = 100
- [bed_screws]
- screw1 = 30.5, 37
- screw2 = 30.5, 207
- screw3 = 204.5, 207
- screw4 = 204.5, 37
- [display]
- lcd_type = st7920
- cs_pin = PA3
- sclk_pin = PA1
- sid_pin = PC1
- encoder_pins = ^PD2, ^PD3
- click_pin = ^!PC0
- [bltouch]
- sensor_pin = ^PC4
- control_pin = PA4
- x_offset = -45
- z_offset = 2.540
- speed = 10
- samples = 3
- probe_with_touch_mode = False
- samples_tolerance = 0.1
- sample_retract_dist = 5.0
- [safe_z_home]
- home_xy_position = 117, 117
- speed = 25
- z_hop = 5
- z_hop_speed = 10
- [bed_mesh]
- speed = 25
- horizontal_move_z = 5
- mesh_min = 47,56
- mesh_max = 190,210
- probe_count = 5,5
- =======================
- Extruder max_extrude_ratio=0.266081
- mcu 'mcu': Starting connect
- mcu 'mcu': Unable to open port: [Errno 2] No such file or directory: '/tmp/klipper_host_mcu, baud: 250000'
- webhooks client 548127376976: New connection
- webhooks client 548127376976: Client info {'program': 'Moonraker', 'version': 'v0.9.3-125-g3129d89'}
- mcu 'mcu': Unable to open port: [Errno 2] No such file or directory: '/tmp/klipper_host_mcu, baud: 250000'
- mcu 'mcu': Unable to open port: [Errno 2] No such file or directory: '/tmp/klipper_host_mcu, baud: 250000'
- mcu 'mcu': Unable to open port: [Errno 2] No such file or directory: '/tmp/klipper_host_mcu, baud: 250000'
- mcu 'mcu': Unable to open port: [Errno 2] No such file or directory: '/tmp/klipper_host_mcu, baud: 250000'
- mcu 'mcu': Unable to open port: [Errno 2] No such file or directory: '/tmp/klipper_host_mcu, baud: 250000'
- mcu 'mcu': Unable to open port: [Errno 2] No such file or directory: '/tmp/klipper_host_mcu, baud: 250000'
- mcu 'mcu': Unable to open port: [Errno 2] No such file or directory: '/tmp/klipper_host_mcu, baud: 250000'
- mcu 'mcu': Unable to open port: [Errno 2] No such file or directory: '/tmp/klipper_host_mcu, baud: 250000'
- mcu 'mcu': Unable to open port: [Errno 2] No such file or directory: '/tmp/klipper_host_mcu, baud: 250000'
- mcu 'mcu': Unable to open port: [Errno 2] No such file or directory: '/tmp/klipper_host_mcu, baud: 250000'
- mcu 'mcu': Unable to open port: [Errno 2] No such file or directory: '/tmp/klipper_host_mcu, baud: 250000'
- mcu 'mcu': Unable to open port: [Errno 2] No such file or directory: '/tmp/klipper_host_mcu, baud: 250000'
- mcu 'mcu': Unable to open port: [Errno 2] No such file or directory: '/tmp/klipper_host_mcu, baud: 250000'
- mcu 'mcu': Unable to open port: [Errno 2] No such file or directory: '/tmp/klipper_host_mcu, baud: 250000'
- mcu 'mcu': Unable to open port: [Errno 2] No such file or directory: '/tmp/klipper_host_mcu, baud: 250000'
- mcu 'mcu': Unable to open port: [Errno 2] No such file or directory: '/tmp/klipper_host_mcu, baud: 250000'
- mcu 'mcu': Unable to open port: [Errno 2] No such file or directory: '/tmp/klipper_host_mcu, baud: 250000'
- MCU error during connect
- Traceback (most recent call last):
- File "/home/pi/klipper/klippy/mcu.py", line 776, in _attach
- self._serial.connect_pipe(self._serialport)
- File "/home/pi/klipper/klippy/serialhdl.py", line 173, in connect_pipe
- self._error("Unable to connect")
- File "/home/pi/klipper/klippy/serialhdl.py", line 68, in _error
- raise error(self.warn_prefix + (msg % params))
- serialhdl.error: mcu 'mcu': Unable to connect
- During handling of the above exception, another exception occurred:
- Traceback (most recent call last):
- File "/home/pi/klipper/klippy/klippy.py", line 131, in _connect
- self.send_event("klippy:mcu_identify")
- File "/home/pi/klipper/klippy/klippy.py", line 227, in send_event
- return [cb(*params) for cb in self.event_handlers.get(event, [])]
- ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
- File "/home/pi/klipper/klippy/klippy.py", line 227, in <listcomp>
- return [cb(*params) for cb in self.event_handlers.get(event, [])]
- ^^^^^^^^^^^
- File "/home/pi/klipper/klippy/mcu.py", line 784, in _mcu_identify
- self._attach()
- File "/home/pi/klipper/klippy/mcu.py", line 779, in _attach
- raise error(str(e))
- mcu.error: mcu 'mcu': Unable to connect
- mcu 'mcu': Unable to connect
- Once the underlying issue is corrected, use the
- "FIRMWARE_RESTART" command to reset the firmware, reload the
- config, and restart the host software.
- Error configuring printer
- Build file /home/pi/klipper/klippy/../.config(1272): Tue Nov 18 20:00:58 2025
- ========= Last MCU build config =========
- # CONFIG_LOW_LEVEL_OPTIONS is not set
- # CONFIG_MACH_AVR is not set
- # CONFIG_MACH_ATSAM is not set
- # CONFIG_MACH_ATSAMD is not set
- # CONFIG_MACH_LPC176X is not set
- # CONFIG_MACH_STM32 is not set
- # CONFIG_MACH_HC32F460 is not set
- # CONFIG_MACH_RPXXXX is not set
- # CONFIG_MACH_PRU is not set
- # CONFIG_MACH_AR100 is not set
- CONFIG_MACH_LINUX=y
- # CONFIG_MACH_SIMU is not set
- CONFIG_BOARD_DIRECTORY="linux"
- CONFIG_CLOCK_FREQ=50000000
- CONFIG_LINUX_SELECT=y
- CONFIG_USB_VENDOR_ID=0x1d50
- CONFIG_USB_DEVICE_ID=0x614e
- CONFIG_USB_SERIAL_NUMBER="12345"
- CONFIG_WANT_ADC=y
- CONFIG_WANT_SPI=y
- CONFIG_WANT_SOFTWARE_SPI=y
- CONFIG_WANT_I2C=y
- CONFIG_WANT_SOFTWARE_I2C=y
- CONFIG_WANT_HARD_PWM=y
- CONFIG_WANT_BUTTONS=y
- CONFIG_WANT_TMCUART=y
- CONFIG_WANT_NEOPIXEL=y
- CONFIG_WANT_PULSE_COUNTER=y
- CONFIG_WANT_ST7920=y
- CONFIG_WANT_HD44780=y
- CONFIG_WANT_ADXL345=y
- CONFIG_WANT_LIS2DW=y
- CONFIG_WANT_MPU9250=y
- CONFIG_WANT_ICM20948=y
- CONFIG_WANT_THERMOCOUPLE=y
- CONFIG_WANT_HX71X=y
- CONFIG_WANT_ADS1220=y
- CONFIG_WANT_LDC1612=y
- CONFIG_WANT_SENSOR_ANGLE=y
- CONFIG_NEED_SENSOR_BULK=y
- CONFIG_WANT_LOAD_CELL_PROBE=y
- CONFIG_NEED_SOS_FILTER=y
- CONFIG_CANBUS_FREQUENCY=1000000
- CONFIG_INLINE_STEPPER_HACK=y
- CONFIG_HAVE_GPIO=y
- CONFIG_HAVE_GPIO_ADC=y
- CONFIG_HAVE_GPIO_SPI=y
- CONFIG_HAVE_GPIO_I2C=y
- CONFIG_HAVE_GPIO_HARD_PWM=y
- =======================
- Build file /home/pi/klipper/klippy/../out/klipper.dict(11210): Tue Nov 18 20:01:38 2025
- Last MCU build version: v0.13.0-403-gb4c7cf4a3
- Last MCU build tools: gcc: (Debian 12.2.0-14+deb12u1) 12.2.0 binutils: (GNU Binutils for Debian) 2.40
- Last MCU build config: ADC_MAX=4095 CLOCK_FREQ=50000000 MCU=linux PCA9685_MAX=4096 PWM_MAX=32768 STATS_SUMSQ_BASE=256 STEPPER_STEP_BOTH_EDGE=1
- Build file /home/pi/klipper/klippy/../out/klipper.elf(897288): Tue Nov 18 20:01:51 2025
- Unable to issue reset command on MCU 'mcu'
- webhooks client 548127376976: Disconnected
- Restarting printer
- Start printer at Tue Nov 18 20:18:37 2025 (1763497117.7 1332.7)
- ===== Config file =====
- [virtual_sdcard]
- path = /home/klipper/printer_data/gcodes/
- on_error_gcode = CANCEL_PRINT
- [pause_resume]
- [display_status]
- [respond]
- [gcode_macro CANCEL_PRINT]
- description = Cancel the actual running print
- rename_existing = CANCEL_PRINT_BASE
- gcode =
- {% set client = printer['gcode_macro _CLIENT_VARIABLE']|default({}) %}
- {% set allow_park = client.park_at_cancel|default(false)|lower == 'true' %}
- {% set retract = client.cancel_retract|default(5.0)|abs %}
- {% set park_x = "" if (client.park_at_cancel_x|default(none) is none)
- else "X=" ~ client.park_at_cancel_x %}
- {% set park_y = "" if (client.park_at_cancel_y|default(none) is none)
- else "Y=" ~ client.park_at_cancel_y %}
- {% set custom_park = park_x|length > 0 or park_y|length > 0 %}
- {% if printer['gcode_macro RESUME'].restore_idle_timeout > 0 %}
- SET_IDLE_TIMEOUT TIMEOUT={printer['gcode_macro RESUME'].restore_idle_timeout}
- {% endif %}
- {% if (custom_park or not printer.pause_resume.is_paused) and allow_park %} _TOOLHEAD_PARK_PAUSE_CANCEL {park_x} {park_y} {% endif %}
- _CLIENT_RETRACT LENGTH={retract}
- TURN_OFF_HEATERS
- M106 S0
- {client.user_cancel_macro|default("")}
- SET_GCODE_VARIABLE MACRO=RESUME VARIABLE=idle_state VALUE=False
- SET_PAUSE_NEXT_LAYER ENABLE=0
- SET_PAUSE_AT_LAYER ENABLE=0 LAYER=0
- CANCEL_PRINT_BASE
- [gcode_macro PAUSE]
- description = Pause the actual running print
- rename_existing = PAUSE_BASE
- gcode =
- {% set client = printer['gcode_macro _CLIENT_VARIABLE']|default({}) %}
- {% set idle_timeout = client.idle_timeout|default(0) %}
- {% set temp = printer[printer.toolhead.extruder].target if printer.toolhead.extruder != '' else 0 %}
- {% set restore = False if printer.toolhead.extruder == ''
- else True if params.RESTORE|default(1)|int == 1 else False %}
- SET_GCODE_VARIABLE MACRO=RESUME VARIABLE=last_extruder_temp VALUE="{{'restore': restore, 'temp': temp}}"
- {% if idle_timeout > 0 %}
- SET_GCODE_VARIABLE MACRO=RESUME VARIABLE=restore_idle_timeout VALUE={printer.configfile.settings.idle_timeout.timeout}
- SET_IDLE_TIMEOUT TIMEOUT={idle_timeout}
- {% endif %}
- PAUSE_BASE
- {client.user_pause_macro|default("")}
- _TOOLHEAD_PARK_PAUSE_CANCEL {rawparams}
- [gcode_macro RESUME]
- description = Resume the actual running print
- rename_existing = RESUME_BASE
- variable_last_extruder_temp = {'restore': False, 'temp': 0}
- variable_restore_idle_timeout = 0
- variable_idle_state = False
- gcode =
- {% set client = printer['gcode_macro _CLIENT_VARIABLE']|default({}) %}
- {% set velocity = printer.configfile.settings.pause_resume.recover_velocity %}
- {% set sp_move = client.speed_move|default(velocity) %}
- {% set runout_resume = True if client.runout_sensor|default("") == ""
- else True if not printer[client.runout_sensor].enabled
- else printer[client.runout_sensor].filament_detected %}
- {% set can_extrude = True if printer.toolhead.extruder == ''
- else printer[printer.toolhead.extruder].can_extrude %}
- {% set do_resume = False %}
- {% set prompt_txt = [] %}
- {% if printer.idle_timeout.state|upper == "IDLE" or idle_state %}
- SET_GCODE_VARIABLE MACRO=RESUME VARIABLE=idle_state VALUE=False
- {% if last_extruder_temp.restore %}
- RESPOND TYPE=echo MSG='{"Restoring \"%s\" temperature to %3.1f\u00B0C, this may take some time" % (printer.toolhead.extruder, last_extruder_temp.temp) }'
- M109 S{last_extruder_temp.temp}
- {% set do_resume = True %}
- {% elif can_extrude %}
- {% set do_resume = True %}
- {% else %}
- RESPOND TYPE=error MSG='{"Resume aborted !!! \"%s\" not hot enough, please heat up again and press RESUME" % printer.toolhead.extruder}'
- {% set _d = prompt_txt.append("\"%s\" not hot enough, please heat up again and press RESUME" % printer.toolhead.extruder) %}
- {% endif %}
- {% elif can_extrude %}
- {% set do_resume = True %}
- {% else %}
- RESPOND TYPE=error MSG='{"Resume aborted !!! \"%s\" not hot enough, please heat up again and press RESUME" % printer.toolhead.extruder}'
- {% set _d = prompt_txt.append("\"%s\" not hot enough, please heat up again and press RESUME" % printer.toolhead.extruder) %}
- {% endif %}
- {% if runout_resume %}
- {% if do_resume %}
- {% if restore_idle_timeout > 0 %} SET_IDLE_TIMEOUT TIMEOUT={restore_idle_timeout} {% endif %}
- {client.user_resume_macro|default("")}
- _CLIENT_EXTRUDE
- RESUME_BASE VELOCITY={params.VELOCITY|default(sp_move)}
- {% endif %}
- {% else %}
- RESPOND TYPE=error MSG='{"Resume aborted !!! \"%s\" detects no filament, please load filament and press RESUME" % (client.runout_sensor.split(" "))[1]}'
- {% set _d = prompt_txt.append("\"%s\" detects no filament, please load filament and press RESUME" % (client.runout_sensor.split(" "))[1]) %}
- {% endif %}
- {% if not (runout_resume and do_resume) %}
- RESPOND TYPE=command MSG="action:prompt_begin RESUME aborted !!!"
- {% for element in prompt_txt %}
- RESPOND TYPE=command MSG='{"action:prompt_text %s" % element}'
- {% endfor %}
- RESPOND TYPE=command MSG="action:prompt_footer_button Ok|RESPOND TYPE=command MSG=action:prompt_end|info"
- RESPOND TYPE=command MSG="action:prompt_show"
- {% endif %}
- [gcode_macro SET_PAUSE_NEXT_LAYER]
- description = Enable a pause if the next layer is reached
- gcode =
- {% set pause_next_layer = printer['gcode_macro SET_PRINT_STATS_INFO'].pause_next_layer %}
- {% set ENABLE = params.ENABLE|default(1)|int != 0 %}
- {% set MACRO = params.MACRO|default(pause_next_layer.call, True) %}
- SET_GCODE_VARIABLE MACRO=SET_PRINT_STATS_INFO VARIABLE=pause_next_layer VALUE="{{ 'enable': ENABLE, 'call': MACRO }}"
- [gcode_macro SET_PAUSE_AT_LAYER]
- description = Enable/disable a pause if a given layer number is reached
- gcode =
- {% set pause_at_layer = printer['gcode_macro SET_PRINT_STATS_INFO'].pause_at_layer %}
- {% set ENABLE = params.ENABLE|int != 0 if params.ENABLE is defined
- else params.LAYER is defined %}
- {% set LAYER = params.LAYER|default(pause_at_layer.layer)|int %}
- {% set MACRO = params.MACRO|default(pause_at_layer.call, True) %}
- SET_GCODE_VARIABLE MACRO=SET_PRINT_STATS_INFO VARIABLE=pause_at_layer VALUE="{{ 'enable': ENABLE, 'layer': LAYER, 'call': MACRO }}"
- [gcode_macro SET_PRINT_STATS_INFO]
- rename_existing = SET_PRINT_STATS_INFO_BASE
- description = Overwrite, to get pause_next_layer and pause_at_layer feature
- variable_pause_next_layer = { 'enable': False, 'call': "PAUSE" }
- variable_pause_at_layer = { 'enable': False, 'layer': 0, 'call': "PAUSE" }
- gcode =
- {% if pause_next_layer.enable %}
- RESPOND TYPE=echo MSG='{"%s, forced by pause_next_layer" % pause_next_layer.call}'
- {pause_next_layer.call}
- SET_PAUSE_NEXT_LAYER ENABLE=0
- {% elif pause_at_layer.enable and params.CURRENT_LAYER is defined and params.CURRENT_LAYER|int == pause_at_layer.layer %}
- RESPOND TYPE=echo MSG='{"%s, forced by pause_at_layer [%d]" % (pause_at_layer.call, pause_at_layer.layer)}'
- {pause_at_layer.call}
- SET_PAUSE_AT_LAYER ENABLE=0
- {% endif %}
- SET_PRINT_STATS_INFO_BASE {rawparams}
- [gcode_macro _TOOLHEAD_PARK_PAUSE_CANCEL]
- description = Helper: park toolhead used in PAUSE and CANCEL_PRINT
- gcode =
- {% set client = printer['gcode_macro _CLIENT_VARIABLE']|default({}) %}
- {% set velocity = printer.configfile.settings.pause_resume.recover_velocity %}
- {% set use_custom = client.use_custom_pos|default(false)|lower == 'true' %}
- {% set custom_park_x = client.custom_park_x|default(0.0) %}
- {% set custom_park_y = client.custom_park_y|default(0.0) %}
- {% set park_dz = client.custom_park_dz|default(2.0)|abs %}
- {% set sp_hop = client.speed_hop|default(15) * 60 %}
- {% set sp_move = client.speed_move|default(velocity) * 60 %}
- {% set origin = printer.gcode_move.homing_origin %}
- {% set act = printer.gcode_move.gcode_position %}
- {% set max = printer.toolhead.axis_maximum %}
- {% set cone = printer.toolhead.cone_start_z|default(max.z) %}
- {% set round_bed = True if printer.configfile.settings.printer.kinematics is in ['delta','polar','rotary_delta','winch']
- else False %}
- {% set z_min = params.Z_MIN|default(0)|float %}
- {% set z_park = [[(act.z + park_dz), z_min]|max, (max.z - origin.z)]|min %}
- {% set x_park = params.X if params.X is defined
- else custom_park_x if use_custom
- else 0.0 if round_bed
- else (max.x - 5.0) %}
- {% set y_park = params.Y if params.Y is defined
- else custom_park_y if use_custom
- else (max.y - 5.0) if round_bed and z_park < cone
- else 0.0 if round_bed
- else (max.y - 5.0) %}
- _CLIENT_RETRACT
- {% if "xyz" in printer.toolhead.homed_axes %}
- G90
- G1 Z{z_park} F{sp_hop}
- G1 X{x_park} Y{y_park} F{sp_move}
- {% if not printer.gcode_move.absolute_coordinates %} G91 {% endif %}
- {% else %}
- RESPOND TYPE=echo MSG='Printer not homed'
- {% endif %}
- [gcode_macro _CLIENT_EXTRUDE]
- description = Extrudes, if the extruder is hot enough
- gcode =
- {% set client = printer['gcode_macro _CLIENT_VARIABLE']|default({}) %}
- {% set use_fw_retract = (client.use_fw_retract|default(false)|lower == 'true') and (printer.firmware_retraction is defined) %}
- {% set length = params.LENGTH|default(client.unretract)|default(1.0)|float %}
- {% set speed = params.SPEED|default(client.speed_unretract)|default(35) %}
- {% set absolute_extrude = printer.gcode_move.absolute_extrude %}
- {% if printer.toolhead.extruder != '' %}
- {% if printer[printer.toolhead.extruder].can_extrude %}
- {% if use_fw_retract %}
- {% if length < 0 %}
- G10
- {% else %}
- G11
- {% endif %}
- {% else %}
- M83
- G1 E{length} F{(speed|float|abs) * 60}
- {% if absolute_extrude %}
- M82
- {% endif %}
- {% endif %}
- {% else %}
- RESPOND TYPE=echo MSG='{"\"%s\" not hot enough" % printer.toolhead.extruder}'
- {% endif %}
- {% endif %}
- [gcode_macro _CLIENT_RETRACT]
- description = Retracts, if the extruder is hot enough
- gcode =
- {% set client = printer['gcode_macro _CLIENT_VARIABLE']|default({}) %}
- {% set length = params.LENGTH|default(client.retract)|default(1.0)|float %}
- {% set speed = params.SPEED|default(client.speed_retract)|default(35) %}
- _CLIENT_EXTRUDE LENGTH=-{length|float|abs} SPEED={speed|float|abs}
- [gcode_macro _CLIENT_LINEAR_MOVE]
- description = Linear move with save and restore of the gcode state
- gcode =
- {% set x_move = "X" ~ params.X if params.X is defined else "" %}
- {% set y_move = "Y" ~ params.Y if params.Y is defined else "" %}
- {% set z_move = "Z" ~ params.Z if params.Z is defined else "" %}
- {% set e_move = "E" ~ params.E if params.E is defined else "" %}
- {% set rate = "F" ~ params.F if params.F is defined else "" %}
- {% set ABSOLUTE = params.ABSOLUTE | default(0) | int != 0 %}
- {% set ABSOLUTE_E = params.ABSOLUTE_E | default(0) | int != 0 %}
- SAVE_GCODE_STATE NAME=_client_movement
- {% if x_move or y_move or z_move %}
- G9{ 0 if ABSOLUTE else 1 }
- {% endif %}
- {% if e_move %}
- M8{ 2 if ABSOLUTE_E else 3 }
- {% endif %}
- G1 { x_move } { y_move } { z_move } { e_move } { rate }
- RESTORE_GCODE_STATE NAME=_client_movement
- [stepper_x]
- step_pin = PD7
- dir_pin = !PC5
- enable_pin = !PD6
- microsteps = 16
- rotation_distance = 40
- endstop_pin = ^PC2
- position_endstop = 0
- position_max = 235
- homing_speed = 25
- [stepper_y]
- step_pin = PC6
- dir_pin = !PC7
- enable_pin = !PD6
- microsteps = 16
- rotation_distance = 40
- endstop_pin = ^PC3
- position_endstop = 0
- position_max = 235
- homing_speed = 25
- [stepper_z]
- step_pin = PB3
- dir_pin = PB2
- enable_pin = !PA5
- microsteps = 16
- rotation_distance = 8
- endstop_pin = probe:z_virtual_endstop
- position_min = -5
- position_max = 240
- [extruder]
- max_extrude_only_distance = 100.0
- step_pin = PB1
- dir_pin = !PB0
- enable_pin = !PD6
- microsteps = 16
- rotation_distance = 33.683
- nozzle_diameter = 0.400
- filament_diameter = 1.750
- heater_pin = PD5
- sensor_type = EPCOS 100K B57560G104F
- sensor_pin = PA7
- control = pid
- pid_kp = 29.211
- pid_ki = 10.819
- pid_kd = 19.717
- min_temp = 0
- max_temp = 300
- [heater_bed]
- heater_pin = PD4
- sensor_type = EPCOS 100K B57560G104F
- sensor_pin = PA6
- control = pid
- pid_kp = 73.853
- pid_ki = 1.901
- pid_kd = 717.301
- min_temp = 0
- max_temp = 130
- [fan]
- pin = PB4
- [mcu]
- serial = /tmp/klipper_host_mcu
- [printer]
- kinematics = cartesian
- max_velocity = 500
- max_accel = 6000
- max_z_velocity = 5
- max_z_accel = 100
- [bed_screws]
- screw1 = 30.5, 37
- screw2 = 30.5, 207
- screw3 = 204.5, 207
- screw4 = 204.5, 37
- [display]
- lcd_type = st7920
- cs_pin = PA3
- sclk_pin = PA1
- sid_pin = PC1
- encoder_pins = ^PD2, ^PD3
- click_pin = ^!PC0
- [bltouch]
- sensor_pin = ^PC4
- control_pin = PA4
- x_offset = -45
- z_offset = 2.540
- speed = 10
- samples = 3
- probe_with_touch_mode = False
- samples_tolerance = 0.1
- sample_retract_dist = 5.0
- [safe_z_home]
- home_xy_position = 117, 117
- speed = 25
- z_hop = 5
- z_hop_speed = 10
- [bed_mesh]
- speed = 25
- horizontal_move_z = 5
- mesh_min = 47,56
- mesh_max = 190,210
- probe_count = 5,5
- =======================
- Extruder max_extrude_ratio=0.266081
- mcu 'mcu': Starting connect
- webhooks client 548127285712: New connection
- webhooks client 548127285712: Client info {'program': 'Moonraker', 'version': 'v0.9.3-125-g3129d89'}
- Loaded MCU 'mcu' 138 commands (v0.13.0-403-gb4c7cf4a3 / gcc: (Debian 12.2.0-14+deb12u1) 12.2.0 binutils: (GNU Binutils for Debian) 2.40)
- MCU 'mcu' config: ADC_MAX=4095 CLOCK_FREQ=50000000 MCU=linux PCA9685_MAX=4096 PWM_MAX=32768 STATS_SUMSQ_BASE=256 STEPPER_STEP_BOTH_EDGE=1
- Sending MCU 'mcu' printer configuration...
- Config error
- Traceback (most recent call last):
- File "/home/pi/klipper/klippy/mcu.py", line 935, in _send_config
- self._serial.send(c)
- File "/home/pi/klipper/klippy/serialhdl.py", line 266, in send
- cmd = self.msgparser.create_command(msg)
- ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
- File "/home/pi/klipper/klippy/msgproto.py", line 349, in create_command
- cmd = mp.encode_by_name(**argparts)
- ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
- File "/home/pi/klipper/klippy/msgproto.py", line 179, in encode_by_name
- t.encode(out, params[name])
- File "/home/pi/klipper/klippy/msgproto.py", line 108, in encode
- raise enumeration_error(self.enum_name, v)
- msgproto.enumeration_error: Unknown value 'PA6' in enumeration 'pin'
- During handling of the above exception, another exception occurred:
- Traceback (most recent call last):
- File "/home/pi/klipper/klippy/klippy.py", line 135, in _connect
- cb()
- File "/home/pi/klipper/klippy/mcu.py", line 970, in _connect
- self._send_config(None)
- File "/home/pi/klipper/klippy/mcu.py", line 946, in _send_config
- raise self._printer.config_error(
- configparser.Error: Pin 'PA6' is not a valid pin name on mcu 'mcu'
- webhooks client 548127285712: Disconnected
- Restarting printer
- Start printer at Tue Nov 18 21:00:06 2025 (1763499606.9 3821.9)
- ===== Config file =====
- [virtual_sdcard]
- path = /home/klipper/printer_data/gcodes/
- on_error_gcode = CANCEL_PRINT
- [pause_resume]
- [display_status]
- [respond]
- [gcode_macro CANCEL_PRINT]
- description = Cancel the actual running print
- rename_existing = CANCEL_PRINT_BASE
- gcode =
- {% set client = printer['gcode_macro _CLIENT_VARIABLE']|default({}) %}
- {% set allow_park = client.park_at_cancel|default(false)|lower == 'true' %}
- {% set retract = client.cancel_retract|default(5.0)|abs %}
- {% set park_x = "" if (client.park_at_cancel_x|default(none) is none)
- else "X=" ~ client.park_at_cancel_x %}
- {% set park_y = "" if (client.park_at_cancel_y|default(none) is none)
- else "Y=" ~ client.park_at_cancel_y %}
- {% set custom_park = park_x|length > 0 or park_y|length > 0 %}
- {% if printer['gcode_macro RESUME'].restore_idle_timeout > 0 %}
- SET_IDLE_TIMEOUT TIMEOUT={printer['gcode_macro RESUME'].restore_idle_timeout}
- {% endif %}
- {% if (custom_park or not printer.pause_resume.is_paused) and allow_park %} _TOOLHEAD_PARK_PAUSE_CANCEL {park_x} {park_y} {% endif %}
- _CLIENT_RETRACT LENGTH={retract}
- TURN_OFF_HEATERS
- M106 S0
- {client.user_cancel_macro|default("")}
- SET_GCODE_VARIABLE MACRO=RESUME VARIABLE=idle_state VALUE=False
- SET_PAUSE_NEXT_LAYER ENABLE=0
- SET_PAUSE_AT_LAYER ENABLE=0 LAYER=0
- CANCEL_PRINT_BASE
- [gcode_macro PAUSE]
- description = Pause the actual running print
- rename_existing = PAUSE_BASE
- gcode =
- {% set client = printer['gcode_macro _CLIENT_VARIABLE']|default({}) %}
- {% set idle_timeout = client.idle_timeout|default(0) %}
- {% set temp = printer[printer.toolhead.extruder].target if printer.toolhead.extruder != '' else 0 %}
- {% set restore = False if printer.toolhead.extruder == ''
- else True if params.RESTORE|default(1)|int == 1 else False %}
- SET_GCODE_VARIABLE MACRO=RESUME VARIABLE=last_extruder_temp VALUE="{{'restore': restore, 'temp': temp}}"
- {% if idle_timeout > 0 %}
- SET_GCODE_VARIABLE MACRO=RESUME VARIABLE=restore_idle_timeout VALUE={printer.configfile.settings.idle_timeout.timeout}
- SET_IDLE_TIMEOUT TIMEOUT={idle_timeout}
- {% endif %}
- PAUSE_BASE
- {client.user_pause_macro|default("")}
- _TOOLHEAD_PARK_PAUSE_CANCEL {rawparams}
- [gcode_macro RESUME]
- description = Resume the actual running print
- rename_existing = RESUME_BASE
- variable_last_extruder_temp = {'restore': False, 'temp': 0}
- variable_restore_idle_timeout = 0
- variable_idle_state = False
- gcode =
- {% set client = printer['gcode_macro _CLIENT_VARIABLE']|default({}) %}
- {% set velocity = printer.configfile.settings.pause_resume.recover_velocity %}
- {% set sp_move = client.speed_move|default(velocity) %}
- {% set runout_resume = True if client.runout_sensor|default("") == ""
- else True if not printer[client.runout_sensor].enabled
- else printer[client.runout_sensor].filament_detected %}
- {% set can_extrude = True if printer.toolhead.extruder == ''
- else printer[printer.toolhead.extruder].can_extrude %}
- {% set do_resume = False %}
- {% set prompt_txt = [] %}
- {% if printer.idle_timeout.state|upper == "IDLE" or idle_state %}
- SET_GCODE_VARIABLE MACRO=RESUME VARIABLE=idle_state VALUE=False
- {% if last_extruder_temp.restore %}
- RESPOND TYPE=echo MSG='{"Restoring \"%s\" temperature to %3.1f\u00B0C, this may take some time" % (printer.toolhead.extruder, last_extruder_temp.temp) }'
- M109 S{last_extruder_temp.temp}
- {% set do_resume = True %}
- {% elif can_extrude %}
- {% set do_resume = True %}
- {% else %}
- RESPOND TYPE=error MSG='{"Resume aborted !!! \"%s\" not hot enough, please heat up again and press RESUME" % printer.toolhead.extruder}'
- {% set _d = prompt_txt.append("\"%s\" not hot enough, please heat up again and press RESUME" % printer.toolhead.extruder) %}
- {% endif %}
- {% elif can_extrude %}
- {% set do_resume = True %}
- {% else %}
- RESPOND TYPE=error MSG='{"Resume aborted !!! \"%s\" not hot enough, please heat up again and press RESUME" % printer.toolhead.extruder}'
- {% set _d = prompt_txt.append("\"%s\" not hot enough, please heat up again and press RESUME" % printer.toolhead.extruder) %}
- {% endif %}
- {% if runout_resume %}
- {% if do_resume %}
- {% if restore_idle_timeout > 0 %} SET_IDLE_TIMEOUT TIMEOUT={restore_idle_timeout} {% endif %}
- {client.user_resume_macro|default("")}
- _CLIENT_EXTRUDE
- RESUME_BASE VELOCITY={params.VELOCITY|default(sp_move)}
- {% endif %}
- {% else %}
- RESPOND TYPE=error MSG='{"Resume aborted !!! \"%s\" detects no filament, please load filament and press RESUME" % (client.runout_sensor.split(" "))[1]}'
- {% set _d = prompt_txt.append("\"%s\" detects no filament, please load filament and press RESUME" % (client.runout_sensor.split(" "))[1]) %}
- {% endif %}
- {% if not (runout_resume and do_resume) %}
- RESPOND TYPE=command MSG="action:prompt_begin RESUME aborted !!!"
- {% for element in prompt_txt %}
- RESPOND TYPE=command MSG='{"action:prompt_text %s" % element}'
- {% endfor %}
- RESPOND TYPE=command MSG="action:prompt_footer_button Ok|RESPOND TYPE=command MSG=action:prompt_end|info"
- RESPOND TYPE=command MSG="action:prompt_show"
- {% endif %}
- [gcode_macro SET_PAUSE_NEXT_LAYER]
- description = Enable a pause if the next layer is reached
- gcode =
- {% set pause_next_layer = printer['gcode_macro SET_PRINT_STATS_INFO'].pause_next_layer %}
- {% set ENABLE = params.ENABLE|default(1)|int != 0 %}
- {% set MACRO = params.MACRO|default(pause_next_layer.call, True) %}
- SET_GCODE_VARIABLE MACRO=SET_PRINT_STATS_INFO VARIABLE=pause_next_layer VALUE="{{ 'enable': ENABLE, 'call': MACRO }}"
- [gcode_macro SET_PAUSE_AT_LAYER]
- description = Enable/disable a pause if a given layer number is reached
- gcode =
- {% set pause_at_layer = printer['gcode_macro SET_PRINT_STATS_INFO'].pause_at_layer %}
- {% set ENABLE = params.ENABLE|int != 0 if params.ENABLE is defined
- else params.LAYER is defined %}
- {% set LAYER = params.LAYER|default(pause_at_layer.layer)|int %}
- {% set MACRO = params.MACRO|default(pause_at_layer.call, True) %}
- SET_GCODE_VARIABLE MACRO=SET_PRINT_STATS_INFO VARIABLE=pause_at_layer VALUE="{{ 'enable': ENABLE, 'layer': LAYER, 'call': MACRO }}"
- [gcode_macro SET_PRINT_STATS_INFO]
- rename_existing = SET_PRINT_STATS_INFO_BASE
- description = Overwrite, to get pause_next_layer and pause_at_layer feature
- variable_pause_next_layer = { 'enable': False, 'call': "PAUSE" }
- variable_pause_at_layer = { 'enable': False, 'layer': 0, 'call': "PAUSE" }
- gcode =
- {% if pause_next_layer.enable %}
- RESPOND TYPE=echo MSG='{"%s, forced by pause_next_layer" % pause_next_layer.call}'
- {pause_next_layer.call}
- SET_PAUSE_NEXT_LAYER ENABLE=0
- {% elif pause_at_layer.enable and params.CURRENT_LAYER is defined and params.CURRENT_LAYER|int == pause_at_layer.layer %}
- RESPOND TYPE=echo MSG='{"%s, forced by pause_at_layer [%d]" % (pause_at_layer.call, pause_at_layer.layer)}'
- {pause_at_layer.call}
- SET_PAUSE_AT_LAYER ENABLE=0
- {% endif %}
- SET_PRINT_STATS_INFO_BASE {rawparams}
- [gcode_macro _TOOLHEAD_PARK_PAUSE_CANCEL]
- description = Helper: park toolhead used in PAUSE and CANCEL_PRINT
- gcode =
- {% set client = printer['gcode_macro _CLIENT_VARIABLE']|default({}) %}
- {% set velocity = printer.configfile.settings.pause_resume.recover_velocity %}
- {% set use_custom = client.use_custom_pos|default(false)|lower == 'true' %}
- {% set custom_park_x = client.custom_park_x|default(0.0) %}
- {% set custom_park_y = client.custom_park_y|default(0.0) %}
- {% set park_dz = client.custom_park_dz|default(2.0)|abs %}
- {% set sp_hop = client.speed_hop|default(15) * 60 %}
- {% set sp_move = client.speed_move|default(velocity) * 60 %}
- {% set origin = printer.gcode_move.homing_origin %}
- {% set act = printer.gcode_move.gcode_position %}
- {% set max = printer.toolhead.axis_maximum %}
- {% set cone = printer.toolhead.cone_start_z|default(max.z) %}
- {% set round_bed = True if printer.configfile.settings.printer.kinematics is in ['delta','polar','rotary_delta','winch']
- else False %}
- {% set z_min = params.Z_MIN|default(0)|float %}
- {% set z_park = [[(act.z + park_dz), z_min]|max, (max.z - origin.z)]|min %}
- {% set x_park = params.X if params.X is defined
- else custom_park_x if use_custom
- else 0.0 if round_bed
- else (max.x - 5.0) %}
- {% set y_park = params.Y if params.Y is defined
- else custom_park_y if use_custom
- else (max.y - 5.0) if round_bed and z_park < cone
- else 0.0 if round_bed
- else (max.y - 5.0) %}
- _CLIENT_RETRACT
- {% if "xyz" in printer.toolhead.homed_axes %}
- G90
- G1 Z{z_park} F{sp_hop}
- G1 X{x_park} Y{y_park} F{sp_move}
- {% if not printer.gcode_move.absolute_coordinates %} G91 {% endif %}
- {% else %}
- RESPOND TYPE=echo MSG='Printer not homed'
- {% endif %}
- [gcode_macro _CLIENT_EXTRUDE]
- description = Extrudes, if the extruder is hot enough
- gcode =
- {% set client = printer['gcode_macro _CLIENT_VARIABLE']|default({}) %}
- {% set use_fw_retract = (client.use_fw_retract|default(false)|lower == 'true') and (printer.firmware_retraction is defined) %}
- {% set length = params.LENGTH|default(client.unretract)|default(1.0)|float %}
- {% set speed = params.SPEED|default(client.speed_unretract)|default(35) %}
- {% set absolute_extrude = printer.gcode_move.absolute_extrude %}
- {% if printer.toolhead.extruder != '' %}
- {% if printer[printer.toolhead.extruder].can_extrude %}
- {% if use_fw_retract %}
- {% if length < 0 %}
- G10
- {% else %}
- G11
- {% endif %}
- {% else %}
- M83
- G1 E{length} F{(speed|float|abs) * 60}
- {% if absolute_extrude %}
- M82
- {% endif %}
- {% endif %}
- {% else %}
- RESPOND TYPE=echo MSG='{"\"%s\" not hot enough" % printer.toolhead.extruder}'
- {% endif %}
- {% endif %}
- [gcode_macro _CLIENT_RETRACT]
- description = Retracts, if the extruder is hot enough
- gcode =
- {% set client = printer['gcode_macro _CLIENT_VARIABLE']|default({}) %}
- {% set length = params.LENGTH|default(client.retract)|default(1.0)|float %}
- {% set speed = params.SPEED|default(client.speed_retract)|default(35) %}
- _CLIENT_EXTRUDE LENGTH=-{length|float|abs} SPEED={speed|float|abs}
- [gcode_macro _CLIENT_LINEAR_MOVE]
- description = Linear move with save and restore of the gcode state
- gcode =
- {% set x_move = "X" ~ params.X if params.X is defined else "" %}
- {% set y_move = "Y" ~ params.Y if params.Y is defined else "" %}
- {% set z_move = "Z" ~ params.Z if params.Z is defined else "" %}
- {% set e_move = "E" ~ params.E if params.E is defined else "" %}
- {% set rate = "F" ~ params.F if params.F is defined else "" %}
- {% set ABSOLUTE = params.ABSOLUTE | default(0) | int != 0 %}
- {% set ABSOLUTE_E = params.ABSOLUTE_E | default(0) | int != 0 %}
- SAVE_GCODE_STATE NAME=_client_movement
- {% if x_move or y_move or z_move %}
- G9{ 0 if ABSOLUTE else 1 }
- {% endif %}
- {% if e_move %}
- M8{ 2 if ABSOLUTE_E else 3 }
- {% endif %}
- G1 { x_move } { y_move } { z_move } { e_move } { rate }
- RESTORE_GCODE_STATE NAME=_client_movement
- [stepper_x]
- step_pin = PD7
- dir_pin = !PC5
- enable_pin = !PD6
- microsteps = 16
- rotation_distance = 40
- endstop_pin = ^PC2
- position_endstop = 0
- position_max = 235
- homing_speed = 25
- [stepper_y]
- step_pin = PC6
- dir_pin = !PC7
- enable_pin = !PD6
- microsteps = 16
- rotation_distance = 40
- endstop_pin = ^PC3
- position_endstop = 0
- position_max = 235
- homing_speed = 25
- [stepper_z]
- step_pin = PB3
- dir_pin = PB2
- enable_pin = !PA5
- microsteps = 16
- rotation_distance = 8
- endstop_pin = probe:z_virtual_endstop
- position_min = -5
- position_max = 240
- [extruder]
- max_extrude_only_distance = 100.0
- step_pin = PB1
- dir_pin = !PB0
- enable_pin = !PD6
- microsteps = 16
- rotation_distance = 33.683
- nozzle_diameter = 0.400
- filament_diameter = 1.750
- heater_pin = PD5
- sensor_type = EPCOS 100K B57560G104F
- sensor_pin = PA7
- control = pid
- pid_kp = 29.211
- pid_ki = 10.819
- pid_kd = 19.717
- min_temp = 0
- max_temp = 300
- [heater_bed]
- heater_pin = PD4
- sensor_type = EPCOS 100K B57560G104F
- sensor_pin = PA6
- control = pid
- pid_kp = 73.853
- pid_ki = 1.901
- pid_kd = 717.301
- min_temp = 0
- max_temp = 130
- [fan]
- pin = PB4
- [mcu]
- serial = /tmp/klipper_host_mcu
- [printer]
- kinematics = cartesian
- max_velocity = 500
- max_accel = 6000
- max_z_velocity = 5
- max_z_accel = 100
- [bed_screws]
- screw1 = 30.5, 37
- screw2 = 30.5, 207
- screw3 = 204.5, 207
- screw4 = 204.5, 37
- [display]
- lcd_type = st7920
- cs_pin = PA3
- sclk_pin = PA1
- sid_pin = PC1
- encoder_pins = ^PD2, ^PD3
- click_pin = ^!PC0
- [bltouch]
- sensor_pin = ^PC4
- control_pin = PA4
- x_offset = -45
- z_offset = 2.540
- speed = 10
- samples = 3
- probe_with_touch_mode = False
- samples_tolerance = 0.1
- sample_retract_dist = 5.0
- [safe_z_home]
- home_xy_position = 117, 117
- speed = 25
- z_hop = 5
- z_hop_speed = 10
- [bed_mesh]
- speed = 25
- horizontal_move_z = 5
- mesh_min = 47,56
- mesh_max = 190,210
- probe_count = 5,5
- =======================
- Extruder max_extrude_ratio=0.266081
- mcu 'mcu': Starting connect
- webhooks client 548128632528: New connection
- webhooks client 548128632528: Client info {'program': 'Moonraker', 'version': 'v0.9.3-125-g3129d89'}
- Loaded MCU 'mcu' 138 commands (v0.13.0-403-gb4c7cf4a3 / gcc: (Debian 12.2.0-14+deb12u1) 12.2.0 binutils: (GNU Binutils for Debian) 2.40)
- MCU 'mcu' config: ADC_MAX=4095 CLOCK_FREQ=50000000 MCU=linux PCA9685_MAX=4096 PWM_MAX=32768 STATS_SUMSQ_BASE=256 STEPPER_STEP_BOTH_EDGE=1
- Sending MCU 'mcu' printer configuration...
- Config error
- Traceback (most recent call last):
- File "/home/pi/klipper/klippy/mcu.py", line 935, in _send_config
- self._serial.send(c)
- File "/home/pi/klipper/klippy/serialhdl.py", line 266, in send
- cmd = self.msgparser.create_command(msg)
- ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
- File "/home/pi/klipper/klippy/msgproto.py", line 349, in create_command
- cmd = mp.encode_by_name(**argparts)
- ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
- File "/home/pi/klipper/klippy/msgproto.py", line 179, in encode_by_name
- t.encode(out, params[name])
- File "/home/pi/klipper/klippy/msgproto.py", line 108, in encode
- raise enumeration_error(self.enum_name, v)
- msgproto.enumeration_error: Unknown value 'PA6' in enumeration 'pin'
- During handling of the above exception, another exception occurred:
- Traceback (most recent call last):
- File "/home/pi/klipper/klippy/klippy.py", line 135, in _connect
- cb()
- File "/home/pi/klipper/klippy/mcu.py", line 970, in _connect
- self._send_config(None)
- File "/home/pi/klipper/klippy/mcu.py", line 946, in _send_config
- raise self._printer.config_error(
- configparser.Error: Pin 'PA6' is not a valid pin name on mcu 'mcu'
- Transition to shutdown state: MCU shutdown
- Dumping gcode input 0 blocks
- Dumping 5 requests for client 548128632528
- Received 3823.498587: b'{"id":547811727312,"method":"info","params":{"client_info":{"program":"Moonraker","version":"v0.9.3-125-g3129d89"}}}'
- Received 3823.498587: b'{"id":547838850448,"method":"objects/query","params":{"objects":{"gcode":["commands"]}}}'
- Received 3823.501719: b'{"id":547838219856,"method":"list_endpoints","params":{}}'
- Received 3823.754648: b'{"id":547811727312,"method":"info","params":{}}'
- Received 3824.006315: b'{"id":547954817872,"method":"info","params":{}}'
- MCU 'mcu' shutdown: oids already allocated
- clocksync state: mcu_freq=50000000 last_clock=179095401475 clock_est=(3823.708 179078342781 49997658.134) min_half_rtt=0.000054 min_rtt_time=3823.946 time_avg=3823.708(0.017) clock_avg=179078342781.122(854023.152) pred_variance=1846419677.527
- Dumping serial stats: bytes_write=933 bytes_read=5276 bytes_retransmit=0 bytes_invalid=0 send_seq=115 receive_seq=115 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0
- Dumping send queue 100 messages
- Sent 0 3823.520591 3823.520591 9: seq: 1f, identify offset=280 count=40
- Sent 1 3823.521139 3823.521139 9: seq: 10, identify offset=320 count=40
- Sent 2 3823.521683 3823.521683 9: seq: 11, identify offset=360 count=40
- Sent 3 3823.522174 3823.522174 9: seq: 12, identify offset=400 count=40
- Sent 4 3823.522638 3823.522638 9: seq: 13, identify offset=440 count=40
- Sent 5 3823.523101 3823.523101 9: seq: 14, identify offset=480 count=40
- Sent 6 3823.523573 3823.523573 9: seq: 15, identify offset=520 count=40
- Sent 7 3823.524041 3823.524041 9: seq: 16, identify offset=560 count=40
- Sent 8 3823.524520 3823.524520 9: seq: 17, identify offset=600 count=40
- Sent 9 3823.525006 3823.525006 9: seq: 18, identify offset=640 count=40
- Sent 10 3823.525477 3823.525477 9: seq: 19, identify offset=680 count=40
- Sent 11 3823.525931 3823.525931 9: seq: 1a, identify offset=720 count=40
- Sent 12 3823.526394 3823.526394 9: seq: 1b, identify offset=760 count=40
- Sent 13 3823.526857 3823.526857 9: seq: 1c, identify offset=800 count=40
- Sent 14 3823.527313 3823.527313 9: seq: 1d, identify offset=840 count=40
- Sent 15 3823.527780 3823.527780 9: seq: 1e, identify offset=880 count=40
- Sent 16 3823.528231 3823.528231 9: seq: 1f, identify offset=920 count=40
- Sent 17 3823.528689 3823.528689 9: seq: 10, identify offset=960 count=40
- Sent 18 3823.529194 3823.529194 9: seq: 11, identify offset=1000 count=40
- Sent 19 3823.529671 3823.529671 9: seq: 12, identify offset=1040 count=40
- Sent 20 3823.530136 3823.530136 9: seq: 13, identify offset=1080 count=40
- Sent 21 3823.530589 3823.530589 9: seq: 14, identify offset=1120 count=40
- Sent 22 3823.531048 3823.531048 9: seq: 15, identify offset=1160 count=40
- Sent 23 3823.531527 3823.531527 9: seq: 16, identify offset=1200 count=40
- Sent 24 3823.531996 3823.531996 9: seq: 17, identify offset=1240 count=40
- Sent 25 3823.532457 3823.532457 9: seq: 18, identify offset=1280 count=40
- Sent 26 3823.532920 3823.532920 9: seq: 19, identify offset=1320 count=40
- Sent 27 3823.533444 3823.533444 9: seq: 1a, identify offset=1360 count=40
- Sent 28 3823.533927 3823.533927 9: seq: 1b, identify offset=1400 count=40
- Sent 29 3823.534392 3823.534392 9: seq: 1c, identify offset=1440 count=40
- Sent 30 3823.534848 3823.534848 9: seq: 1d, identify offset=1480 count=40
- Sent 31 3823.535291 3823.535291 9: seq: 1e, identify offset=1520 count=40
- Sent 32 3823.535739 3823.535739 9: seq: 1f, identify offset=1560 count=40
- Sent 33 3823.536202 3823.536202 9: seq: 10, identify offset=1600 count=40
- Sent 34 3823.536647 3823.536647 9: seq: 11, identify offset=1640 count=40
- Sent 35 3823.537155 3823.537155 9: seq: 12, identify offset=1680 count=40
- Sent 36 3823.537669 3823.537669 9: seq: 13, identify offset=1720 count=40
- Sent 37 3823.538137 3823.538137 9: seq: 14, identify offset=1760 count=40
- Sent 38 3823.538611 3823.538611 9: seq: 15, identify offset=1800 count=40
- Sent 39 3823.539068 3823.539068 9: seq: 16, identify offset=1840 count=40
- Sent 40 3823.539539 3823.539539 9: seq: 17, identify offset=1880 count=40
- Sent 41 3823.539993 3823.539993 9: seq: 18, identify offset=1920 count=40
- Sent 42 3823.540445 3823.540445 9: seq: 19, identify offset=1960 count=40
- Sent 43 3823.540924 3823.540924 9: seq: 1a, identify offset=2000 count=40
- Sent 44 3823.541478 3823.541478 9: seq: 1b, identify offset=2040 count=40
- Sent 45 3823.541942 3823.541942 9: seq: 1c, identify offset=2080 count=40
- Sent 46 3823.542399 3823.542399 9: seq: 1d, identify offset=2120 count=40
- Sent 47 3823.542851 3823.542851 9: seq: 1e, identify offset=2160 count=40
- Sent 48 3823.543317 3823.543317 9: seq: 1f, identify offset=2200 count=40
- Sent 49 3823.543764 3823.543764 9: seq: 10, identify offset=2240 count=40
- Sent 50 3823.544217 3823.544217 9: seq: 11, identify offset=2280 count=40
- Sent 51 3823.544667 3823.544667 9: seq: 12, identify offset=2320 count=40
- Sent 52 3823.545186 3823.545186 9: seq: 13, identify offset=2360 count=40
- Sent 53 3823.545709 3823.545709 9: seq: 14, identify offset=2400 count=40
- Sent 54 3823.546161 3823.546161 9: seq: 15, identify offset=2440 count=40
- Sent 55 3823.546608 3823.546608 9: seq: 16, identify offset=2480 count=40
- Sent 56 3823.547059 3823.547059 9: seq: 17, identify offset=2520 count=40
- Sent 57 3823.547533 3823.547533 9: seq: 18, identify offset=2560 count=40
- Sent 58 3823.548015 3823.548015 9: seq: 19, identify offset=2600 count=40
- Sent 59 3823.548467 3823.548467 9: seq: 1a, identify offset=2640 count=40
- Sent 60 3823.548918 3823.548918 9: seq: 1b, identify offset=2680 count=40
- Sent 61 3823.549420 3823.549420 9: seq: 1c, identify offset=2720 count=40
- Sent 62 3823.549880 3823.549880 9: seq: 1d, identify offset=2760 count=40
- Sent 63 3823.550348 3823.550348 9: seq: 1e, identify offset=2800 count=40
- Sent 64 3823.550801 3823.550801 9: seq: 1f, identify offset=2840 count=40
- Sent 65 3823.551244 3823.551244 9: seq: 10, identify offset=2880 count=40
- Sent 66 3823.551687 3823.551687 9: seq: 11, identify offset=2920 count=40
- Sent 67 3823.552151 3823.552151 9: seq: 12, identify offset=2960 count=40
- Sent 68 3823.552623 3823.552623 9: seq: 13, identify offset=3000 count=40
- Sent 69 3823.553296 3823.553296 9: seq: 14, identify offset=3040 count=40
- Sent 70 3823.553827 3823.553827 9: seq: 15, identify offset=3080 count=40
- Sent 71 3823.554303 3823.554303 9: seq: 16, identify offset=3120 count=40
- Sent 72 3823.554778 3823.554778 9: seq: 17, identify offset=3160 count=40
- Sent 73 3823.555236 3823.555236 9: seq: 18, identify offset=3200 count=40
- Sent 74 3823.555724 3823.555724 9: seq: 19, identify offset=3240 count=40
- Sent 75 3823.556209 3823.556209 9: seq: 1a, identify offset=3280 count=40
- Sent 76 3823.556861 3823.556861 9: seq: 1b, identify offset=3320 count=40
- Sent 77 3823.557370 3823.557370 9: seq: 1c, identify offset=3360 count=40
- Sent 78 3823.557841 3823.557841 9: seq: 1d, identify offset=3400 count=40
- Sent 79 3823.558296 3823.558296 9: seq: 1e, identify offset=3440 count=40
- Sent 80 3823.558764 3823.558764 9: seq: 1f, identify offset=3480 count=40
- Sent 81 3823.559213 3823.559213 9: seq: 10, identify offset=3520 count=40
- Sent 82 3823.559670 3823.559670 9: seq: 11, identify offset=3560 count=40
- Sent 83 3823.560131 3823.560131 9: seq: 12, identify offset=3600 count=40
- Sent 84 3823.560610 3823.560610 9: seq: 13, identify offset=3640 count=40
- Sent 85 3823.561108 3823.561108 9: seq: 14, identify offset=3680 count=40
- Sent 86 3823.561574 3823.561574 9: seq: 15, identify offset=3720 count=40
- Sent 87 3823.562028 3823.562028 9: seq: 16, identify offset=3756 count=40
- Sent 88 3823.639932 3823.639932 6: seq: 17, get_uptime
- Sent 89 3823.690808 3823.690808 6: seq: 18, get_clock
- Sent 90 3823.741722 3823.741722 6: seq: 19, get_clock
- Sent 91 3823.793348 3823.793348 6: seq: 1a, get_clock
- Sent 92 3823.844237 3823.844237 6: seq: 1b, get_clock
- Sent 93 3823.895007 3823.895007 6: seq: 1c, get_clock
- Sent 94 3823.945749 3823.945749 6: seq: 1d, get_clock
- Sent 95 3823.996447 3823.996447 6: seq: 1e, get_clock
- Sent 96 3824.047432 3824.047432 6: seq: 1f, get_clock
- Sent 97 3824.049048 3824.049048 6: seq: 10, get_config
- Sent 98 3824.049387 3824.049387 6: seq: 11, get_clock
- Sent 99 3824.053197 3824.053197 7: seq: 12, allocate_oids count=20
- Dumping receive queue 100 messages
- Receive: 0 3823.520689 3823.520591 49: seq: 10, identify_response offset=280 data=b'IT<\xef3\xb9\x1f\x87\xb2\xbdo\x16\x17!\n\xa7\xd9\x8a]\xa6\xe5b\x96\x90\x9d\xd0\x9bfe>\xe4Y\xcf\xf3\xf2!#&a\xab'
- Receive: 1 3823.521249 3823.521139 49: seq: 11, identify_response offset=320 data=b'\xa9Gw\xa8\xa289\xa6[\\\xa4\x1b\x87\xd5\xe4U\xbb\xcbDcw\xadg\x8a\x1c\x07z\xab\x06\x83^3O~n:5\xc8\xfb\xe9'
- Receive: 2 3823.521796 3823.521683 49: seq: 12, identify_response offset=360 data=b'd\x13\xd9%\x8e\xc3R\xec\xc4\x90WY;\x0e3\x82\xbb\xbc\x1a\xb9\xda"\xdf\xe6c5dv\xa0\xce\x0fY9\xf6\xf9\x00:\xa9\xf8\x0c'
- Receive: 3 3823.522267 3823.522174 49: seq: 13, identify_response offset=400 data=b'Vn>\x19\xaco=I\xf1^\xe4\xd5\x8bg\xff\x92\x8a\x8a\xf7}\xdb{\\\x9f\x07\x8em\x0e:8\xb4\xdd\x84\x8bb\xc2v\xe8\xd8\xde'
- Receive: 4 3823.522733 3823.522638 49: seq: 14, identify_response offset=440 data=b'\x97q\xbcZ\xdbez\xa9\xa5\xcf\xb8y(c\xfb\x94\xd8\xa7\xd4>\xad\xec\x13\xaf\xf2\x07\xab&p.N\xe6\xfb\xc3*8\x98%v\xb9'
- Receive: 5 3823.523194 3823.523101 49: seq: 15, identify_response offset=480 data=b'\x00y\xef\xf3\xa6\xe1\x95\x92\nH\xcc\xcc!\x8b\xea\xb3;~7\x81\x08\x0bf\xce;\xf6\x86\x8b:\\n\xe2\xb5\x99\x1a\xd0\xacZ\xac\xd6'
- Receive: 6 3823.523671 3823.523573 49: seq: 16, identify_response offset=520 data=b'\x16\xad*\x8b \r\xc2SX\x9bp\x8e\x95\xdd\x8ba\x0f*4\xdc\x1e\xe33\x1c&\xfe\x906p\xb4B\x86\xe5\xbd\xd3)\x99M\x1f\xb3'
- Receive: 7 3823.524153 3823.524041 49: seq: 17, identify_response offset=560 data=b"\xe1\xa1S'\x0e\x88\xb0w\xd1\x99\x01\xe0\xd3\xe3\xe0\xb4\x97\x90\xad\xcc\xb6\xa2\x02M\xb4l\x9f\x87\x89\xa5\xaa\xbbq\x13&\xcb\x932pX"
- Receive: 8 3823.524612 3823.524520 49: seq: 18, identify_response offset=600 data=b"\ro;q\xe0\xd5L7\x95\xd5I\xf1_\xe0e?\x82\xb3\x1b2\xd4.\xcf\xd6%\x87!80w\xaeIl'\xed\x8a|\x93\xae\x13"
- Receive: 9 3823.525103 3823.525006 49: seq: 19, identify_response offset=640 data=b'o\xdf\xf8\x03^\xa7W\xfe\xc3\x9dq\xf1\x00.\xc1M\xab\r`?\xceM\x02F\x8el\xe2<tr\xee\xee\xeb\x13\x06\xf6\xff\xcc\x1e;'
- Receive: 10 3823.525569 3823.525477 49: seq: 1a, identify_response offset=680 data=b'\x11\xa9\xcd\xe2zn\x83N\xf4fI\x9c@\xf2\x02\xe9\xa5>\ngy\xe0\x96\xe6\xac\xa1\x97\x1e\xc4\x1d\xcf\xf6b\xb7W\x04\xd1\xda\xc7\x07'
- Receive: 11 3823.526023 3823.525931 49: seq: 1b, identify_response offset=720 data=b'\x9f\xb5\xab\xf8\t\x7fhaNU6\xc9\x84\xd2\xf8\xd7S\xc4\x1a\x94\xd5r\x87>\x03V\x8d&\xb4\xa8\xe4hw\x85\xb4v\x159\xdf#'
- Receive: 12 3823.526501 3823.526394 49: seq: 1c, identify_response offset=760 data=b'\x87\xd5\xc6\xb9\x9eB\x9e0O&A\xab\xcd\xe3CSdS\xf3gE]fs\x8f\x90x\x92\x1a8^\xcc\x96ux\xd5v\xc5J\xd1'
- Receive: 13 3823.526946 3823.526857 49: seq: 1d, identify_response offset=800 data=b'\x9bG\xbaV\x14\xb2\xc3\x1a+\xc9\xbdIC\xb7\xb1a\xcf\xfb\xba\x05\xa7\xd8\x9d\x94\xa8\x0fvBM\x9d/\x1c\xeab\xcc{\xab]\xfd!'
- Receive: 14 3823.527408 3823.527313 49: seq: 1e, identify_response offset=840 data=b';r\xf9l\xb0\x83h,\x83\xa89m\xcd\xe9\xe8\xd0\xa3<\x9cX\x97g\x0b\x08*F0\xc1\x16B\x92\x8dy\x83Yv\xca\xfc\xe8|'
- Receive: 15 3823.527870 3823.527780 49: seq: 1f, identify_response offset=880 data=b'\x02\x8b\x86w k\xfb\x92\xf7\xce\x98\xf0j\x08\r\xc2}/\x06~\x84\x81jO\x88\xc0\n\xafy\xbf\xe3M\xf1\x90\xe1M\x00L\xc0\x10'
- Receive: 16 3823.528322 3823.528231 49: seq: 10, identify_response offset=920 data=b'\xdd\n\xd9\xbe\xad\xf9\xd1\r/\xf3\xba\xf3MH\xbf\xdb\xfb}\x1a\x01\x00\xeb\xee\x0e\xa3\xedZ\x19\xf7b\xb7\x03G\x05\x9b\x90-\xb9It'
- Receive: 17 3823.528792 3823.528689 49: seq: 11, identify_response offset=960 data=b'Ufq\x15_\x00O\xf9\xc0\xad\x80\xd0\xdc\xb6\x02nn\xf0B\x19\xc9\x90\x15}Aw\xc8\xd9b\x07\x0eH\xf1\tB\xd6o\n\x07\xbc'
- Receive: 18 3823.529290 3823.529194 49: seq: 12, identify_response offset=1000 data=b'\x1b\xbd\x8e\x1d\x9e\x02X\xf2\xd9B_f`\xa0\r8\xd2\xba\xb4\xb7<>\x93\x9c\xd3`\x86\x86G\xc0\xbc\x18D\xa3\xc1q\xa8[\xeb\x9f'
- Receive: 19 3823.529766 3823.529671 49: seq: 13, identify_response offset=1040 data=b'Fp\xb0\x0czb:L\xadO\\\xd9"\xc3\xb1\xac\xe2:2\xd9\x10"\xfaY\xf0\x9f\xbe\x17W\xee\x14|0\x08\x0b\x7f\xf1\x9c\xb9$'
- Receive: 20 3823.530233 3823.530136 49: seq: 14, identify_response offset=1080 data=b'\xa5\x8f\x03G%\xef}B0Qk\x96e\xee)\xb0g4\x93\xa9\xd2\x98\xa6\xd2Z5\x17D\x0c\x82\x10%o\x06\xb1\x85\xc0p\xbb\x85'
- Receive: 21 3823.530684 3823.530589 49: seq: 15, identify_response offset=1120 data=b"\x15\x95y\xdb\xc8\x03817'\xc0\xc6G\x14l\xd8\xc3\x82\xfb\xb6*\xd5\xcb\xd3*\xc3(\xb8\xf1Th\x03L\xcc%\xed/\xf37'"
- Receive: 22 3823.531154 3823.531048 49: seq: 16, identify_response offset=1160 data=b'|,\xb2E=\x02\xa7\xa8o\x9d\xd5\xf1\x9a\xa7\xd4\xf7<\\\x1f#\xe2\xb9@\x90\xbcsn(\xdf\xf2\xe1\x81\x0cJ\xe2\x85\xfa\xe2\x99\x98'
- Receive: 23 3823.531621 3823.531527 49: seq: 17, identify_response offset=1200 data=b'\x0f\xe6\x07\x1c\x1c\xf2^\x1b\x9eT\xafz3\xbb>\xaf\x15\x93\xea!\x03\xdfi\xacS \x0f`(\xe6\x86Wjm\xd9KB\x0f2v'
- Receive: 24 3823.532092 3823.531996 49: seq: 18, identify_response offset=1240 data=b"\xa5c\x9dR\x82\xfd\xe8\x1dv\x02~\x82\xf68\x8b\xd3'r\x02\xed\x8egxJ&\xa3\xbbK\xd6\xdeD\x93\xc0}6Q\xba\x9e\xe1\xcd"
- Receive: 25 3823.532548 3823.532457 49: seq: 19, identify_response offset=1280 data=b"'JW\x16a\x1e\xdb\xffC\xe7U;\xe7\xa5\xe3\x01\xf7\xa6\x8e\x0c\xe23^|\xf6b\xeb(0<\xcc\x12\x02\xcbA\xd7\xc2\xc9\xcf\xd7"
- Receive: 26 3823.533049 3823.532920 49: seq: 1a, identify_response offset=1320 data=b'\xf7\xee\xbd\xc4L0\x0b\xea\x1f\xd1C\x8fE\xe1s\xa8Nzi\xe6\x9a\x04\xd5\xf3\x03\x9ab\xcd\xa5\xba\xda\x18\xf0<\x82\x9e\xcd\xb3Z\xcd'
- Receive: 27 3823.533555 3823.533444 49: seq: 1b, identify_response offset=1360 data=b'\x11\x8f\xa6J\r\xc6,\xca\x9es\xb4\x9e\xe1)\x03\x9e\xd9\xd2\xda\xf25\r\xa8\xe7\\\x05S\xb4#\x9e\xec\xeeg\xb1\xf1|\x9ex\x86w'
- Receive: 28 3823.534024 3823.533927 49: seq: 1c, identify_response offset=1400 data=b'4\x91U\xe3\xa3H\xed\t\x17\x02\x81\x99\xd8\x92\xeal\xec\n4\xf3LH\xb0c+\xe0S\xc1\xcb\x9f\xeb\xc7D\x83\xe9\x05\x82&\xb8K'
- Receive: 29 3823.534488 3823.534392 49: seq: 1d, identify_response offset=1440 data=b"KO\x81S\xd2\xbf\x91\x9fJR\xed\x1a\xad\x1f\xe4\x07\x96D\xc7\xf8'I\xac\xe5\xa0b\x86\x96b\x1a\xa4\x9f\xc2\x8ec\x83\x8c1\x1ds"
- Receive: 30 3823.534939 3823.534848 49: seq: 1e, identify_response offset=1480 data=b'\xd9\x15\xef)\x8c1\x17\xcc^]V\xf0\x0b\xba\x8f+PB\xa2\x02A5\xef|\x11\xc0\x82\xc3G\x1c\x7f\xab\xb3D\x1c\xb6\x17\x1d!)'
- Receive: 31 3823.535382 3823.535291 49: seq: 1f, identify_response offset=1520 data=b'\xb6U&a\xe7\x9c\xa4\x15@\x94\x12Q\xc3\x0f\x9a\x05\x08U\xed\x8d)z\x8af\x02B\xf2\xc5\xf6\xf7\xf3"\x94\xa7f\xd1H\xf3Or'
- Receive: 32 3823.535844 3823.535739 49: seq: 10, identify_response offset=1560 data=b'\x1d\x90)\x12\xb8T\x11i)\xf50,6~\xe2\x02\x02\xe6\xdb-\xe6\xb9\x19\x04\xb2:\x95\xc12\xc9l\nM\xe2\xca\x10\xea5\x13\xe5'
- Receive: 33 3823.536293 3823.536202 49: seq: 11, identify_response offset=1600 data=b'A\xa7\xa6Ku\x93\xb52\xd0\xbf\xa1\xfe\x8d\xf4oL~\x0b\xc3\xe0\xf9\xd4\x9e\xed\x1fM\x8c0\x9a\x1a\x9f\x02=\t\n\xd7\xe5EX\x86'
- Receive: 34 3823.536737 3823.536647 49: seq: 12, identify_response offset=1640 data=b"\xda:w\xec\xee\xb1MDx\xdeM\xe8A\xa3\xd8@'!\x17\x0e\xe9\x90\xabnK\xee\x85^@\x92:\x92i\xbcU\x0b\xd9\x9a(\xab"
- Receive: 35 3823.537261 3823.537155 49: seq: 13, identify_response offset=1680 data=b'n\xa58\x95*\x99\xe9\xe6\xa9K\xaa\xd9||#\x11\x98!%cO\xc5\xb4\xc9z\x8au:\xa4MV\x88\xa5\xd2\xae\x0c\xe3f\xb8\xfe'
- Receive: 36 3823.537761 3823.537669 49: seq: 14, identify_response offset=1720 data=b'\x85w\xb4\xa0\xdf\x1b\x87\xa0\xa2u\xf4\x08\x14~\x9c\x0c\xb4\x80\x02\x16\xd6I\xd3D\xd6*\x96\xb4\xb1.\xc5!p\xfe\x9a\x1a\x85\xa8C\xad'
- Receive: 37 3823.538241 3823.538137 49: seq: 15, identify_response offset=1760 data=b'\x13\xe6\xbbvx\x83\x9f\x8c\xf1\xae\xedu&@\x1eQ\xbd[C\xe0\x87N@\xe0\xe4\xe7\x1d\x1b;\xd3l\x17>\x12\x08\x85\xa2\xa2S\xbe'
- Receive: 38 3823.538702 3823.538611 49: seq: 16, identify_response offset=1800 data=b'\xd1s\x18\xf1\x17\x93\xe0ay\xf7\xf2\xd5U\xf6\xfe\xf2W\x0c\x8f1)\xbf\xfa\xe1\xa7\xab\xef\xb3\xef>\xbe\xfe\x197J\x7fg\x8b\xf7W'
- Receive: 39 3823.539156 3823.539068 49: seq: 17, identify_response offset=1840 data=b'\x9f\x16\x17\x8bJ4\xe3aq\xb6\xf8pu\xa9\x1c\x82!\x03\x8d\xfa\xf0\xcb{z\x8d\xc2\x15FB\xd77\x977\xd7\xd9\xf5\xa7\xf7\xd7?'
- Receive: 40 3823.539631 3823.539539 49: seq: 18, identify_response offset=1880 data=b'g//\xaf_c\xee\x94\xe2\xf0\xeb\x0f\x1f^\x7f\xcc\xf07{\xf9\xd3\xcd\xdb\xec\xf5\xab7\x00\x0c\xbe`b5B\xaa\xa7\xca\x19\xaa\xee'
- Receive: 41 3823.540082 3823.539993 49: seq: 19, identify_response offset=1920 data=b'\xec\xd7\x9b\xf0\x1d"{\x15\xa2\x83\x9a-.\x96_(\xd4\x07$\r{\xbe\\\\\xfcgy\x16$\xbf\x01hR\x9bB\x84\x1f\xde]\x87'
- Receive: 42 3823.540555 3823.540445 49: seq: 1a, identify_response offset=1960 data=b'\xaf~\x01\xba3|\x8c^\xbd\xa55A\xabU\x89[\x05d8\x81\xda\xcd\xfa7H\xc7:\xd1\xd2\x8c\xe1\xda\xbc\xe3\x8c\xcbo\x1f\x83\x04'
- Receive: 43 3823.541081 3823.540924 49: seq: 1b, identify_response offset=2000 data=b'\x16\x02\xe33Xha\tD\x19SXdakH`\xa6\xb0\xd8\xc2\x82\x00\xc2\xdf)0q\xc08\x9es\x93:\xe0*\x9c\xb3\xb3r'
- Receive: 44 3823.541574 3823.541478 49: seq: 1c, identify_response offset=2040 data=b'\xac.\x839?k\x07\x8c\x96\x86!p\xdd\xb4{x@P\x9a$\xe0H\x82\xd4\x81\x02\x0f\x04\xac\xfa\xa0\xd0\x03\x81r\xf8\xa0\xc8\x03A'
- Receive: 45 3823.542036 3823.541942 49: seq: 1d, identify_response offset=2080 data=b'(\xee\x83b\x07JA\x07}P\xe2\x81\x82)\x1b\xa9\x07\x8a\xa6l\xac<P\xac\xd8\xf82\xf1\xc1ZU\xf2 \x8a"\xa5)\xb9L\x96'
- Receive: 46 3823.542489 3823.542399 49: seq: 1e, identify_response offset=2120 data=b'\xf1\xaaTZW\x0f\xe9:HU\xf9\x01\x1f\xc3T\xaa4}\xa8x\xb2\x0c\xc2[\xd0o=\x99\xd6Hx,\xf9\xdd\xd2h%\xb2AC'
- Receive: 47 3823.542957 3823.542851 49: seq: 1f, identify_response offset=2160 data=b'\x81\x1aBk\xf0\x06C5\x98\x04\xa1?\x18\xa9\xc1\x95\x91\x18\r\xc6j0X\x86\xb1?\x9a\xd0h\xb8\x9e,\x95\xd2\xa8=)\x1a]\xd1'
- Receive: 48 3823.543406 3823.543317 49: seq: 10, identify_response offset=2200 data=b'(\xf8X#\x02\xb8\x96\x04\xfa\xa8^4\x90\x95\x94\xda+0\xe5=\xb6\x94IP\xa1\xfd\xb2\xaa\x986~s\xf5KV\x8fr`\xfb\x1c'
- Receive: 49 3823.543861 3823.543764 49: seq: 11, identify_response offset=2240 data=b'.g\x88\xfb0c\xe0\xfe\xcdNW\xc3e\xa5\xda!\xcc\x14GJ\x8a[\xae\xf2\x865\xed\x007&\xfc\xb7[\x88\x0c\xeek"f\x8a'
- Receive: 50 3823.544309 3823.544217 49: seq: 12, identify_response offset=2280 data=b'\x98\xdd\xef\x05<\x93W\x93\xac\x03\xbf\x0c,R`\x04\xb4_\r\x18\x880)v0+\xac\x9e\x0fLH\x96\xeb\xb5(b\xa0\xa2\x8dF'
- Receive: 51 3823.544760 3823.544667 49: seq: 13, identify_response offset=2320 data=b'\x96\x88\x8a\x1e\x91JK4\xaa\xe20\x15\xed\xc2r\xbca\xa6\x9eg\xe9!\x92\xb8\xa2~\x18\xeb\xf2^\x02H%\xe1\xaajc\x00=\x87'
- Receive: 52 3823.545310 3823.545186 49: seq: 14, identify_response offset=2360 data=b'\x18P\x0e\xaa\xa7u\xd5\x8eUI\xfbRn\xff\xd5u\xb0~\t\x99\x12\xb2\x05\xc4X?\xc8K\xca<\xff\x12*\xfb\x1a\xbcu\t!\xa5'
- Receive: 53 3823.545799 3823.545709 49: seq: 15, identify_response offset=2400 data=b'\x18\xbe\xa1\x86\xda_$\xab\xc7\x81\x1f,\x1d\x9c\x9f\xc1\x9b\x9e,\x16x\x0c\x04\xae>\xd9\xf6\x10\x02\x96Z4\x1d-\xcd\xa80\x85\xc9\xd8'
- Receive: 54 3823.546251 3823.546161 49: seq: 16, identify_response offset=2440 data=b'k\xdc<\x83kw\xc0\xb2_\xdd\x02\x1bm#\xf4\xc5g\xf0"\x83\x07\x972yWF\xbb\xc6\x1e\x01A\xf0\x1dg\x98.M\xbd\x92\xef'
- Receive: 55 3823.546699 3823.546608 49: seq: 17, identify_response offset=2480 data=b'\xa8Pm"6\xd1\x94\xb0\x91*\xefwjw\xa05~\xed\x9a\x1a]\xdf\xb5}\xc1m\xb5\x98\xe9\x0e&\xf5\xb5\xde|x\xf7\x13C\x17'
- Receive: 56 3823.547151 3823.547059 49: seq: 18, identify_response offset=2520 data=b'\xc0@\xff\x05\xa0\xa1\xe8\xb6\x10\x96\x97\x94@\xbe\xfd\x15\xf3O\xec\xe6|\xab\xd5z""\x16\x9c\xc7\xd4\x8d|\x17^\xb1\x1f/\xaf\xbe\xa7'
- Receive: 57 3823.547645 3823.547533 49: seq: 19, identify_response offset=2560 data=b'L\x1a\xdf\xe0\xa2\xfbxc\xc6\x96\xfe\xd8\xc7\xd7\x97\xaf4\x00\xefo\x04\xdcP\xa8@\xa1\xc1;Jn\xbc\xfdc[\x8c\x89\xf2\x0c3\x06'
- Receive: 58 3823.548109 3823.548015 49: seq: 1a, identify_response offset=2600 data=b'}\xbe-\xe8\xbcj\xd0jiQ\x9a\xf5\x04\xa9\xb2F\xa4\x04\x9d\x19`C\xec\xabo\xbf\xa2\x94\xd5\x10\x99\xae\xa1k~R\x86B\xd1\xa4'
- Receive: 59 3823.548558 3823.548467 49: seq: 1b, identify_response offset=2640 data=b'\xc1r\xf2\xf3\xc7\x00\rm\x00l\x1c\x8e\x87\n\xd6\x06X\xb7\xe0\x01\xb4\x190l\xc3`\xa4\xe1\xc0\xb6ic\xdb4T0<\x82\xeb\xc2'
- Receive: 60 3823.549044 3823.548918 49: seq: 1c, identify_response offset=2680 data=b'\x8e]?\xf2X\x07\xcbe\xe4\xa6\xb1\x84lFM\xeb\xc6\x1e]O\xd1\x0e\xc5\x89s,\x03\xf2\xd6\xc6^\x87\t\x88\xc2\xd5d\\g\xca'
- Receive: 61 3823.549516 3823.549420 49: seq: 1d, identify_response offset=2720 data=b'Jwh\xe5\xd8\xe3g\x92\xe8\xfa8\xa0\x1c\xef\xf3\x03*\xd0\xda\xc8\x9b"\xef\xf7\\\xca\x1c4\x8a7\x05D\xd2\xc6\x91 @H\xc9a'
- Receive: 62 3823.549989 3823.549880 49: seq: 1e, identify_response offset=2760 data=b"\xc9b\xcf\xcb\xb1B\xbb\x00bL\xcf\x98\x0e\xe6\x94F\xf2;\x8e\x07\x85\x99\xd9\xe3\x04\xfb\xbc/\x95'\xd5\xd8\xd8/y\x1c\xdb\xc8E#"
- Receive: 63 3823.550439 3823.550348 49: seq: 1f, identify_response offset=2800 data=b'c\xb5\xf8=\x1e\xa5\xcai\x19<\xf5\xdb\xaa\xbd\xa74\xfa#\xd7\x13\xc0Th\xe8\xbd\xf2\x0c\xe0\xf5\xbb\x1c}\x1f\x16\x87\xaeU!P\xdb'
- Receive: 64 3823.550892 3823.550801 49: seq: 10, identify_response offset=2840 data=b'M\xcf\xf1+\x05\xf4\xf6\xd8i\xbb\xb6\xb4G[b\xf7\x02\xae\x16~(8@\xfd\xc6\x16\x85\xf2\x8er\xc2\xed\x13T\x98GxTF\x18'
- Receive: 65 3823.551334 3823.551244 49: seq: 11, identify_response offset=2880 data=b'OP`\xc2x\xcd\x07}\\jG\x88!\xea\xb16c\xc6Lp\x9b\xd6\xcf\xe0\xf7\x010\x99\xba:\x94G\xf6?\x15\xb8\xd6w\xc9\xd0'
- Receive: 66 3823.551782 3823.551687 49: seq: 12, identify_response offset=2920 data=b'\xb6l\x9b+q\x91\xa8\xb0Sp\xe3k\x8fv\xdd\xaa\xc9G\xa5\xea\x1b%`\xa4\x04\xcf*\xb9\n=n\xe0\r\xcc\xe2\x01\x8b\xea\xda\x97'
- Receive: 67 3823.552256 3823.552151 49: seq: 13, identify_response offset=2960 data=b'IjO[\x08*\xb3\x85`y\xe9S\x93\xdf\xe2\x85\xdaj\x1dW\xd2 \x0c\xaa\x1b9\x04P\x128s\x9c\x01B\xc1\xa1\xa2\x8e\x92\x03'
- Receive: 68 3823.552717 3823.552623 49: seq: 14, identify_response offset=3000 data=b'+g4\xf7\xa5\xd4\x9e\x9e!\xe5e\xe1\xc0\xd11X_g6\x980\xb8ip\x84\xebvJM\xe09\xd8\xe7\x08\x14\x9bS\x1do\x86'
- Receive: 69 3823.553411 3823.553296 49: seq: 15, identify_response offset=3040 data=b'\x85\x8av\x84\xb6:Bs\xb2\xa3\xca\x9b\x03c\x88p\xfd\xe1\x9d\xca\x7f\xa9\x94{\x0c\x93\x1dGUO\xd7s`\xd36\xe7\xb7x;*'
- Receive: 70 3823.553927 3823.553827 49: seq: 16, identify_response offset=3080 data=b"\xbb\x9b.\x83\x9f|8l\xed\xfc\x8cX\xb4\xafJ'\x87D\xdd\r\x9c\x1a\x13\xa1\xd4|_\x03\xf9\xce\xd8|\x06\x05\x82\x88\xa9\xa4\xcf/"
- Receive: 71 3823.554410 3823.554303 49: seq: 17, identify_response offset=3120 data=b'\xbcq\xe9\x00 \x1drj\xfa\xaeG\x9f\r\xf9\xa6d\x85d*\x1f\xc2\xcf^0\xf9B_\xa6\xc4?6r\xec0GEz\xacw9'
- Receive: 72 3823.554875 3823.554778 49: seq: 18, identify_response offset=3160 data=b'(9B\xaa\xd8\xd8Q\xdc\xdf\x94f\xd6\x99\x06!T\x10\xa0\xdd\x01KjW\x14wY\xc3\xd9`\x17\xed\xc0\xcb\xac\x1e\xab\x0b\xcf\x05a'
- Receive: 73 3823.555328 3823.555236 49: seq: 19, identify_response offset=3200 data=b'gr\xd63\xc0\x80\xcf2\x81\r\x02<\xa0\x8a\xcd\x98\x83q\xf5\xe9\x91\r\r\xf5\x07I%5+%\xf6\x84\xf0\xe6 \x9fV\x00Xq'
- Receive: 74 3823.555820 3823.555724 49: seq: 1a, identify_response offset=3240 data=b'\xed\x97y\x94mw=\xa8I\x0f\xee\r\x95W\x98HV\xd5\x03t\xbfU\xd5+\xd0fU\xb0B\x9d\xe8I\xdf\xc3\x07b\x8f\xe2D\xc6'
- Receive: 75 3823.556319 3823.556209 49: seq: 1b, identify_response offset=3280 data=b'\x8e+\xd1\xfd\x82\xadm\x1d\x87\x92?\xc6:\x05D\xecG\xed_\x0c\xd9!\xfd\x8e\x82u\x92\xa8\xd4E\xbf\xa4*w\xa1\x974Q.\t'
- Receive: 76 3823.556970 3823.556861 49: seq: 1c, identify_response offset=3320 data=b'^\xd2t\x05\xcf\xd1\x17\x95(\x17\xa0\x05@\xbf\xc0O\xc2\xde|\xf8\xe1.Z\xa8\xd2$\xc4}\x92K\x97\x1cg\xa2\x99V\xb9T\xe9\xf0'
- Receive: 77 3823.557471 3823.557370 49: seq: 1d, identify_response offset=3360 data=b'd\xf9\xd4\xfbjkB\x91{\xad\x08\xaa\x85Q5\xe7\x1c\xdb\xde*xt\xb5\x93\xf3\xc0\xf6\xc2\x19\xe6\xf2\xeaI\x95WT;\x15\xc7\x8c'
- Receive: 78 3823.557933 3823.557841 49: seq: 1e, identify_response offset=3400 data=b'\xbe\xa8\xd2\x15(If\xeb\xacH\xae>EQ-\x8e\xa7\xd8\xd6$\xfa!s\xeb\x07\x18\xa1\x99&\xb6\x04\x9fl{\xd2\xe7\xaa\xbdM\xcd'
- Receive: 79 3823.558402 3823.558296 49: seq: 1f, identify_response offset=3440 data=b'\x0f\x03{J$\x82|:\xcd\x1ay\r\xe4\t[\xfb\xb6\x06\xe7p<\x89\xdf\x9f\x86\xb5\xd7\xae\x15\x9b\x99C\xf2:\x02\xea]\x0b5v'
- Receive: 80 3823.558853 3823.558764 49: seq: 10, identify_response offset=3480 data=b"\xcdN\x0f\xd5v=\xa9\x98\xf6\x1cQ\xb1-\xea\xc4\xc9\xe6\xe9\xa0\x91\xe8\xcauG\x8f\xfa\x1d\x1e\xffF\xdb=YF'z\x9e\x13jX"
- Receive: 81 3823.559304 3823.559213 49: seq: 11, identify_response offset=3520 data=b'\x9e&0\xe5-\x7f"\xafj\x8d\x01\xaa\xed\x00Ne/\xc7\xa2P}`\xf5\x05\x19\xe4\xfc\xed\xe4\x9b\x84\xf3@\x15\xb3\xd1\xe1A\x86^'
- Receive: 82 3823.559760 3823.559670 49: seq: 12, identify_response offset=3560 data=b'}\x9e\x14\x16%F\xadM\xc1g-\xc4 \x8a\xa64\x93\x96\x8ak\x06\xe8\xa6\x87)\xdfQM\xdd\x9f\xf2v\xdcn9\x04\t\xd4_\x83'
- Receive: 83 3823.560235 3823.560131 49: seq: 13, identify_response offset=3600 data=b'$\x14|^f\xdc\x9a$\xf9\x06\xaa`\xed\xa2\n\xd3\x10|\xe40\xd2S\xd5\xe3#\x95\xf0\x9b.\x9en\x04\xa6\xf8\xfc(\xe1L\x97T'
- Receive: 84 3823.560708 3823.560610 49: seq: 14, identify_response offset=3640 data=b'\xe9\x16\xdc\x9bJ@\xce\x835\xd5\x0c\xa43\x1f9\xd6\xfaG\xfe\xae\xad$q\x15\xd8Yy\x96\xba\xb5X\x04\xdf\xcc\\\xd9_0\xa7\xd1'
- Receive: 85 3823.561205 3823.561108 49: seq: 15, identify_response offset=3680 data=b'\x98\x13\x16\x03U]T\x17m\x8f\xb7\x80\xe5Z\xc5~\xe8\xd7a\x9d\xd6\x15ysJ\xdf\x8e{\xeb0\x85\xaa\xad\xaa\x1a\x01}\xfc4N'
- Receive: 86 3823.561666 3823.561574 45: seq: 16, identify_response offset=3720 data=b'|\x15VT\xf5\xf7\xb8\xe0I\xef\x96\xcf\x83\xe8\xf9\xf2<^F\xe7\xbb\xdb\xb8X\x15\xdb8\x8f\x16_\xfe\x07\xc3$\x9c{'
- Receive: 87 3823.562131 3823.562028 9: seq: 17, identify_response offset=3756 data=b''
- Receive: 88 3823.640127 3823.639932 12: seq: 18, uptime high=41 clock=2981263710
- Receive: 89 3823.690946 3823.690808 11: seq: 19, clock clock=2983805038
- Receive: 90 3823.741874 3823.741722 11: seq: 1a, clock clock=2986351113
- Receive: 91 3823.793520 3823.793348 11: seq: 1b, clock clock=2988933615
- Receive: 92 3823.844358 3823.844237 11: seq: 1c, clock clock=2991475678
- Receive: 93 3823.895149 3823.895007 11: seq: 1d, clock clock=2994015053
- Receive: 94 3823.945857 3823.945749 11: seq: 1e, clock clock=2996550702
- Receive: 95 3823.996578 3823.996447 11: seq: 1f, clock clock=2999086676
- Receive: 96 3824.047577 3824.047432 11: seq: 10, clock clock=3001636420
- Receive: 97 3824.049238 3824.049048 10: seq: 11, config is_config=0 crc=0 is_shutdown=0 move_count=0
- Receive: 98 3824.049691 3824.049387 11: seq: 12, clock clock=3001742339
- Receive: 99 3824.053437 3824.053197 12: seq: 13, shutdown clock=3001926360 static_string_id=oids already allocated
- Reactor garbage collection: (3824.006691457, 0.0, 0.0)
- gcode state: absolute_coord=True absolute_extrude=True base_position=[0.0, 0.0, 0.0, 0.0] last_position=[0.0, 0.0, 0.0, 0.0] homing_position=[0.0, 0.0, 0.0, 0.0] speed_factor=0.016666666666666666 extrude_factor=1.0 speed=25.0
Advertisement
Add Comment
Please, Sign In to add comment