DShot and BLHeli ESC Telemetry support

Support for DShot and BLHeli ESC telemetry has been added to ArduPilot’s ChibiOS firmware and will be available to testers once Copter-3.6 and Plane-3.9 begin beta testing in a few weeks.

More details can be found on our wiki but below are some of the significant benefits this new functionality provides:

The DShot ESC protocol is a digital protocol for communication between a flight board and an ESC. The key advantages are:

  • no need to do any ESC throttle range calibration
  • all values sent to the ESC are protected with a 4 bit CRC to improve reliability
  • low latency, high bandwidth

ESC telemetry allows feedback from each ESC including:

  • RPM
  • voltage and current
  • temperature
  • total current consumed since power-up (could be more accurate that what the flight controller has)

BLHeli pass-through support allows configuring and upgrading the ESCs firmware without having to disconnect them from your vehicle. This can really save time and ensure all the ESCs are identically configured.

We suspect that a lot of users are going to move to BLHeli ESCs in the future and we have plans including increasing our main loop rates to take even more advantage of these ESCs.


This is fantastic! Will Copter-3.6 beta be based on ChibiOS, or mainly NuttX with options for ChibiOS testing?

Great work. Please add to Rover, too!

That is going to be a real time saver. Plus all the telemetry coming from the esc allows for a better understanding of the vehicle’s performance. Thanks

Oh… esc telemetry on pixhawk, we can see escs on logs?

Yes, the ESC rpm, voltage, current and temp are stored to the dataflash logs.

Copter-3.6 will default to NuttX in the mission planner (and probably other ground stations) but we will make both NuttX and ChibiOS available and we hope the beta testers will help us test both when testing start in the next few days.

1 Like


congrats for the great jobs, is it mandatory to configure the DSHOT? Because I would like just have the ESC telemetry.


I think for the moment at least the telemetry requires using dShot. The reason is that because the ESCs’ telemetry connections (which are serial) are all connected to a single serial port on the flight controller, we need to use the dShot connection to tell the ESC when the line is clear for them to send their message. If we didn’t do this then the messages from the ESCs could (and probably would) arrive at the same time and they would end up corrupted.

Thanks for clear reply… for the moment i’ll use kg 4in1 blheli_32 esc as a standard esc, i.e. with pwm waiting for the 3.6 final release.

Spoke with @tridge yesterday about reverse thrust support (https://github.com/ArduPilot/ardupilot/issues/8579). Hopefully coming soon! The rest works well on plane 3.9 beta1.

Nate, glad to see you are pursuing this. I just read your issue 8579 writeup. It implies that reverse throttle works as expected for non-dShot. Is that the case?

What are you doing/thinking re ESC telemetry display while in flight?


I think I tested reverse thrust on the bench and it worked well with PWM (continuous smooth throttle range). I haven’t flown with it yet, but I don’t anticipate any issues.

I would really like to see the percent throttle for every motor while in-flight. For my twin-engine planes, that would be a -100% to 100% range for each motor. That way I can monitor their health and tune.

Now seeing rpm, amps, temp in ESC fields of DF log. What’s next step toward getting real-time display of those in either GCS or OSD?


Does the baud rate setting on the serial port connected to the ESC matter? The wiki doesn’t mention what to set it to.

It is automatically set to 115200, so it doesn’t matter what the parameter is set to

It should set itself to 115200 when you assign the function to the uart.

support for realtime ESC telemetry is now in master. It is also in the latest releases of pymavlink and MAVProxy.
What we need next is a way to display it in MissionPlanner and QGC

1 Like

I am using a pixracer and due to the need to run a second GPS on the Telem2 port, was trying to use the FRsky connector for the ESC telemetry connection, which according to this page http://ardupilot.org/copter/docs/common-pixracer-overview.html is serial 4, however this may not be the case as I am also not able to get that port to read a known working GPS receiver.

That port’s got a hardware inverter hasn’t it?