Introduction: BL-touch Easy Install on Creality CR20, or Ender 3

About: By day I am an electronic engineer for a certification and approvals company, by night I am an avid technology hobbyist and DIY'er. I enjoy learning how things work, and sharing my learning experiences with ot…

Welcome to another tutorial! This one is going to be short and it probably won't win any awards for looking fancy, but it will tell you everything you need to know about how to easily install a BL touch auto bed leveling sensor to your 3D printer. You don't need the Arduino IDE, and you won't need to scroll through code uncommenting this or that. This is a very simple, and straight forward guide. I have the Creality CR20 but you can use this on any similar printer (the Ender 3, CR20, and CR10 are near identical printers so this should work with all of those).

I wanted to make this instructable to put all the necessary files in one place together with the proceedure. Often, links to firmware and software links to Creality's site are moved or removed as they are usually dropbox or google drive links. Unfortunately instructables will not allow me to upload the firmware or software I used so hopefully those links will be maintained. I'm sorry if I miss any pictures, I had the idea to make the instructable after the installation was complete to make sure it worked first.

Please use this a supplimentary tutorial. Creality have a tutorial about how to install the sensor for the Ender 3 on youtube so please check that out, and also read as many other sources as you can so that if you run into problems that aren't covered here you will be better prepared to solve them.


If you are an electronics hobbyist or like to learn Arduino then you probably have some of these already.

Mandatory pre-requisites

  • USB mini to USB cable
  • A set of Hex keys (you probably have a set included with your 3D printer kit)
  • A phillips head screwdriver
  • BL Touch sensor (Version 3) kit (includes sensor, wires, and a bracket to mount on the trolley)

Optional extras

  • Soldering iron, with solder or some other cable termination method
  • Nylon cable ties
  • Hot glue gun (to glue loose parts)
  • Jumper wires / dupont cables

I used this kit from aliexpress, but I did not use the ISP header or the jumper breakout board, you will only need the sensor, the bracket, the screws, and the zip ties.


Step 1: Hardware Installation

Turn the machine upside down and remove the phillips head screws with your screwdriver and put them in a safe place, then remove the bottom cover from the bottom. If you have a CR20 like me you will have a power supply, the main board, the LCD board, a cable loom, a fan and nothing else.

While the device is open theres a couple of things to consider:

  • The ATMEL microcontroller on the main board (mine was the ATMEGA2560) and
  • The Creality PCB board revision (mine was V2.1)

Important note

We will need to know which microcontroller is being used later when we flash the new firmware over to the device. Importantly, if you have older boards such as the V1 please check to make sure they are compatible with the BL touch V3. Some older revisions only work with the V2. You can check if you have either theb V2 or V3 by looking on the sensors marking label.

Connecting the BL touch to the main board

Disconnect the "Z-axis endstop" microswitch conenctor from the board. This will be replaced with the BL touch sensor which is terminated with a molex connector (same as the wire for the end stop switch), so we can now remove this wire altogether. Push the molex connector of the BL touch sensor into the socket for the Z-axis enstop switch. The BL touch also has three dupoint jumper style connectors for terminating into the mainboard. These are connected onto the three 2.54 mm header pins on the board in the diagram. In my case the jumpers could not be plugged directly into the board out of the box because they were in the wrong orientation. So I used some jumper cables to seperate the different colours so they could be terminated to the correct pins on the board. Follow the wiring diagram I have included in this step.

Important note

I found that I needed to reverse the black and white wires as I found that my Z-axis would continuously ram itself into the bed. If this happens turn off the printer and reverse the wires on the molex connector which plugs into the Z-axis endstop socket. I cut the wires and soldered them back together and used some PVC tape to insulate the joints (use heat shrink if you have it). Hopefully that will fix the problem for you if you're having this issue after installation of the sensor.

Finishing up inside the enclosure

Finally zip tie or hot glue all the loose parts to make sure nothing can make a short circuit in the enclosure once it is fastened closed. Feed the wiring for the sensor from the mainboard out through one of the holes provided for the existing wiring loom so it can be zip tied to the wiring loom. Use the screwdriver to fasten the bottom plate back onto the bottom of the printer.

Installing the sensor

Take the bracket (number 3 in the picture provided) and attach the sensor to it using the two supplied bolts. The holes on the bracket are threaded and you don't get nuts with the bolts. The idea is you attach the bolts from the bottom so you don't need to use nuts. Now you must attach the assembly to the Z-axis trolley. Using a hex key unscrew the fan shroud covering the hot end. Don't remove the shroud completely, we just want to re-use the screws holding on the shroud to also attach the provided bracket (number 3 in the provided pictures). Place the assembled bracket/sensor over the shroud and screw it back together. Finally zip tie the sensor cable to the wiring loom at sensible intervals. It is probably best to place the zip ties in the same place the current ones are. Then that is the hardware installation finished. Next is firmware flashing.

Step 2: Flashing Firmware

