Ultimate Marlin 2 + BLTouch for Ender 3 with OctoPrint

This is the vanilla version of Marlin Firmware 2.x pre-configured for Creality Ender 3 printers with original or generic BL Touch sensors. This distribution is focused on professional/power users and is packed with the maximum amount of features the small 1284P chip can fit at the expense of the SD Card support. Because of the lack of the SD support this is only recommended for OctoPrint users. If you have no plans to retire your SD Card support or does not understand the features listed below I recommend using this version of Marlin.


  • Full LCD Menus
  • Adaptive step smoothing
  • S-Curve acceleration
  • Advanced Pause feature
  • BLTouch support enabled (default probe offsets X=-42mm, Y=-5mm, Z=0mm)
  • Bilenear automatic bed level with 25 probe points and 3 trials each
  • Nozzle park feature
  • Fully compatible with OctoPrint
  • All changes from the original Marlin config file were marked with the comment tag "Customized DBP"
  • SD Card support disabled to fit all extra features

Note about the bed leveling strategy

There are two ways to perform the automatic bed leveling, the first is before every print and the second is only when necessary. Based on my experience with the Ender 3, it's better to do an extremely precise bed leveling when necessary than a simpler one before every print and this firmware configuration reflects this choice.

If you want to do quick/imprecise bed leveling before every print you will need to reconfigure the firmware.

Note about linear advance feature

Most of the slicers already have excellent implementations of this flow compensation algorithm. Enabling Linear Advance in the firmware would make it incompatible with the slicers implementation and limit the user options. Linear advance is not enabled in this distribution.


  • BLTouch installed on pin 27
  • Z stop switch removed (it can block the Z axis movement)
  • IMPORTANT! BLTouch tip height must be adjusted according to the official instruction manuals. There are different BLTouch sensor clearences and the YouTube videos tips are wrong most of the times
  • Bootloader installed
  • Microsoft Visual Studio Code if you plan to install from the source code
  • PlatformIO IDE extension installed on Visual Code if you plan to install from the source code
  • OctoPrint - This version has no SD Card support.

Installation and configuration

Follow the instructions in the Vanilla Marlin 2.x for Ender 3 article.


2.0.3 (January 2020)
Any operating system
File size
5.0 MB (source), 496 KB (HEX)
Package 1 SHA256: A58E9344DA94399A2F72FE41F70F4CB898147382956AB2F26DB66D2949812DB1
Package 2 SHA256: 348D50325A105152DB7F7A6181C32B746A4DA2B226AAF405ACE8314E226808CB
Package 3 SHA256: FDAE125D12411B1B37B4782BEFA57765404205E76D33D5E403C0A22F88951A0E

Post Categories


Submitted by Aäron Declerck on Mon, 02/24/2020 Permalink

Thank you to compile your own Marlin version. It is excellent! I still have an issue where occasionally the LCD screen won't turn on. M502 followed by M500 doesn't seem to resolve this issue. I will try to investigate it further. Do you have a PayPal or Patreon link where I could support you?


There are some errors related with the EEPROM not being updated with the firmware and I was not able to figure out exactly what happens. Resetting the EEPROM seems to work most of the time.

Thank you for the support offer! Since I don't maintain any channel for contributions I ask you to consider donating the amount to a charity service of your trust.


Submitted by Christian on Sun, 02/16/2020 Permalink

Hi Daniel,


thank you for your excellent work! I have successfully flashed your Marlin Ultimate Edition to my Creality Ender 3X and it worked very well. Right now I am doing the next step and building a firmware on my own to be able to include some specific settings (e.g. PIDTEMP, PIDTEMPBED).


In the Configuration.h file on line 881 ("#define SERVO0_PIN 27") there is a remark that the BEEPER_PIN sould be set to -1 to prevent triggering the BL-Touch probe during the menu use. Although this did not happen when using your compiled firmware, I double checked the file (Marlin\src\pins\sanguino\pins_SANGUINOLOLU_11.h) and there BEEPER_PIN is set to 27 or 29 depending on the configuration and not to -1. Shall I change this value to -1 or am I missing something?


Greetings from Vienna,


Hi Daniel,


thank you for your quick reply. :-)


By the way: it turned out that enabling the PID-Tuning for the heatbed (which is disabled by default) increases the size of the firmware so that is too large. So I will limit the changes more or less to entering my PID-Tuning values for the hotend.




To enable the advanced Marlin 2 features like the S-Curves and the adaptive smoothing I had to turn off something to free memory. The SD Card support was the only candidate left and by doing that we got additional benefits...

The 1284P chip has a limited processing power and every time it gets overloaded with complex GCode instructions it will hang for a few microseconds. When this happens the residual pressure in the nozzle generates a blob.

Obviously the SD Card reading takes a huge amount of cycles and after disabling it we can have a much smoother operation.

Another feature enabled to save processor cycles is the ENDSTOP_INTERUPTS_FEATURE that eliminates the endstop check loop.