I wanted to improve the quality of my 3D prints. I finally added white lithium grease to my Z-axis rod which reduced squeaking and seems to have imporved the ringing. I learned about pressure advance and inputing shaping with Klipper and how they could improve print quality. I bought a Raspberry Pi Zero 2 W on Kijiji and started preparing for Klipper. I followed MostlyPoorDecisions' guide for Kipperizing an Aquila.

Setting up SD Card

First I downloaded the latest release of FluiddPI from GitHub. I then downloaded Raspberry Pi Imager. I opened up the imager and selected the unzipped FluiddPI image. I selected the SD I was going to format.

Selecting image and SD card
Selecting image and SD card

I then selected WRITEand waited until it was done.

Writing SD card
Writing SD card


I then opened up fluiddpi-wpa-supplicant.txt and uncommented along with my Wifi credentials.

  ssid="put SSID here"
  psk="put password here"

I saved the text document and then plugged the SD card into the Raspberry Pi.

Configuring the Pi

I plugged in power and let the Raspberry Pi boot up until the LED stayed a constant green. https://fluiddpi.local didn’t work for me, so I went into my DHCP leases and found the IP for Klipper.

I then SSH’d into the Pi with credentials pi for username and raspberry for the password.

I then inputted:

cd ~/klipper

make menuconfig


I then went into Micro-controller Architecture and selected GD32F103. I then went into Bootloader offset and selected 28KiB. Fianlly, I went to Communication interface and seleted serial (on USART1 PA10/PA9). Below is a screeenshot of my config.


I hit ESC to exit and Y to save. I then inputted make and waited for it to finish compiling.

Finished compile
Finished compile

I then ran cp ~/klipper/out/klipper.bin ~/klipper_logs/ and cp ~/klipper/config/printer-creality-ender3-v2-2020.cfg ~/klipper_config/printer.cfg.

I then went into the Fluidd dashboard and in {...}} on the left, under Other Files I clicked on klipper.bin and Download.

Configuration dashboard
Configuration dashboard

I was running the Pi off a battery pack, so I did sudo shutdown -h now to shutdown and relocated it to my Aquila.

Flashing the Printer

I removed the SD card from my printer and followed my previous blog on flashing the firmware. I created a folder called firmware. I placed the klipper.bin file inside the new folder.

I ejected the SD card and plugged it into the printer. I powered on the printer and let it flash for a few minutes.


I then connected the Pi to the printer with an OTG Micro USB cable and went to it’s IP. there were a lot of warnings, but that was supposed to happen.

I went into the {...} configuration again and clicked fluidd.cfg. I pasted in all the code boxes from inital setup.

I still got errors, so I put [include fluidd.cfg] at the bottom of the printer.cfg file.

BL-Touch Troubles

I had a BL-Touch installed on my Aquila, so I wanted to configure it as well. Luckily there is a very good documentation on how to do so.

I added the following to my fluidd.cfg file:

sensor_pin: ^PB1
control_pin: PB0
z_offset: 0

home_xy_position: 117.5, 117.5 # Change coordinates to the center of your print bed
speed: 50
z_hop: 10                 # Move up 10mm
z_hop_speed: 5

I didn’t read the line for homing the Z axis and forgot to add endstop_pin: probe:z_virtual_endstop. This would show problems very quickly.

I ran the debug test and everything went well with the probes. I tried G28 and the nozzle crashed into the bed. I tried again, but this time I manually clicked the Z-end stop switch. I searched around and reread the documentation. I realized that I skipped the virtual endstop.

I went into my printer.cfg and commented out the endstop_pin and position_endstop. I then added the new endstop_pin line.

endstop_pin: probe:z_virtual_endstop
# endstop_pin: ^PA7
# position_endstop: 0.0

I did the tests again and it homed fine. Due to me not entirely reading the documentation, I now have a hole in my bed.


I did PID-tuning of my extruder with the following command:


