Colin's Radio Control

Other electronics

BLHeli Arduino Nano interface

I recently got some ESC's from Amazon. These had a LED that could configured for different colours through the BLHeli configuration utility.

I wasn't that concerned with the LED, they just happened to be the best offer on Amazon at the time but once they arrived I thought I would have a go at changing the LED colour.

My setup was:

  • Linux Mint 19.1 Cinnamon
  • BLHeliSuite_32: (BLHELI_32 GitHub page, BLHeliSuite_32 Download page)
  • Quanum Illuminati32 Flight Controller (NAZE 32)
    • CleanFlight 2.3.2 (Seems to be the latest version of CleanFlight that this board can handle)
  • MakerStack 35A Brushless ESC (BLHeli_S)
Computer - FC - ESC connected

When I ran BLHeli Suite It would not connect.  It turns out that CleanFlight have dropped BLHeli Passthrough in later versions due to memory constraints on NAZE 32 boards.  I tried re-flashing to an earlier version of CleanFlight. After some trial and error I found that the latest version of CleanFlight for NAZE32 boards that has BLHeli passthrough is 2.0.5.

After flashing the FC with CleanFlight 2.0.5 I tried connecting again. This time I got an error saying "Connection to 4-way Interface 'm4wFCIntf' succeeded.  Found outdated protocol revision 106!  Please update the Interface to a supported revision! (Protocol 107 or higher)".  Aarrghh! how frustrating.  Needless to say I tried a number of different combinations of BLHeli Suite, BLHeli Configurator, Cleanflight firmware etc. but couldn't get any to work.

BLHeli protocol error

I had a number of Arduino Nano clones from Amazon and I thought I might be able to use one of these as an interface.  After a bit of searching on the internet I found this article entitled "Flash ESCs with ANY Arduino!". This went beyond what I wanted to do but it helped me get the interface up and running.

Here are the steps I used to get this all working.  If you decide to try this you do so at your own risk. If you brick your Arduino, ESC or anything else that's your problem.

  1. Connect the Arduino to the PC via USB; Computer - Arduino connected
  2. Fire up BLHeliSuite 32; 
  3. Click on "Make interfaces"; BLHeli Suite - Make Interfaces
  4. Select Arduino Board: "Nano w/ ATmega328" (This will probably be different if you're using a different Arduino).BLHeli Suite - Interface properties
  5. Select Baud: "115200" (Theoretically this shouldn't matter for a USB interface but it failed for me if any other baud rate was selected);
  6. Select "Arduino 4way-interface;
  7. Select "4wArduino_Nano__16_MULTIv20003.hex" (This may be different if you're using a different Arduino);
  8. Click "Arduino 4way-interface;
  9. Click "Yes" to flash the Arduino board then "OK" when it has finished;
  10. Connect up the Arduino and ESC.  For this Arduino board the control wire from the ESC connects to "gnd" & "D3" on the Arduino.  The article on FliteTest says to connect the signal wire to pin D2.  This didn't work for me.  I guess it's because of the type of Arduino board I'm using;  Arduino - Computer connectedArduino - ESC connection 
  11. Supply power to the ESC; Computer - Arduino - ESC - Power all connected
  12. Select the "K BLHeli32 Bootloader (4way-if)" interface in BLHeliSuite;BLHeli Suite - Select interface
  13. Click "Read setup". If all goes well you should get a "Found Multiple ESC configuration" dialog. Click "OK" and the current settings should appear in BLHeliSuite.
  14. You can now configure your ESC.