Creality CR-10 Smart Klipper Firmware with internal Creality Box

It worked with the printer I reviewed here:

If Creality did another cool switcheroo for the board, it probably won’t work

Great review! Yup, at some point this year Creality changed the mainboard in the Smart, and started putting in the same one as the Smart Pro.

So you can load Smart Pro firmware on the currently sold Smarts, but the configs won’t work as there are differences in pinouts and probably a lot different in the daughter board on the gantry.

Anyone buying a Smart with the newer board (CR-FDM-v2.4.s1) has basically no non-stock firmware options at this point, until we have a working config for the steppers and sensors.

That’s my conclusion about the general situation anyway, after getting frustrated with how basic the Smart stock fw is, getting excited about your work with Klipper, and then back to square one because they did a board swap. :frowning:

…although, I’m still hoping someone will chime up here, telling us they have klipper fw running on the new boards! There are some hints about this in this thread, but nothing concrete, and no confirmations or denials so far…if anyone got klipper going on Smart with CR-FDM-v2.4.s1, please speak up!

1 Like

I am working on this now…
This seems to be a very helpful lead at klipper issue pr 5621 which is focused on the Sermoon v1

Note the images of the board show an STM32F401…

1 Like

nevermind… my board is CR-FDM-v2.5.S1_100 and is indeed a STM32F103

1 Like

Despite trying to compile my own klipper.bin file multiple times, the power would not stay running…
I tried enable pin PA0/!PA0 etc with no luck
I found a google drive link which I cant post here with a working klipper bin file for CR10 Smart Pro for the sonic pad…
I will try to circle back to compiling after/if I get the rest of it working…

Hello. Can someone who has new cr10 smart board post the picture of cables connected to motherboard especialy where is z optical switch connected. My old board crc 2405v1.2 is not working so i want to put new board like in smart pro

Thanks

Hello, the Z optical pin is the PB2, but I can work in Marlin, comment if you can get it to work in Klipper.

Hello, So i have the onboard creality box flashed and the printer.cfg loaded, but I’m stuck as what I need to do next. I’m assuming I need to install fw to the printer itself, but not sure where to get it. Also do I need to change the wiring so klipper can see the printer?

guys try pin PC15 for probe
[probe]

pin: PC15

x_offset: 0.0

y_offset: 0.0

z_offset: 0

speed: 3

lift_speed: 5

samples_tolerance: 0.05

samples_tolerance_retries: 2

samples: 1

# !CR-10 Smart
# printer_size: 300x300x400
# version: 3.6
# This file contains pin mappings for the Creality CR-10 Smart
# with a CR-FDM-v2.5.S1 board.

# To use this config, during "make menuconfig" select the STM32F103
# with a "64KiB bootloader" and serial (on USART1 PA10/PA9)

# Flash this firmware on the MCU by copying "out/klipper.bin" to an SD
# card and turning the printer on with the card inserted. The firmware
# filename must end in ".bin" and must not match the last filename
# that was flashed.

# The machine itself includes a small router that can run a Klipper
# frontend. You don't need to buy a single-board computer.

# See docs/Config_Reference.md for a description of parameters.

###fluidd set
[include cx_printer.cfg]


[display_status]

[pause_resume]

[gcode_macro RUN_ABL]
gcode:
	M190 S60
	G28
	M104 S0		#switch off heater as it was switched on after homing
	BED_MESH_CALIBRATE
	SAVE_CONFIG
	M140 S0
	M104 S0

[gcode_macro START_PRINT]
# put the following in the Cura start code and remove everything else:
# start_print HOTEND_TEMP={material_print_temperature_layer_0} BED_TEMP={material_bed_temperature_layer_0}
gcode:
	{% set toolTemp = params.HOTEND_TEMP|int %}
	{% set bedTemp = params.BED_TEMP|int %}
	SET_GCODE_OFFSET Z=0
	{% if toolTemp >= 221 %}
		SET_GCODE_OFFSET Z=0.03
	{% endif %}
	SET_HEATER_TEMPERATURE HEATER=heater_bed TARGET={bedTemp}
	SET_HEATER_TEMPERATURE HEATER=extruder TARGET=150
	M82 								# absolute extrusion mode
	M220 S100 							# Reset Feedrate
	M221 S100 							# Reset Flowrate
	SET_VELOCITY_LIMIT VELOCITY=200 ACCEL=1000 ACCEL_TO_DECEL=500 SQUARE_CORNER_VELOCITY=5

	#home all axis and leave printhead in center of the bed for quick Z homing once the bed is 15 degrees below its target
	G28
	SET_HEATER_TEMPERATURE HEATER=extruder TARGET=150
	TEMPERATURE_WAIT SENSOR=heater_bed MINIMUM={bedTemp -15}	# wait for bed to be over 50
	TEMPERATURE_WAIT SENSOR=extruder MINIMUM=140
	SET_HEATER_TEMPERATURE HEATER=extruder TARGET=0
	G28	Z							# home all axes
	SET_HEATER_TEMPERATURE HEATER=extruder TARGET={toolTemp -70}

	#move to the side, wait untill the bed is within 10 deg from target heat the hotend
	G90
	G0 Z20
	G0 X0 Y0
	TEMPERATURE_WAIT SENSOR=heater_bed MINIMUM={bedTemp - 10}
	SET_HEATER_TEMPERATURE HEATER=extruder TARGET={toolTemp}
	TEMPERATURE_WAIT SENSOR=extruder MINIMUM={toolTemp - 1}	#start printing 1 deg before reaching setpoint

	# And we can now draw our purge line
	G92 E0 								#Reset Extruder
	G1 Z2.0 F3000 						#Move Z Axis up
	G1 X0 Y20 Z0.28						#Move to start position
	G1 X0 Y200.0 Z0.28 E15   			#Draw the first line
	G1 X0 Y200.0 Z0.28 					#Move to side a little
	G1 X0.5 Y20 Z0.28 E30 				#Draw the second line
	G92 E0 								#Reset Extruder
	G1 Z2.0 F3000 						#Move Z Axis up

[gcode_macro END_PRINT]
# Put the following in the Cura end code and remove everything else:
# end_print
gcode:
	M106 S255 ;full fan
	G91 ;Relative positioning
	G1 E-0.5 F2700 ;Retract a bit
	G1 E-0.5 Z0.2 F2400 ;Retract and raise Z
	G1 X5 Y5 F5000 ;Wipe out
	G1 Z10 ;Raise Z more
	G90 ;Absolute positioning
	G1 X0 Y225 ;Present print
	TURN_OFF_HEATERS
	G91 ;Relative positioning
	G4 S30
	G1 E-0.5 F2700 ; retract a bit more after cooling for 30 seconds about 20 degrees
	G4 S30
	G1 E-0.5 F2700 ; retract a bit more after cooling for 30 seconds about 20 degrees
	G90 ;Absolute positioning
	M84 X Y E ;Disable all steppers but Z
	M82 ;absolute extrusion mode
	TEMPERATURE_WAIT SENSOR=heater_bed MAXIMUM=50
	TEMPERATURE_WAIT SENSOR=extruder MAXIMUM=50
	M106 S0 ;Turn-off fan
# 	POWER_OFF_PRINTER
[gcode_macro CANCEL_PRINT]
description: Cancel the actual running print
rename_existing: CANCEL_PRINT_BASE
gcode:
  TURN_OFF_HEATERS
  CANCEL_PRINT_BASE

# [gcode_macro POWER_OFF_PRINTER]
# gcode:
# 	{action_call_remote_method("set_device_power", device="printer", state="off")}

[gcode_macro TIMELAPSE_TAKE_FRAME]
gcode:
	{action_call_remote_method("timelapse_newframe")}

[gcode_macro TIMELAPSE_RENDER]
gcode:
	{action_call_remote_method("timelapse_render")}

[gcode_macro LOAD_FILAMENT]
gcode:
	{% set act_z = printer.toolhead.position.z|float %}
    {% if act_z < 30.0 %}
		G0 Z30
    {% endif %}
    M83                            ; set extruder to relative
    G1 E45 F1000                  ; quickly load filament set for direct drive, for bowden set to E280
    G1 E30 F300                    ; slower extrusion for hotend path
    G1 E50 F150                    ; prime nozzle with filament
	#TURN_OFF_HEATERS
	G1 E-0.5 F500						; retract a bit
	#G1 E-1 F5						; retract a bit
    M82                            ; set extruder to absolute

[gcode_macro UNLOAD_FILAMENT]
gcode:
	{% set act_z = printer.toolhead.position.z|float %}
    {% if act_z < 30.0 %}
		G0 Z30
    {% endif %}
    M83                            ; set extruder to relative
    G1 E5 F300                    ; extrude a little to soften tip
    G1 E-100 F1000                 ; retract filament completely, set to E380 for Bowden
    M82                            ; set extruder to absolute

[gcode_macro Hotend_Cleaning]
gcode:
    M83                            ; set extruder to relative
    G1 E45 F1000                  ; quickly load filament set for direct drive, for bowden set to E280
    G1 E30 F300                    ; slower extrusion for hotend path
    G1 E50 F150                    ; prime nozzle with filament
    G1 E-100 F1000                 ; retract filament completely, set to E380 for Bowden
    M82                            ; set extruder to absolute

[gcode_macro M204]
rename_existing: M204.1
gcode:
	{% if params.S is defined %}
		{% set s = params.S|float %}
		SET_VELOCITY_LIMIT ACCEL={s} ACCEL_TO_DECEL={s/2}
	{% endif %}

[gcode_macro M900]
gcode:
	{% if params.K is defined %}
		{% set K = params.K|float %}
		SET_PRESSURE_ADVANCE ADVANCE={K}
	{% endif %}

[stepper_x]
step_pin: PB8
dir_pin: !PB7
enable_pin: !PC3
rotation_distance: 40
microsteps: 16
endstop_pin: PC4
position_min: -5
position_endstop: -5
position_max: 305
homing_speed: 80

[stepper_y]
step_pin: PB6
dir_pin: PB5
enable_pin: !PC3
rotation_distance: 40
microsteps: 16
endstop_pin: PC5
position_min: -2
position_endstop: -2
position_max: 302
homing_speed: 80

[stepper_z]
step_pin: PB4
dir_pin: !PB3
enable_pin: !PC3
rotation_distance: 8
microsteps: 16
endstop_pin: probe:z_virtual_endstop
position_min: -1.5
position_max: 405
homing_speed: 4
second_homing_speed: 1
homing_retract_dist: 2.0

[extruder]
# BMG extruder
gear_ratio: 51:17
rotation_distance: 23.132
max_extrude_only_distance: 1000.0
step_pin: PC2
dir_pin: !PB9
enable_pin: !PC3
#rotation_distance: 30.4768
microsteps: 16
nozzle_diameter: 0.400
filament_diameter: 1.750
heater_pin: PB14
sensor_type: EPCOS 100K B57560G104F
sensor_pin: PB1
control: pid
# tuned for stock hardware with 200 degree Celsius target
pid_Kp: 14.32
pid_Ki: 0.81
pid_Kd: 63.12
min_temp: 0
max_temp: 265

[heater_bed]
heater_pin: PB13
sensor_type: EPCOS 100K B57560G104F
sensor_pin: PB0
control: pid
# tuned for stock hardware with 50 degree Celsius target
pid_Kp: 79.49
pid_Ki: 1.17
pid_Kd: 1349.52
min_temp: 0
max_temp: 130

[idle_timeout]
timeout: 172800

[fan]
pin: PB15
kick_start_time: 0.5

[mcu]
serial: /dev/serial/by-id/usb_serial_1
restart_method: command

[temperature_sensor Board_MCU]
sensor_type: temperature_mcu
min_temp: 0
max_temp: 100

# Before printing the PROBE_CALIBRATE command needs to be issued
# to run the probe calibration procedure, described at
# docs/Probe_Calibrate.md, to find the correct z_offset.
[probe]
pin: PC15
x_offset: 0.0
y_offset: 0.0
#z_offset: 0
speed: 3
speed: 0.50
lift_speed: 3
samples: 5
samples_tolerance: 0.05
samples_tolerance_retries: 2
activate_gcode:
	TARE_PROBE


[gcode_macro TARE_PROBE]
gcode:

	SET_PIN PIN=probe_enable VALUE=0
	G4 P250
	SET_PIN PIN=probe_enable VALUE=1
	G4 P250
	{action_respond_info("Probe tared")}

[output_pin probe_enable]
pin: !PA1
value: 1

[safe_z_home]
home_xy_position:150,150
speed: 200
z_hop: 5
z_hop_speed: 3

############################
#        bed mesh
############################
# A 5x5 bed mesh was choosen to have a point in the center of the bed
# that uses the middle mesh point, which is also the safe z home, for reference
[bed_mesh]
speed: 150
mesh_min: 23.5,23.5
mesh_max: 275,275
probe_count: 5,5
algorithm: bicubic

[screws_tilt_adjust]
screw1: 30, 80
screw1_name: front left screw
screw2: 300, 80
screw2_name: front right screw
# The rear screws are actually mechanically not reachable for the
# probe, but that is ok, adjustments will still converge.
screw3: 300, 300
screw3_name: rear right screw
screw4: 30, 300
screw4_name: rear left screw
horizontal_move_z: 5.
speed: 50.
screw_thread: CW-M4
#Main light bar

[output_pin lights]
pin: PA7
value: 1

[output_pin power]
pin: PA0
value: 1
shutdown_value: 1

[printer]
kinematics: cartesian
max_velocity: 500
max_accel: 5000
square_corner_velocity: 5.0
max_z_velocity: 10
max_z_accel: 1000

# [mcu rpi]
# serial: /tmp/klipper_host_mcu

# [adxl345]
# cs_pin: rpi:None
# spi_speed: 2000000
# spi_bus: spidev2.0

# [resonance_tester]
# accel_chip: adxl345
# accel_per_hz: 70
# probe_points:
#     150,150,20

[input_shaper]
shaper_type_x = 2hump_ei
shaper_freq_x = 90.6
shaper_type_y = mzv
shaper_freq_y = 27.2

#[filament_switch_sensor filament_sensor]
#pause_on_runout: true
#switch_pin: ^!PA7

[static_digital_output daughterboard_communication]
pins: !PC14

[exclude_object]


[gcode_arcs]
#resolution: 1.0

[include timelapse.cfg]
[include cx_gmcro.cfg]

#*# <---------------------- SAVE_CONFIG ---------------------->
#*# DO NOT EDIT THIS BLOCK OR BELOW. The contents are auto-generated.
#*#
#*# [probe]
#*# z_offset = -0.310

ohhh and this works fully for cr-10 smart with the new board ? in your description it does say correct…

i found another cr-10smart printer.cfg. but some pins are diffrient, even tho it’s also for the newer board CR-FDM-v2.5.S100
can you confirm it works ? kinda worried about diffrient pins on both probes and heater

i’m posting the other cfg i found on reddit (credit to the guy who made it)

[stepper_x]
step_pin: PB8
dir_pin: !PB7
enable_pin: !PC3
rotation_distance: 40
microsteps: 16
endstop_pin: PC4
position_min: -5
position_endstop: -5
position_max: 300
homing_speed: 50

[stepper_y]
step_pin: PB6
dir_pin: PB5
enable_pin: !PC3
rotation_distance: 40
microsteps: 16
endstop_pin: PC5
position_min: -2
position_endstop: -2
position_max: 300
homing_speed: 50

[stepper_z]
step_pin: PB4
dir_pin: !PB3
enable_pin: !PC3
rotation_distance: 8
microsteps: 16
endstop_pin: probe:z_virtual_endstop
position_min: -1.5
position_max: 400
homing_speed: 4
second_homing_speed: 1
homing_retract_dist: 2.0

[extruder]
max_extrude_only_distance: 1000.0
step_pin: PC2
dir_pin: !PB9
enable_pin: !PC3
rotation_distance: 30.4768
microsteps: 16
nozzle_diameter: 0.400
filament_diameter: 1.750
heater_pin: PB14
sensor_type: EPCOS 100K B57560G104F
sensor_pin: PB1
control: pid
#tuned for stock hardware with 200 degree Celsius target
pid_Kp: 14.32
pid_Ki: 0.81
pid_Kd: 63.12
min_temp: 0
max_temp: 275
pressure_advance: 0.78

[heater_bed]
heater_pin: PB13
sensor_type: EPCOS 100K B57560G104F
sensor_pin: PB0
control: pid
#tuned for stock hardware with 50 degree Celsius target
pid_Kp: 79.49
pid_Ki: 1.17
pid_Kd: 1349.52
min_temp: 0
max_temp: 120

[fan]
pin: PB15
kick_start_time: 0.5

[mcu]
serial: /dev/ttyPrinter
#serial:/dev/serial/by-id/usb-1a86_USB_Serial-if00-port0
restart_method: command

#Before printing the PROBE_CALIBRATE command needs to be issued
#to run the probe calibration procedure, described at
#docs/Probe_Calibrate.md, to find the correct z_offset.
[probe]
#pin: PA4
pin: PC15
x_offset: 0.0
y_offset: 0.0
z_offset: 0.0
speed: 0.50
lift_speed: 5
samples: 3
samples_tolerance: 0.05
samples_tolerance_retries: 2
activate_gcode:
TARE_PROBE

[gcode_macro TARE_PROBE]
gcode:

SET_PIN PIN=probe_enable VALUE=0
G4 P250
SET_PIN PIN=probe_enable VALUE=1
G4 P250
{action_respond_info(“Probe tared”)}

[output_pin probe_enable]
pin: PC14

[gcode_button tare]
pin: PB2
press_gcode: TARE_PROBE

[safe_z_home]
home_xy_position: 150,150 # Change coordinates to the center of your print bed
speed: 50
z_hop: 3 # Move up 2mm
z_hop_speed: 5

[bed_mesh]
speed: 120
horizontal_move_z: 3
mesh_min: 10,10
mesh_max: 290, 290
probe_count: 6,6

#[input_shaper]
#shaper_freq_x: 91.3
#shaper_type_x: ei
#shaper_freq_y: 42.6
#shaper_type_y: ei

#[filament_switch_sensor filament_sensor]
#pause_on_runout: true
#switch_pin: ^!PA7

[output_pin LED_pin]
pin: PC13
value: 1

[output_pin ps_on]
pin: PA0
value: 1
shutdown_value: 1

[printer]
kinematics: cartesian
max_velocity: 500
max_accel: 5000
max_accel_to_decel: 3000
max_z_velocity: 5
max_z_accel: 100

###Fluidd config###
#[include client.cfg]
#[include client_macros.cfg]

[include mainsail.cfg]
####Macros####
[gcode_macro CANCEL_PRINT]
description: Cancel the actual running print
#rename_existing: CANCEL_PRINT_BASE
gcode:
TURN_OFF_HEATERS
CANCEL_PRINT_BASE

[force_move]
enable_force_move: True