After the extruder was done, I did the following to tune the bed:


When the bed finished, I did SAVE_CONFIG.


I used Klipper’s Documentation on how to set the Z-offset.

I did PROBE_CALIBRATE and then lowered the nozzle with the Tool in the Fluidd dashboard. I did the paper test and TESTZ Z=-.1 until I found a good offset. I tried to save the config, but I got an error instead. So, I manually set the Z-offset in the fluidd.cfg file under [bltouch]. I used the Z-offset value I knew worked beforehand in Marlin which was -2.38. I removed the negative since that’s how Klipper wanted it.

sensor_pin: ^PB1
control_pin: PB0
z_offset: 2.38

X-offset and Y-offset

I used the same documentation from the Z-offset to set my X-offset and Y-offset. I homed my printer and then issued PROBE. I put a piece of tape with the corner where the probe’s point was. I then used GET_Position and noted the toolhead: position. I issued multiple G1 commnands until I got the nozzle above the corner of the paper. Example of G1 command:

G1 F300 X100 Y110 Z2

Once I got the nozzle in position, I did another GET_POSITION command and subtracted the new x and y values by the original. I then got my X-offset of -49 and Y-offset of -11.

I went into my fluidd.cfg file and added x_offset: -49.0 and y_offset: -11.0 above the z_offset under [bltouch].

Manual Leveling

My BL-touch was too far away from the nozzle and unable to probe every corner of my bed. I used Klipper’s documentation on manual leveling. I added the following to my fluidd.cfg file with the position of my bed screws:

screw1: 25.5, 25.5
screw2: 194.5, 25.5
screw3: 194.5, 194.5
screw4: 25.5, 194.5

I then ran BED_SCREWS_ADJUST and did the paper test on the first point. I had to adjust the screw, so I did ADJUSTED and moved to the next point. I repeated this until I didn’t need to adjust the screws and did ACCEPT for each of the points.

Bed Mesh

I used Klipper’s Documentation to create my bed mesh. I adjusted the configuration to the following and added it to fluidd.cfg:

speed: 120
horizontal_move_z: 5
mesh_min: 25.5, 25.5
mesh_max: 160.5, 198.5
probe_count: 5, 5
mesh_pps: 2,2
algorithm: bicubic
bicubic_tension: 0.2
move_check_distance: 5
split_delta_z: .025

Since my probe couldn’t do every screw, I decided on the max by doing BED_SIZE(235) + X_OFFSET(-49) - SCREW_DISTANCE_FROM_EDGE(25.5). I did the same for the y-axis.

After saving the configuration, I did BED_MESH_CALIBRATE PROFILE=default METHOD=automatic to create the mesh. I then did SAVE_CONFIG after it was done. It should load the configuration every time Klipper starts up.

Clearing Warnings

I still had multiple warnings on my dashboard and many were for Moonraker.


I did a quick search and Conscious_Board5007’s advice to SSH and run ~/moonraker/scripts/ got rid of most of the warnings.

The remaining warnings said, “This may indicate that PolicyKit is not installed”, so I did some more searching and will solve that another time.

Calibrating Rotation Distance

I’ve heard about calibrating e-steps when changing nozzles, so I wanted to recalibrate my rotation distance. I thought this would solve my issue of !! Move exceeds maximum extrusion (0.649mm^2 vs 0.640mm^2) in my console, but I think I solved it by changing nozzle_diameter under [extruder] in printer.cfg to 0.800.

I took my digital calipers and measured 70mm from the intake of my extruder. I put a mark at that distance and then did a G91 command. I then did G1 E50 F60 to extrude 50mm. I remeasured the distance from the intake to the mark and got 20.2mm. Using these numbers I was able to calculate my rotation distance (34.406*(70-20.2)/50). I got 34.268376, but since my actual extrude distance was so close to the requested, I kept the original rotation distance.


  • input shaping
  • pressure advance