AR Drone 2.0 DSM2-Wifi bridge

A small DSM2-wifi bridge to fly the AR Drone with a DSM2 controller.

Similar projects worth following
The problem:
The AR Drone uses a smartphone as a controller, which seemed like a nice feature. In reality it sucks, the range is bad, the video feed cuts out, after losing the signal the drone keeps going.
My solution:
Use my Spektrum DX5e controller to fly the drone. There are some mods out there that use the rx/tx port of the drone. But I want a solution that doesn't void the warranty. The idea is too hookup a DSM2 receiver to an esp8266. The esp8266 will convert the received signal from the receiver to usable commands for the drone.

The controller:

The DX5e is officially a five channel transmitter but there is a trainer switch that controls channel six. So I have a total of six channels. Four are used for flying that leaves me two channels for take off, landing and emergency. Also need a way to notify the flyer that the batteries are low. Normally this done through the app, but since this is a one way link we need a different way of communicating.

The receiver:

I'm going to use the OrangeRx R410X. This receiver has four PWM outputs and a 6Ch CPPM output. I will only use the 6Ch CPPM because I can read the 6 channels with one input instead reading the PWM signals individually. Also the receiver returns the channels to the state when they where in the bind position. I can use this function to detect when the drone has lost connection.


For this I will use a toggle switch thats on the DX5e. Take off will be done on the rising edge. If the switch is returned or the drone loses connection the signal will go back to low. This falling edge will put the drone into hover mode. In this mode triggering the momentary trainer switch will make the drone land. This makes sure the drone doesn't fly off or crash when connection is lost. If the switch is turned on or connection is reestablished the drone will continue flying.


There is a emergency mode which cuts all engine and the drone will drop out of the sky. Using this function is very dangerous but can be useful. The momentary trainer switch will be used for this. To make sure I don't get false positives and the drone falling back to earth, the switch should be held for a period of time before activating the emergency mode.

Low battery:

I thought of two ways communicating with the flyer, movement or leds. Leds are a bit hard to see from far away so movement is my choice. The plan is to make the drone rotate around its axis until the flyer acknowledge it with the Landing/takeoff switch. After the switch is set to low the drone will keep spinning for a moment. When it has stopped the flyer can decide to land or go back to fly mode to find a decent spot to land.


The hardware shouldn't be much a 3.3V regulator for the ESP8266 and a level shifter to convert the 5V output from the receiver to 3.3V for the ESP8266.

  • 1 × ESP8266
  • 1 × OrangeRx R615X

  • We have lift-off and crash....

    jorisplusplus07/16/2015 at 15:52 0 comments

    Finished the first version of the code. It flew and worked okay. But after a while of the drone and it was heading towards water. So I had to perform an emergency landing. The drone was not happy with this landing and I broke one of the beams. The drone has since been repaired but I have to work a bit more on the code. Problems is mostly with the AR.Drone documentation which is horrible at best. Code is now on github

  • Hardware done

    jorisplusplus07/07/2015 at 20:01 2 comments

    Today the orangeRX receiver arrived. I chose a different one then planned because this one was available in the European warehouse. Measuring the signal line gave me a cPPM of 3V, so no level shifting required. The hardware consists of a LD33V, wire and a usb cable. The usb cable powers the orangeRX and the D33V. The LD33V powers the ESP8266.

    Starting working on the software first attempt was in lua using the NodeMCU firmware. But that firmware crashed a lot without reason so I switched over to the SDK + Arduino ide. Decoding of the input signal is done now, next is control and after that i can work on the AT commands of the AR Drone.

    Gallery updated with hardware picture.

View all 2 project logs

Enjoy this project?



Jan wrote 12/30/2015 at 22:58 point

Hi there, i’m trying to build my own wifi controller for the AR.Drone and i stumbled over your gitHub source. 

Sadly i don’t understand enough of it to fit it for my project, can you maybe tell me how i can make the drone take off, hover, and land within the program without the external rc reciever (i have absolutely zero experience with whatever protocoll it uses)?

the commented part at the „times“ declaration puzzles me a bit ^^ 

... the entire „times“ array to be specific XD

  Are you sure? yes | no

Jan wrote 12/31/2015 at 01:00 point

Now i’m at the point that i understood that you have to send 16 times something like that: "1200:1200:1200:1200:1000:1000"

and than something like: "1200:1200:1200:1200:1201:1000“ to take off.

but i still don’t get what the limits are ( they appear to be between 1000 and 1400 right? ) and i don’t understand what times[5] does (emergency mode maybe?) 

for instance: is "times[2] = 1400“ full throttle Up and "times[2] = 1000“ full throttle down?

if i got anything right, please give me a short feedback ^^ your code is pretty amazing :)

  Are you sure? yes | no

jorisplusplus wrote 01/03/2016 at 13:34 point

The times are the the values how long the received signal was high. Not for controlling the drone. Flying is done by 'AT*REF='+something. In the ardrone developer guide a lot of info on flying.

The recevied signal from my 2.4Ghz received. Consists of multiple PWM pulses one for each channel. The times array contains the length of those PWM pulses

The API depends on your drone. So you may want to look on for documentation on your specific drone.

  Are you sure? yes | no

Similar Projects

Does this project spark your interest?

Become a member to follow this project and never miss any updates