Now that we have Bruce I can take Tony (our Ender 5 Plus) offline for a bit and do some maintenance/experiments I've been afraid to do while he was our primary production machine.


Among these has been upgrading the firmware. Tony has been running his stock Marlin-based firmware for years and while I can't say I've had any specific problems with it, things like resuming a print have never worked correctly and I've always wanted to replace it with a "pure" Marlin build as opposed to the Creality-provided version (plus there's some new features I would like to try out).
However, after working with Bruce's Klipper-based setup I was curious about how hard it would be to switch Tony over as well. I've never really been interested in Klipper because it is inherently more complex (at a minimum it requires an additional computer) and that comes with potentially worse reliability. But since Tony isn't doing anything critical right now there's no harm in giving it a shot, and if it doesn't work out I can allways fall-back to the original Marlin firmware.
TL;DR, the process was in many ways easier than expected. That said, there were a few tricky parts, and because Tony isn't 100% stock (really just a different hot end/extruder) there was a little bit of fiddling to do to get it right. The most time-consuming part was getting myself familiar with how Klipper works, all of the various parts of it and translating the terminology I'm familiar from building Repraps and working with GRBL/Marlin all these years.
Specifically, these were the steps.
Get hardware info for board
Since the Klipper firmware has to be built for a specific controller board, I had to climb under Tony and pull the bottom off his case to make sure I knew exactly what version of the controller board was in there.

Update the Pi
I'm re-using the ancient Raspberry Pi that is already attached to Tony that runs Octoprint. This is probably not the best idea, because it is old, and it's likely that the software is going to conflict but I figured if it went south I could pull something newer/fresher out of inventory (turns out it works just fine).
Install Klipper & Friends
The rest of this all happens on the Raspberry Pi. I used kiauh to install Klipper, the Fluidd web UI and its dependencies and it worked flawlessly once I got the hang of it's interface.
Locate or create a printer configuration file
Check the Klipper repository to see if someone has done this work for you already. If not, the process gets a bit harder. I lucked-out and found a config for a stock Ender 5 Plus that would only need a little modification to match the new extruder.
Build & install the firmware on the printer
Once kiauh installs everything this is a matter of runing make menuconfig and make inside the klipper directory. If you found a config file for your printer the info you need to tell menuconfig should be at the top of that file, if not, you have more homework to do.
Once make is done you can install the firmware directly from the console if you are lucky. I was able to use the make flash command to push the firmware directly to the printer, but in some cases you'll have to copy the firmware .bin file onto an SD card and install it more directly.
Configure Klipper
The hardest part here is to copy the config file to the correct location. Coincidently the Klipper/Fluidd will help with this if you get it wrong (at least in my case it threw errors showing me where it expected the config file to be).
To get it right the first time, copy your config file to printer_data/config/printer.cfg
Also remember to run sudo service klipper restart anytime you modify the config.
Warnings & such
After all this there were still a few warnings shown in Fluidd. Turns out these were easily remidied by following the instructions provided by Fluidd.
Calibration
This was probably the most work after reading the docs, but it went faster than expected.
Tony is equiped with a BL Touch probe so I should do the Probe calibration but the config I found already had values for this and they seemed sane.
I did need use the PROBE_CALIBRATE command to set the Z offset, and I ran into a snag with this that required changing the min_position value in the config to a negative value (I used -5) to allow the offset to be set low enough. I should revisit this now that the calibration is complete...
Remember to run the SAVE_CONFIG command after things like this, otherwise they will go away.
One thing that surprised me here is that Klipper doesn't know about the gcode used for matrix autolevelling. Instead, you use the Bed Mesh controls to run this process. TBH I don't completely understand how this is applied yet, but since my config file came with a bed_mesh section I was able to just click the calibrate button on Fluidd’s Bed Mesh page and run it.
Slicing
Here again I expected surprises but honestly I just used the existing Ender 5 Plus profile that comes with OrcaSlicer and got good results once I fixed the rotation_distance value in the config.
Rotation distance?
Yeah I got this wrong the first time because while I was searching for values, I came across one for a MicroSwiss extruder and used that. The problem is that I'm using a MicroSwiss NG extruder, which is a little bit different. I spent a few frustrating minutes trying to figure out why it was under-extruding until I realized this and chased-down the correct value (8 appears to work well so far).
Results
After fixing that rotation distance misconfiguration I was able to print a very tidy little Benchy!

What's Next?
I have a log list of follow-up tasks to consider this process complete, but I was very plesantly surprised to have the printer operational again after only a couple hours of work. As it looks now, I think Klipper is going to work out, and I'm excited about learning more about it and how I can use it to integrate and automate the robots in the lab.
References