HowTo Setup and Flash Klipper on Anet ET4/Pro/X
Tools needed
- RaspberryPi
- ST-Link V2
Raspberry Setup
- for the ease of sake, get the MainSailOS Raspberry Pi image
- Flash it to the SD, for example with the Raspberry Pi Imager
- boot raspberry
- connect to http:*mainsail.local or the http:*ip address of your pi and access the mainsail website
- update everything
printer config
- in machine -> config files add printer.cfg and open it
- paste: *
bash
# This file contains common pin mappings for the Anet ET4 printer for klipper.
[stepper_x]
step_pin: PB6
dir_pin: !PB5
enable_pin: !PB7
rotation_distance: 40
microsteps: 16
endstop_pin: ^!PC13
position_min: -3
position_endstop: -3
position_max: 220
homing_speed: 50
[stepper_y]
step_pin: PB3
dir_pin: PD6
enable_pin: !PB4
rotation_distance: 40
microsteps: 16
endstop_pin: ^!PE12
position_min: -8
position_endstop: -8
position_max: 220
homing_speed: 50
[stepper_z]
step_pin: PA12
dir_pin: !PA11
enable_pin: !PA15
rotation_distance: 8
microsteps: 16
endstop_pin: ^!PE11
position_endstop: 250
position_max: 250
homing_speed: 12
second_homing_speed: 5
[extruder]
step_pin: PB9
dir_pin: PB8
enable_pin: !PE0
full_steps_per_rotation: 200
gear_ratio: 3:1
rotation_distance: 23.132
microsteps: 16
nozzle_diameter: 0.400
filament_diameter: 1.750
heater_pin: PA0 # END_CONTROL
sensor_pin: PA1 # TEMP_EXB1
sensor_type: EPCOS 100K B57560G104F
control: pid
pid_Kp: 20.375
pid_Ki: 0.844
pid_Kd: 123.016
min_temp: 0
max_temp: 250
[heater_bed]
heater_pin: PE2 # BED_CONTROL
sensor_pin: PA4 # TEMP_BED
sensor_type: EPCOS 100K B57560G104F
control: pid
pid_Kp: 70.721
pid_Ki: 1.981
pid_Kd: 631.118
min_temp: 0
max_temp: 125
[fan]
pin: PE3 # LAY_FAN
[heater_fan fan1]
pin: PE1 # END_FAN
[mcu]
baud: 115200
serial: /dev/serial/by-id/usb-1a86_USB2.0-Serial-if00-port0
restart_method: command
[printer]
kinematics: cartesian
max_velocity: 500
max_accel: 3000
max_z_velocity: 12
max_z_accel: 50
[pause_resume]
[filament_switch_sensor filament_sensor]
switch_pin: PA2 # MAT_DET
pause_on_runout: True
# The printer ships without a probe, but the wiring loom is
# already prepared for one
[probe]
pin: !PC3 # LV_DET
z_offset: 0.2
########################################
# EXP1 / EXP2 (display) pins
########################################
[board_pins]
aliases:
# P1 header
P1_1=PD7, P1_3=PB2, P1_5=PE4, P1_7=PB1, P1_9=<GND>,
P1_2=PD5, P1_4=PE5, P1_6=PB0, P1_8=PD4, P1_10=<3V3>,
# P2 header
P2_1= PE6, P2_3=PD15, P2_5=PD1, P2_7=PE8, P2_9=PE10,
P2_2=PD13, P2_4=PD14, P2_6=PD0, P2_8=PE7, P2_10=PE9
[virtual_sdcard]
path: /home/pi/gcode_files
[pause_resume]
[display_status]
[screws_tilt_adjust]
screw1: 10, 10
screw1_name: front left screw
screw2: 10, 210
screw2_name: rear left screw
screw3: 210, 210
screw3_name: rear right screw
screw4: 210, 10
screw4_name: front right screw
horizontal_move_z: 10.
speed: 50.
screw_thread: CW-M3
[gcode_macro CANCEL_PRINT]
rename_existing: BASE_CANCEL_PRINT
gcode:
TURN_OFF_HEATERS
CLEAR_PAUSE
SDCARD_RESET_FILE
BASE_CANCEL_PRINT
[gcode_macro PAUSE]
rename_existing: BASE_PAUSE
# change this if you need more or less extrusion
variable_extrude: 1.0
gcode:
##### read E from pause macro #####
{% set E = printer["gcode_macro PAUSE"].extrude|float %}
##### set park positon for x and y #####
# default is your max posion from your printer.cfg
{% set x_park = printer.toolhead.axis_maximum.x|float - 5.0 %}
{% set y_park = printer.toolhead.axis_maximum.y|float - 5.0 %}
##### calculate save lift position #####
{% set max_z = printer.toolhead.axis_maximum.z|float %}
{% set act_z = printer.toolhead.position.z|float %}
{% if act_z < (max_z - 2.0) %}
{% set z_safe = 2.0 %}
{% else %}
{% set z_safe = max_z - act_z %}
{% endif %}
##### end of definitions #####
SAVE_GCODE_STATE NAME=PAUSE_state
BASE_PAUSE
G91
G1 E-{E} F2100
G1 Z{z_safe} F900
G90
G1 X{x_park} Y{y_park} F6000
[gcode_macro RESUME]
rename_existing: BASE_RESUME
gcode:
##### read E from pause macro #####
{% set E = printer["gcode_macro PAUSE"].extrude|float %}
##### end of definitions #####
G91
G1 E{E} F2100
RESTORE_GCODE_STATE NAME=PAUSE_state
BASE_RESUME(based on PHeNNeT FiLM)
- save & close
building the firmware
- note: i wasnt able to make this with openblt work, but i will update if i find a way
- ssh into raspberry (use MobaXterm, it has an inbuild sftp client to pull the firmware)
cd klipper
make menuconfig- choose settings:
[*] Enable extra low-level configuration options
Micro-controller Architecture (STMicroelectronics STM32)
Processor model (STM32F407)
Bootloader offset (No bootloader) --->
Clock Reference (8 MHz crystal) --->
Communication interface (Serial (on USART1 PA10/PA9)) --->
(112500) Baud rate for serial port
() GPIO pins to set at micro-controller startup- type Q to exit, verify with Y
make- after its finished copy firmware.bin from /home/pi/klipper/out/ to your pc (via MobaXterm, Filezilla(port 22) or WinSCP)
Flashing the Firmware
- attach your ST-Link to the printer
- run STM32 ST-Link Utility
- Target -> Connect
- backup your bootloader if you are coming from stock
- select adress 0x08000000
- left click Device Memory @ 0x08000000 -> Save to file -> original_bootloader.bin
- Target -> Program
- Start Adress: 0x08000000
- Filepath: your klipper.bin
- Start
- if you have problems connecting ST-Link after the successful flash, lower your Connection Frequency in Target -> Settings
- Thats it. Restart your printer and click firmware restart in mainsail