This guide will walk you through installing BlHeli and the BlHeli bootloader on HobbyKing F20 ESCs.


Arduino Here is the $3.60 Chinese Arduino Nano Clone I used:

If you use this specific Nano clone, it uses a ch340g usb chip, the driver for which is here:


  • Since we'll be using BlHeli's Windows app to flash the ESCs, You'll need a VM. I have a mac, skip this if you already have Windows. I used Vmware Fusion this free Windows XP VM, straight from Microsoft:
curl -O -L "{.001,.002}"

BlHeli Suite

Download the latest BlHeli Suite:

Programming Cable

With the HobbyKing F20 ESCs, you won't need a special cable that attaches directly to the chip, but you'll need to solder cables onto the pads or build a cable that can attach temporarily to these pads on the F20. I took an old ribbon cable with an 8 pin com adapter, cut it and re-arranged the pins to match the standard ISP header using clear packing tape to hold them in place. Then I taped this cable to a left over part of a paint stick:

There were a few issues with this. First, the ISP header on the Arduino Nano is for programming the Arduino, not the ESC. So then I re-wired the ISP header to paint stick to the Arduino's MOSI/MISO/SS(Reset)/SCK/+5V/GND from the Nano's Pinout table. Notice the blue labels:

For example, physical pin (dark grey in the chart above) 15 (MOSI) should go to MOSI on the ESC. SS on the Nano pinout goes to Reset on the ESC:

Since I thought the Nano's ISP header could be used to program the ESC, I had already wired up this 6 pin adapter, so I just jumped it to the right pins on the Arduino, but you could skip this and wire straight from the Arduino to the programmer (ie. paint stick):

Here's what I ended up with:


Boot your VM (if you're on a Mac), unzip BlHeliSuite, install the Arduino USB Driver and plug in the Arduino.

Find the COM port in use by your adapter by looking in the Computer Management (Right-Click "My Computer" -> "Manage") under Device Manager, COM ports. Mine is COM3

Open the Interfaces for Atmel tab and pick the Nano W/ ATmega328 Arduino Board, your COM port and click "Make ArduinoISP Programmer"

It will tell you what to do next, just click OK

Select the ISP interface from the ATMEL/SILABS menu option

Switch to the Atmel BESC Setup tab and pick the ArduinoISP (Arduino as ISP Interface) ISP programmer in the dropdown at the bottom along with your COM port and Baud: 19200

Connect your programmer

Press "Read setup"

Note, If this fails, check to make sure your programmer is properly connected and try again. If the programmer is connected, you may need to reset the Arduino ISP programmer by pressing the button on the Arduino. I found that even after pressing the button, it would sometimes fail to read. In this case, clicking "Read setup" again, without changing anything appeared to work.

You'll see a confirmation box like this, click OK

Pick the version of BlHeli that corresponds to your ESC, in this example we're using the HK_UBEC_20A_MULTI code. There are 3 versions of BlHeli, since I'm building a tricopter, I'll use Multi.

  • Main: Intended for helicopter main motor
  • Tail: Intended for helicopter tail motor
  • Multi: Intended for multirotor motors

It will ask you to confirm you want to flash. Something like this, I was too busy holding the programming cable to take a screen shot to get one of my config, but I didn't change anything, left the bootloader pin on the servo cable, locked the bootloader and installed the BlHeli Bootloader -- just hit Yes. (This screenshot is obviously for an Afro 20a ESC)

It takes about 30 seconds to write the firmware and you should see your Arduino's lights flashing. You'll get a confirmation in the BlHeliSuite and you're done!


Note that OneShot125 will be automatically detected, no need to change any settings for this.

Turn on light damping, if you're into that. This setting will actively slow down your props when you throttle down, which gives you even better control. A word of warning though, this can potentially burn out your ESCs and my motors twitch with this turned on. Some of my motors even continue running very slowly when the throttle is at 0%.

Set PWM Min and MAX to 1000 and 2000 respectively, this will obviate the need to calibrate -- if you do this, you can skip step 3.

I like to turn down the beep volume, so I don't wake up the family when I'm working on this late at night.


If you set the PWM Min/Max when programming, you can skip this.

If you're using OneShot125 on your flight controller, you can skip this.

Plugin your ESC and a motor to test it out. You'll want to calibrate your throttle on first boot. For a PPM receiver (I use a FlySky), power it on and when you hear the three tones, push the throttle to the max. Wait for the ascending beeps to finish and then pull the throttle to the bottom. You'll hear some descending beeps when calibration is finished. Unplug the ESC and wait a sec. Plug it back and and you're good to go. You should hear a series of about 3 fast beeps then two more beeps -- you're ready to go!

Light Dampening, Upgrading and Changing settings

Checkout the guide on Updating and Configuring BlHeli.


The manual to learn more.

OneShot125 Testing

TauLabs 125 Explanation