This isn't really flashing firmware, it's more like uploading an Arduino sketch but way easier and not using the Arduino IDE. I realised my printer (Creality CR20) is identical to the CR20 pro which has auto bed leveling as standard. So I decided to flash my printer with the CR20 Pro firmware which I found on Github from this link ( Hopefully if you are reading this a few months or years from now the links still work and the code is still maintained as I can't host the code on instructables. You should be able to use any firmware which has been modified for use with your specific printer and a BL touch sensor, however make sure you are careful to select the correct firmware and from a reputable source. I can't be held responsible if you flash the wrong firmware to your printer and brick the motherboard.

Flashing firmware

Uplug the mains cable from the printer and plug the USB cable into the printer and your computer. The printer uses a USB to serial converter like the Arduino. If the device is not recognised by Windows as a 'COM' port straight away, try installing the drivers for the 'CH340' serial to USB chipset. Power will be provided to the printer's main board without the need for it to be switched on at the back.

You can find the link to the Xloader firmware flasher here ( Download it with the firmware you want to flash to the printer. Run the program and select the 'COM' port which was recognised by Windows when you plugged it in. If you're having trouble finding which 'COM' port the device is on you can check the Device Manager in the Windows control panel. In Xloader choose the .hex file you want to flash to the device, set the baud rate to 115200, set 'COM port' to reflect the correct COM port used by the printers USB, and for 'Device' select the microcontroller used by your board (mine is the ATMEGA 2560).

When you are ready click 'Upload' and the Xloader program will say 'uploading...'. It will take a few minutes to complete the upload process and you will not have any visual indication that anything is happening, but be patient and once it is finished the printer will reboot and the LCD on the printer will display the new firmware update.

Step 3: Setting Up Your New Sensor

At this point you want to check that the firmware update and the sensor are working correctly. I recommend disabling the stepper motors and raising the Z-gantry up manually by turning the screw so that it sits about halfway up the gantry. Then ask the printer to 'auto home' and it will meet the limit switches on the X and Y before homing Z. The gantry will start to come down and the BL touch probe will pop out. If the proceedure has worked the printer will stop moving the Z-gantry down when you touch the leveling sensor. If you find that it continues to go down and doesn't stop, have a look at the wiring. As I mentioned in the previous step, I had this problem and I read in the Makerbot formus that if the white and black cables are switched it solves the problem. I tried this and it worked. If all is well then we can start using the new sensor and setup the offsets.

Setting up the Z offsets

Before you start make sure that the bed is 'eye level'. What I mean is that there is no point using auto bed levelling on a bed which is already at a ridiculous skew, so just make sure that the bed is roughly eye level by adjusting the rotary knobs in the corners of the bed. Heat up the bed to 60°C and the nozzle to 200°C (or whatever your usual printing temperatures are) and you can start levelling. Levelling the bed while it is heated simply accounts for any expansion of the bed when it is heated. Auto home the printer, then use the 'move z-axis' option to bring the Z-axis all the way down to the zero position. This step differs between printers and firmware, but the firmware I used had a zero point which was about 5 mm above the bed and wouldn't let me go down any further. This was done in 'z-offset' and as I increased the minus figure the z-gantry can down with it which was very useful for me, but you might have to bring this down yourself by using 'move axis', recording the new z-axis height, and going into the 'z-offset' menu later to input this figure. Anyway, once this is done simply select 'store settings' and the printer will store the 'z-offset' in the internal memory.

G-code amendments

The final step is to place a small piece of G-code in the 'start.gcode script' of your slicer. Simply add 'G29' into the line that says 'G28 Z0' so that it reads 'G28 G29 Z0'. Just for reference here is my start.gcode from Cura.

;Sliced at: {day} {date} {time}<br>;Basic settings: Layer height: {layer_height} Walls: {wall_thickness} Fill: {fill_density}
;Print time: {print_time}
;Filament used: {filament_amount}m {filament_weight}g
;Filament cost: {filament_cost}
;M190 S{print_bed_temperature} ;Uncomment to add your own bed temperature line
;M109 S{print_temperature} ;Uncomment to add your own temperature line
G21        ;metric values
G90        ;absolute positioning
M82        ;set extruder to absolute mode
M107       ;start with the fan off
G28 X0 Y0  ;move X/Y to min endstops
G28 G29 Z0     ;move Z to min endstops
G1 Z15.0 F{travel_speed} ;move the platform down 15mm
G92 E0                  ;zero the extruded length
G1 F200 E3              ;extrude 3mm of feed stock
G92 E0                  ;zero the extruded length again
G1 F{travel_speed}
;Put printing message on LCD screen
M117 Printing...

That's it! You're done. You should be able to start printing straight away with the BL Touch.

Step 4: Extra Links

Like I said in the introduction it is best to gather research from a few sources. Many sources I found were from Youtube, and they are inconsistent at best. I would suggest the following links to watch:

Creality's installation video for BL Touch with Ender 3.

BL Touch bed leveling problems on thingiverse forums

Reddit post about BL touch issues

Bl touch issues with Creality V1 main boards