The Creality Ender 3 Pro is a popular and affordable FDM (fused deposition modeling, also called fused filament fabrication, or FFF) 3D printer that has gained a strong following among hobbyists and makers. Known for its reliability, ease of use, and upgrade-ability, the Ender 3 Pro is a great choice for both beginners and experienced users.
My best man gifted my wife and me (mostly me) an Ender 3 Pro for our wedding. So far, most of the printing I've done has only served to improve the printer... I've made several upgrades and modifications to enhance its performance and usability.
Upgrades
Extruder
One thing almost every Ender owner will end up doing is replacing the stock, plastic extruder mechanism with a more robust aluminum model (such as this ). A design flaw with the original often leads to the plastic snapping with some continuous usage— causing under-extrusion or preventing filament from traveling through the Bowden tube altogether.

This was one of the first upgrades I made to the printer, and it significantly improved print reliability.
Printable Upgrades
There are many printable upgrades available for the Ender 3 Pro that can enhance its performance and usability. Some of the additions I've found particularly useful:
-
Cable Chains
Cable chains help manage and protect the printer's wiring— reducing wear and tear, and keeping wires organized during operation. -
Filament Guides
A filament guide helps ensure smooth feeding of the filament into the extruder, reducing the risk of jams and tangles. -
Spool Holder
An upgraded spool holder with smooth bearings can accommodate larger spools and provide better support, reducing strain on the filament during printing. -
Camera Mount
A camera mount allows for easy installation of a webcam or Raspberry Pi camera module, enabling remote monitoring and time-lapse recording of prints.
Control Software
Klipper Firmware
One of the most significant upgrades I've made to my Ender 3 Pro is installing Klipper firmware . Klipper is an open-source firmware that runs on a host computer (like a Raspberry Pi) and communicates with the printer's microcontroller (MCU).
This offers several advantages over traditional firmware, including:
- Improved print quality and speed
- Advanced features like pressure advance and input shaping
- Easier configuration and updates via a web interface
- Support for multiple MCUs and complex printer setups
To install Klipper, I followed the official installation guide
. I used the printer.cfg
specific to my model after opening the controller enclosure and inspecting the MCU on the printer's mainboard. My model uses the STM32F103 chip with a v4.2.2 controller.
You'll need to format a microSD card with the Klipper firmware binary and insert it into the printer's mainboard. When you power on the printer, it will flash the new firmware automatically. You can then remove the microSD card and finish the host software setup on your Raspberry Pi.
On my first homing after flashing the Klipper firmware, the hotend gantry was overrunning the available track and causing the belt to skip and grind as it tried to push beyond the available space. To prevent this, I needed to update the default printer.cfg from Moonsail to provide a lower (-1cm) limit for X, Y, and Z travel. Here's the 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
Mainsail
I'm using Mainsail as the Klipper web interface for managing the printer. It's virtually the same as Fluidd — another popular Klipper web interface.
Mainsail provides a very lightweight web interface for Klipper that makes printer control and monitoring simple and straightforward. It's also mobile-responsive, so I can check prints and manipulate the printer from my smartphone. It offers features like:
- Real-time temperature monitoring
- Motor control
- Print job management
- G-code viewer
- System status and logs
- Camera integration with the Crowsnest plugin
OctoPrint
OctoPrint is another popular web interface for 3D printers, and it's what I used before flashing the Klipper firmware. Mainsail is specifically designed for Klipper and offers a more streamlined experience. However, OctoPrint will also work with Klipper, and it provides similar functionality to Mainsail.
OctoPi
One of my favorite ways to run OctoPrint is using OctoPi , a pre-configured Raspberry Pi image that includes OctoPrint and all necessary dependencies. This makes it easy to set up a dedicated print server for the Ender 3 Pro— letting you manage prints remotely and monitor 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 Leveling
Regularly check and adjust the bed leveling to ensure optimal print adhesion and quality. I use a piece of paper to gauge the distance between the nozzle and the bed at various points. The paper should just barely slide with slight resistance. -
Nozzle Cleaning
Keep the nozzle clean to prevent clogs and ensure consistent extrusion. I use a brass wire brush to gently clean the nozzle after prints, and occasionally perform a cold pull to remove any residual filament. Stock up on additional nozzles for when you get a clog that can't be easily resolved. -
Smart Plug
I use a smart plug to control the power to my Ender 3 Pro remotely. This allows me to turn the printer on and off from my phone and schedule print jobs without needing to be physically next to the printer. -
Timelapse
If you're using a camera with Mainsail, you can set up timelapse recordings of your prints. This is a great way to document your printing process and share your creations with others. Follow instructions to clone the moonraker-timelapse repo and build the plugin. You'll need to add the following lines to yourmoonraker.conffile:
[timelapse]
output_path: ~/printer_data/timelapse/
frame_path: /tmp/timelapse/printerYou can also allow the Moonraker update manager to handle updates for the timelapse plugin by adding this section to your moonraker.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
Raspberry Pi USB Power Trick
If you're using a Raspberry Pi with Klipper or OctoPrint to control your Ender 3, you might notice that the USB connection can power the Ender'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 covered the 5V pin (the rightmost pin when looking straight into the male USB plug). This prevents back-powering the printer's screen when the Pi is powered on independently which could potentially cause screen damage over time.


