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.

Please note that this is not the version I recommend for 8-bit boards like the one used in the Ender 3. The most stable and feature rich version of the firmware for this architecture is the 1.1.9 that I made available in another article. Marlin 2.x is aimed to a new generation of boards using 32-bit processors, the built in libraries are bigger and there is less space left for features. Anyway, if you want to try this you can be sure I did the best I could to configure it properly and fit the maximum amount of features possible. It was downloaded and installed more than 10000 times and I believe most of the users will find no problems with it.


  • 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.

Other Marlin downloads for Ender 3

Version (April 2020)
Any operating system
File size
5.0 MB (source), 496 KB (HEX)
Package 1 SHA256: 625E74B88E8CCEE48C7D463A1B20D777403152665AF83C5609F9006FC414904F
Package 2 SHA256: ADC6D67985C34935FD7EE830FDA060694A8E41CF87F1B9E8AC9DB116622F7D03
Package 3 SHA256: 309D37BA16D9392C63C02EF8D0EADD39CE10990E93BE623D3C7B98A29C7042F6

Post Categories


Submitted by Arti on Tue, 03/17/2020 Permalink In reply to by Aäron Declerck

Have same problem, but occasionally the LCD screen  turn on. I have to turn off and turn on printer 6-7 times until it start working.

Stock firmware works ok

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.