DIY wireless telemetry link for UAV

Telemetry link between UAV (drone, airplane, boat) and laptop/mobile/ground station device can be very useful. Not only to get current drone position, altitude or battery level, but also, when wireless link provides such a possibility, to update drone parameters in-flight. Some radio links, like OpenLRS provides such a possibility out of the box. They include transparent serial bridge and almost any kind of device can use it to communicate with flight controller. Unfortunately, most RC radio systems lacks this functionality and additional telemetry links have to be used. Like 3DR 433Mhz radio link.

One can buy or one can build something by his own. Some time ago I've chosen the second way and decided to build my own wireless serial link to archive 2 way communication between drone and ground station software. My objectives were:

  • 433MHz since it is legal in my country
  • has to allow to use my phone with EZ-GUI, since I do not like to carry my notebook to an airfield
  • as cheap as possible
    To satisfy those objectives I've decided as follows:

  • HC-12 433MHz wireless serial modules will be used. They are cheap, pair costs less than $11
  • Since I would prefer not to have my Android phone cable connected to any external devices, HC-06 Bluetooth module will be used to connect to mobile phone or tablet. Once again, it is cheap, single module costs between $4 and $5
    My telemetry link is build from two parts:
  • Mobile – it is attached to drone and consists of single HC-12 and antenna connected to flight controller, SPRacingF3 running INAV
  • Ground Station – it acts as Wireless-to-Serial-to-Bluetooth bridge


Mobile part is very simple. It is just HC-12 module connected to flight controller's spare UART port. No additional hardware, so schematics is extremely simple:

HC-12 telemetry flight part

One thing that has to be considered here is baud speed that will be used for communication. In case of HC-12, the lower the speed, the bigger the range. Personally, I've decided to use 9600bps. It is fast enough for two way communication and slow enough to provide a range of about 500m.

For 9600bps there is even no need to configure HC-12. By default it is configured for 9600bps and FU3 mode that works just fine. If you will want to use different serial speeds, HC-12 has to be reconfigured to support it. You can read how to do it here.

The other thing is the antenna. HC-12 is sold with a small solderable spring coil antenna. I wanted something better, so instead of spring coil, I've build air cooled 433MHz antenna and attached it using U.FL pigtail.

HC-12 Rf 433MHz module in quadcopter

"Air cooled" antenna on quadcopter

Because of low baud speed, SoftwareSerial ports can be used.

Ground Station

Ground Station or Wireless-Serial-Bluetooth bridge is slightly more complicated.

HC-12 telemetry ground station bridge

It consists of HC-12 433MHz RF module and HC-06 Bluetooth module connected to each other with TX-RX lines crossed. Power is supplied via LM1117 3.3 LDO voltage regulator from LiPo battery.

Since here antenna size is not a problem, I've used half-wave dipole antenna made from steel wire and connected with U.FL pigtail to HC-12. Half-wave dipoles are very simple to build. You can use this tutorial for example.

Once again, if default serial speed of 9600bps is used, HC-12 does need any configuration. The same goes for HC-06 Bluetooth module, since it also uses 9600bps by default. But you might want to change Bluetooth device name and PIN. Just in case. I've showed how to do it in one of my previous posts.

HC-12 Temporary ground station

Flight controller setup

Configuration of any flight controller to use this setup is very simple. The only requirement is free UART port. More, it is protocol independent, so it can pass MSP, MAVLink, LTM or any other serial telemetry protocol. In case of Cleanflight / INAV and EZ-GUI one has to only enable MSP protocol in Ports tab in Configurator.


Important notice: Cleanflight and all its derivatives supports up to 2 UARTs with MSP protocol enabled. You can not enable third MSP port!

EZ-GUI setup

Since from EZ-GUI point of view, this is normal Bluetooth link, so no special configuration is required. There is only one catch: refresh rate of 100ms is too low for 9600bps and should be increased. I find it works well with values between 400 and 500ms. Data is polled from Cleanflight / INAV less often, but often enough for logging and flight parameter updates.

Step by step:

  1. Open settings, choose Bluetooth connection and pair HC-06 device with your phone ez-gui bluetooth
  2. Select proper firmware version. Betafligh and INAV should use Cleanflight setting ez-gui fc type
  3. Configure Refresh rate. Start with 500ms. ez-gui refresh rate


So, how does this telemetry link works? What is the effective range for a below $20 telemetry system? Better than I expected before I started. I wanted something with a range of 500m and this is what HC-12 documentation says about it: ~500m at 9600bps. Last weekend I've archived an effective range of 760m.


Probably this is the limit, since in a next flight link was broken at about 680m. Still,I'm happy.

19 thoughts to “DIY wireless telemetry link for UAV”

  1. This is a great post. Thanks.
    I would like to know more about possibility of using other Antena so that this solution is more portable.

  2. hi, does your EZGUI apk decode all the kinds of LTM frames? Mine doesnt, although they arrive perfect to my phone or laptop (tested with serial terminal apps). I only see attitude and GPS position.

  3. Great tutorial. Thanks to your guidance, I have setup a GPS 250 quad with iNav 1.8 and 433 MHz link to a GCS, exactly per your post. I am receiving data from the quad on EZGUI, however, when I try to send mission waypoints (using EZGUI), it doesn’t seem to transmit the data to the FC. RX-TX lines are crossed correctly. I am at 9600 baud via MPS. It appears I may only have 1-way communication at present. Any ideas would be very welcome.


      1. I am having the same problem. After testing with a serial terminal it seems that I can only send data in 1 direction. Which version do you use? Settings were completely untouched?

  4. Hi,

    I am using a betaflight F4 controller and am looking for a way to pick up the ESC telemetry data that is shown in the On Screen Display (ESC temp, ave rpm, battery voltage). I was told that I will need a Pixhawk (with a Sik Telemetry radio) to do this, but your post has given me some hope. The F4 has smart port audio and I believe I have a spare UART (RX2 and TX2)

    My goal is to end up with digital telemetry values, which may then be hosted online with a raspberry pi or laptop. I’m not concerned with any GPS values, or changing configurations mid flight – I just want a way to read in these values (not on my FPV video feed).

    Do you think the HC-12 could be used for that?

    1. I’m not sure any telemetry protocol sends such data in downlink. Maybe one can be extended… It’s not even hardware problem, but software

  5. So does Inav now support two mavlink meaning you can update waypoints while in flight instead of having to either land or wait for it to finish its first. Mission.
    I am under the impression that its a 1 way mavlink that only allows you to track the mission not alter it in flight via mavlink.
    Trying to find if this two has been added yet seems difficult. And I love inav GUI but withou a two way mavlink see little point when a 6 year old APM Will allow two way coms.
    Please catch up inav your price and ease of use over APM and Pixhawk make you very enticing to a newbe.

  6. This is great! As your using a Bluetooth device to connect to your phone, in theory you could use speedybee to tune and configure the quad ! The app wouldn’t know the difference

  7. Great post! I have really enjoyed your videos on YouTube, too.

    I’ve got the HC-12 on my iNav build(with MSP on the correct port), and a ground station with another HC-12 hooked up to an HM-10. All of the modules are on factory settings(since everything is 9600 baud default).

    I am trying to use MobileFlight on iOS, but I can’t seem to get MobileFlight to recognize the module even though it shows up as connected in settings. I can’t recognize the module from my Macbook, either. Any thoughts? Thanks!

Leave a Reply

Your email address will not be published.

This site uses Akismet to reduce spam. Learn how your comment data is processed.