Skip to content

Instantly share code, notes, and snippets.

@JoelLarson
Created January 25, 2026 17:58
Show Gist options
  • Select an option

  • Save JoelLarson/0e9159a49918282885f4d4246b00ebe4 to your computer and use it in GitHub Desktop.

Select an option

Save JoelLarson/0e9159a49918282885f4d4246b00ebe4 to your computer and use it in GitHub Desktop.
Ender 3 V2 Personal Klipper Printer Config
# This file contains pin mappings for the modified 2020 Creality Ender 3
# V2. To use this config, during "make menuconfig" select the
# STM32F103 with a "28KiB bootloader" and serial (on USART1 PA10/PA9)
# communication.
# If you prefer a direct serial connection, in "make menuconfig"
# select "Enable extra low-level configuration options" and select
# serial (on USART3 PB11/PB10), which is broken out on the 10 pin IDC
# cable used for the LCD module as follows:
# 3: Tx, 4: Rx, 9: GND, 10: VCC
# Flash this firmware by copying "out/klipper.bin" to a SD card and
# turning on the printer with the card inserted. The firmware
# filename must end in ".bin" and must not match the last filename
# that was flashed.
# See docs/Config_Reference.md for a description of parameters.
[stepper_x]
step_pin: PC2
dir_pin: PB9
enable_pin: !PC3
microsteps: 16
rotation_distance: 40
endstop_pin: ^PA5
position_endstop: 0
position_max: 250
homing_speed: 100
[stepper_y]
step_pin: PB8
dir_pin: PB7
enable_pin: !PC3
microsteps: 16
rotation_distance: 40
endstop_pin: ^PA6
position_endstop: 0
position_max: 235
homing_speed: 50
[stepper_z]
step_pin: PB6
dir_pin: !PB5
enable_pin: !PC3
microsteps: 16
rotation_distance: 8
endstop_pin: probe:z_virtual_endstop
position_max: 250
position_min: -3
[extruder]
max_extrude_only_distance: 100.0
step_pin: PB4
dir_pin: PB3
enable_pin: !PC3
microsteps: 16
rotation_distance: 34.406
nozzle_diameter: 0.400
filament_diameter: 1.750
heater_pin: PA1
sensor_type: EPCOS 100K B57560G104F
sensor_pin: PC5
control: pid
# tuned for stock hardware with 200 degree Celsius target
pid_Kp: 21.527
pid_Ki: 1.063
pid_Kd: 108.982
min_temp: 0
max_temp: 250
[heater_bed]
heater_pin: PA2
sensor_type: EPCOS 100K B57560G104F
sensor_pin: PC4
control: pid
# tuned for stock hardware with 50 degree Celsius target
pid_Kp: 54.027
pid_Ki: 0.770
pid_Kd: 948.182
min_temp: 0
max_temp: 130
[bltouch]
sensor_pin: ^PB1
control_pin: PB0
pin_move_time: 0.680
pin_up_reports_not_triggered: True
pin_up_touch_mode_reports_triggered: True
probe_with_touch_mode: True
stow_on_each_sample: False
x_offset: 0
y_offset: 0
z_offset: 0
[safe_z_home]
home_xy_position: 117, 117
speed: 50
z_hop: 10
z_hop_speed: 5
[bed_screws]
screw1: 35,195
screw1_name: rear left screw
screw2: 35,35
screw2_name: front left screw
screw3: 195,35
screw3_name: front right screw
screw4: 195,195
screw4_name: rear right screw
[gcode_macro BED_SCREWS]
variable_rear_left: 75.50, 207.00
variable_front_left: 75.50, 34.00
variable_front_right: 245.50, 34.00
variable_rear_right: 245.50, 207.00
gcode:
# Intentionally empty - Used to keep macro variables close
[screws_tilt_adjust]
screw1: 75.50, 207.00
screw1_name: rear left screw
screw2: 75.50, 34.00
screw2_name: front left screw
screw3: 245.50, 34.00
screw3_name: front right screw
screw4: 245.50, 207.00
screw4_name: rear right screw
speed: 50
horizontal_move_z: 10
screw_thread: CW-M4
[fan]
pin: PA0
[mcu]
serial: /dev/serial/by-id/usb-1a86_USB_Serial-if00-port0
restart_method: command
[temperature_sensor raspberry_pi]
sensor_type: temperature_host
min_temp: 10
max_temp: 90
[temperature_sensor mcu_temp]
sensor_type: temperature_mcu
min_temp: 0
max_temp: 100
[printer]
kinematics: cartesian
max_velocity: 300
max_accel: 3000
max_z_velocity: 5
max_z_accel: 150
[virtual_sdcard]
path: /var/lib/klipper/gcodes
[respond]
default_type: command
[pause_resume]
[display_status]
[gcode_macro PAUSE]
description: Pause the current print
rename_existing: PAUSE_BASE
gcode:
PAUSE_BASE
[gcode_macro RESUME]
description: Resume the current print
rename_existing: RESUME_BASE
gcode:
RESUME_BASE
[gcode_macro CANCEL_PRINT]
description: Cancel the current print
rename_existing: CANCEL_PRINT_BASE
gcode:
CANCEL_PRINT_BASE
[gcode_macro PROBE_AT]
gcode:
{% set x = params.X|float %}
{% set y = params.Y|float %}
G1 X{x} Y{y} Z10 F6000
PROBE
[gcode_macro PROBE_SCREW]
description: Probe at a named screw position. Usage: PROBE_SCREW NAME=rear_left [ZHOP=10] [F=6000] [MODE=PROBE]
gcode:
{% if printer.toolhead.homed_axes != "xyz" %}
{action_raise_error("Home first (G28) before PROBE_SCREW")}
{% endif %}
{% set name = params.NAME|default("")|lower %}
{% set zhop = params.ZHOP|default(10)|float %}
{% set f = params.F|default(6000)|int %}
{% set mode = params.MODE|default("probe")|lower %}
{% if name not in ["front_left", "front_right", "rear_left", "rear_right"] %}
{action_raise_error("Invalid NAME. Use one of: front_left, front_right, rear_left, rear_right")}
{% endif %}
{% if mode not in ["probe", "accuracy"] %}
{action_raise_error("Invalid MODE. Use: probe or accuracy")}
{% endif %}
{% set coord = printer["gcode_macro BED_SCREWS"][name] %}
{% set x = coord[0]|float %}
{% set y = coord[1]|float %}
G1 X{x} Y{y} Z{zhop} F{f}
{% if mode == "probe" %}
PROBE
{% else %}
PROBE_ACCURACY SAMPLES=10
{% endif %}
G91
G1 Z15 F600
G90
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment