En­der 3 Pro

9:33PMOctober 20 2025Daniel Tompkins

Archive KB 3d-printing

The Cre­ality Ender 3 Pro is a pop­ular and af­ford­able FDM (fused de­po­si­tion mod­eling, also called fused fil­a­ment fab­ri­ca­tion, or FFF) 3D printer that has gained a strong fol­lowing among hob­by­ists and makers. Known for its re­li­a­bility, ease of use, and up­grade-ability, the Ender 3 Pro is a great choice for both be­gin­ners and ex­pe­ri­enced users.

My best man gifted my wife and me (mostly me) an Ender 3 Pro for our wed­ding. So far, most of the printing I've done has only served to im­prove the printer... I've made sev­eral up­grades and mod­i­fi­ca­tions to en­hance its per­for­mance and us­ability.

Up­grades

Ex­truder

One thing al­most every Ender owner will end up doing is re­placing the stock, plastic ex­truder mech­a­nism with a more ro­bust alu­minum model (such as this ). A de­sign flaw with the orig­inal often leads to the plastic snap­ping with some con­tin­uous usage— causing under-ex­tru­sion or pre­venting fil­a­ment from trav­eling through the Bowden tube al­to­gether.

Screenshot showing an example of the aluminum version of the Ender 3 extruder that often fails.

This was one of the first up­grades I made to the printer, and it sig­nif­i­cantly im­proved print re­li­a­bility.

Print­able Up­grades

There are many print­able up­grades avail­able for the Ender 3 Pro that can en­hance its per­for­mance and us­ability. Some of the ad­di­tions I've found par­tic­u­larly useful:

  • Cable Chains
    Cable chains help manage and pro­tect the print­er's wiring— re­ducing wear and tear, and keeping wires or­ga­nized during op­er­a­tion.

  • Fil­a­ment Guides
    A fil­a­ment guide helps en­sure smooth feeding of the fil­a­ment into the ex­truder, re­ducing the risk of jams and tan­gles.

  • Spool Holder
    An up­graded spool holder with smooth bear­ings can ac­com­mo­date larger spools and pro­vide better sup­port, re­ducing strain on the fil­a­ment during printing.

  • Camera Mount
    A camera mount al­lows for easy in­stal­la­tion of a we­bcam or Rasp­berry Pi camera module, en­abling re­mote mon­i­toring and time-lapse recording of prints.

Con­trol Soft­ware

Klipper Firmware

One of the most sig­nif­i­cant up­grades I've made to my Ender 3 Pro is in­stalling Klipper firmware . Klipper is an open-source firmware that runs on a host com­puter (like a Rasp­berry Pi) and com­mu­ni­cates with the print­er's mi­cro­con­troller (MCU).

This of­fers sev­eral ad­van­tages over tra­di­tional firmware, in­cluding:

  • Im­proved print quality and speed
  • Ad­vanced fea­tures like pres­sure ad­vance and input shaping
  • Easier con­fig­u­ra­tion and up­dates via a web in­ter­face
  • Sup­port for mul­tiple MCUs and com­plex printer se­tups

To in­stall Klipper, I fol­lowed the of­fi­cial in­stal­la­tion guide . I used the printer.cfg spe­cific to my model after opening the con­troller en­clo­sure and in­specting the MCU on the print­er's main­board. My model uses the STM32F103 chip with a v4.2.2 con­troller.

You'll need to format a mi­croSD card with the Klipper firmware bi­nary and in­sert it into the print­er's main­board. When you power on the printer, it will flash the new firmware au­to­mat­i­cally. You can then re­move the mi­croSD card and finish the host soft­ware setup on your Rasp­berry Pi.

Reducing default limits

On my first homing after flashing the Klipper firmware, the ho­tend gantry was over­run­ning the avail­able track and causing the belt to skip and grind as it tried to push be­yond the avail­able space. To pre­vent this, I needed to up­date the de­fault printer.cfg from Moon­sail to pro­vide a lower (-1cm) limit for X, Y, and Z travel. Here's the diff:

diff
# This file contains pin mappings for the stock 2020 Creality Ender 3 # Pro with the 32-bit Creality 4.2.2 board. To use this config, during # "make menuconfig" select the STM32F103 with a "28KiB bootloader" and # serial (on USART1 PA10/PA9) communication. # It should be noted that newer variations of this printer shipping in # 2022 may have GD32F103 chips installed and not STM32F103. You may # have to inspect the mainboard to ascertain which one you have. If it # is the GD32F103 then please select Disable SWD at startup in the # "make menuconfig" along with the same settings for STM32F103. # 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: 235 + position_max: 225 homing_speed: 50 [stepper_y] step_pin: PB8 dir_pin: PB7 enable_pin: !PC3 microsteps: 16 rotation_distance: 40 endstop_pin: ^PA6 position_endstop: 0 - position_max: 225 + position_max: 225 homing_speed: 50 [stepper_z] step_pin: PB6 dir_pin: !PB5 enable_pin: !PC3 microsteps: 16 rotation_distance: 8 endstop_pin: ^PA7 position_endstop: 0.0 - position_max: 250 + position_max: 240 [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 [fan] pin: PA0 [include mainsail.cfg] [mcu] serial: /dev/serial/by-id/usb-1a86_USB_Serial-if00-port0 restart_method: command [printer] kinematics: cartesian max_velocity: 300 max_accel: 3000 max_z_velocity: 5 max_z_accel: 100 # Pin mappings for BL_T port #[bltouch] #sensor_pin: ^PB1 #control_pin: PB0 [display] lcd_type: st7920 cs_pin: PB12 sclk_pin: PB13 sid_pin: PB15 encoder_pins: ^PB14, ^PB10 click_pin: ^!PB2

Main­sail

I'm using Main­sail as the Klipper web in­ter­face for man­aging the printer. It's vir­tu­ally the same as Fluidd — an­other pop­ular Klipper web in­ter­face.

Main­sail pro­vides a very light­weight web in­ter­face for Klipper that makes printer con­trol and mon­i­toring simple and straight­for­ward. It's also mo­bile-re­spon­sive, so I can check prints and ma­nip­u­late the printer from my smart­phone. It of­fers fea­tures like:

  • Real-time tem­per­a­ture mon­i­toring
  • Motor con­trol
  • Print job man­age­ment
  • G-code viewer
  • System status and logs
  • Camera in­te­gra­tion with the Crowsnest plugin

Oc­to­Print

Oc­to­Print is an­other pop­ular web in­ter­face for 3D printers, and it's what I used be­fore flashing the Klipper firmware. Main­sail is specif­i­cally de­signed for Klipper and of­fers a more stream­lined ex­pe­ri­ence. How­ever, Oc­to­Print will also work with Klipper, and it pro­vides sim­ilar func­tion­ality to Main­sail.

Oc­toPi

One of my fa­vorite ways to run Oc­to­Print is using Oc­toPi , a pre-con­fig­ured Rasp­berry Pi image that in­cludes Oc­to­Print and all nec­es­sary de­pen­den­cies. This makes it easy to set up a ded­i­cated print server for the Ender 3 Pro— let­ting you manage prints re­motely and mon­itor the printer in the browser over Wi-Fi.

Tips and Tricks

Here are a few tips and tricks I've learned while using the Ender 3 Pro:

  • Bed Lev­eling
    Reg­u­larly check and ad­just the bed lev­eling to en­sure op­timal print ad­he­sion and quality. I use a piece of paper to gauge the dis­tance be­tween the nozzle and the bed at var­ious points. The paper should just barely slide with slight re­sis­tance.

  • Nozzle Cleaning
    Keep the nozzle clean to pre­vent clogs and en­sure con­sis­tent ex­tru­sion. I use a brass wire brush to gently clean the nozzle after prints, and oc­ca­sion­ally per­form a cold pull to re­move any residual fil­a­ment. Stock up on ad­di­tional noz­zles for when you get a clog that can't be easily re­solved.

  • Smart Plug
    I use a smart plug to con­trol the power to my Ender 3 Pro re­motely. This al­lows me to turn the printer on and off from my phone and schedule print jobs without needing to be phys­i­cally next to the printer.

  • Time­lapse
    If you're using a camera with Main­sail, you can set up time­lapse record­ings of your prints. This is a great way to doc­u­ment your printing process and share your cre­ations with others. Follow in­struc­tions to clone the moon­raker-time­lapse repo and build the plugin. You'll need to add the fol­lowing lines to your moonraker.conf file:

moonraker.conf
conf
[timelapse] output_path: ~/printer_data/timelapse/ frame_path: /tmp/timelapse/printer

You can also allow the Moon­raker up­date man­ager to handle up­dates for the time­lapse plugin by adding this sec­tion to your moonraker.conf:

conf
[update_manager timelapse] type: git_repo primary_branch: main path: ~/moonraker-timelapse origin: https://github.com/mainsail-crew/moonraker-timelapse.git managed_services: klipper moonraker

Rasp­berry Pi USB Power Trick

If you're using a Rasp­berry Pi with Klipper or Oc­to­Print to con­trol your Ender 3, you might no­tice that the USB con­nec­tion can power the En­der's TFT screen— even when the main printer PSU is shut off.

To avoid this, I took a small strip of painter's tape and cov­ered the 5V pin (the right­most pin when looking straight into the male USB plug). This pre­vents back-pow­ering the print­er's screen when the Pi is pow­ered on in­de­pen­dently which could po­ten­tially cause screen damage over time.

Image showing a close-up diagram of a USB plug with the +5V pin highlighted.