ESPnow Telemetry RC

ESPnow Telemetry RC

I’ve never been really satisfied with the available remote control solutions. You always have one link/frequency for remote control and then depending on your usecase one or two more for telemetry and/or video. This was something I always really appreciated about my DJI drones, I only need one device and one data connection. Whilst there are some options out there, commercially and diy, they are all pretty expensive for my taste.

A step in the right direction for me was the upgrade to a Jumper T16 in combination with Yaapu telemetry. Finally I could see all the messages from the drone on my remote control. But one thing that still annoyed me was the fact that I couldn’t connect a phone or laptop and have MissionPlanner or QGroundControl running via the same datalink.

I don’t know how and why but someday I stumbled across @Eric_Stockenstrom’s MavToPass software and thought to myself it would be cool if I could intergrate the transmission directly into the MavToPass software. A few weeks later I came across @Yuri_Rage’s ESPnow Serial Bridge. And then it hit me, I have both parts and I “just” need to combine them. And that’s exactly what I did. So a great thank you to the two guys mentioned above, most of the work was done by them and I couldn’t have done it without them.

The result

The result is what I call the ESPnow Telemetry RC, since it is a standalone JR module you can plug into the back of your transmitter and just fly as normal while monitoring all your data with the Yaapu telemetry plugin. But if you want more information about the vehicle, use guided mode or something else, you can just connect your mobile phone to the transmitter and have a full GCS up and running, without another telemetry module on your drone. And since the ESP is quite cheap, you can get all this for less than 20 bucks.

So what did I change/add?

The biggest change was to add another telemetry source to the MavToPass software, the input via ESPnow. The receiver on the drone is just the ESPnow Serial Bridge. So with this change it became a telemetry radio but the remote control part was still missing. I solved this by implementing a PPM input in the MavToPass software and just sending this data to the drone on the existing telemetry link with the RC_Override message. So as you can see, my changes are minimal in comparison to what has been done by other people.

Sounds cool, I want to try it myself!

First of all I’m flattered that you are interested in what I did. The code is available on github for you to check out, use and modify. I wrote some information on github on how you can set it up and what to look out for. GitHub - Vabe7/ESPnow-Telemetry-RC: A RC and telemetry solution based on ESPnow But also here I wan’t to point out that this isn’t a well tested software, so you use it at your own risk!

For the receiver I suggest that you head over to the repository of the serial bridge to find possible hardware options: GitHub - yuri-rage/ESP-Now-Serial-Bridge
I personally ported the code to an ESP8266 since I only had one ESP32 available when I started testing, I’m working to get this changes into the repository.

For the JR module I used an ESP32-WROOM-32U module to have an external antenna and as casing I modified the cover of this QLRS JR box V4 LRS by qlrs - Thingiverse to fit my standard SMA connector.

Further steps

To be honest I’m not sure if I will pursue this project any further, since I’m mostly interested in a proof of concept and since I controlled my drone today with it, I’ve reached this point. I have some ideas on how to improve it, but I’m not sure if I’ll find the motivation and time for it. The idea is here and I’ve proven that it works, maybe I’ll pursue it further, maybe not.
But here are my ideas what could be done in the future:

  • Binding procedure and multiple receivers: Right now it is only possible to connect to one receiver through putting in the MAC-address while compiling the program. Ideally there would be a binding procedure and a model storage with some way to choose a specific receiver.
  • PPM input implementation: Whilst it works my solution for the PPM input leaves much to be desired. It creates latency since it only sends away a package if the next has already started to arrive and PPM isn’t the best protocol anyways.
  • Adding RC output on receiver: Right now the control signal gets transmitted to the flight controller through the RC_Override message, in the future this could be done with an extra SBUS or PPM output on the receiver.
  • Prioritize control over telemetry: Right now the RC_Overrride message just gets added to the send buffer and gets send when everything before it has been sent. Ideally a control signal would always be sent directly.

Also I’m not sure on how I want this project to live further. As a part of MavToPass since it’s the same thing just with the added ESPnow input and PPM input, or as a new project since it drastically changes the usage of the software and is also not compatible with most of the hardware supported by MavToPass and also some software options (you can read a bit more about this on github).

So thank you for your interest in my project and fly safe;)


very cool, most opentx radios can do sbus output, it might be a better option than ppm for input to the radio module. il try and get a test rig setup soon, im currently using another espnow RC system but it doesnt have working passthrough.

Yeah, and to be honest I’m totally aware of it, but as I said it was mostly a prove of concept and to be honest, PPM just was the easiest tutorial I found, that’s why I choose it…

Looking forward to hearing what you think about it!

1 Like

I have your software installed on my tx module but i didnt realise yuris esp bridge was only for esp32 and not 8266 so im waiting for another esp32 board to arrive before I can test it.

I was thinking, could this be set to use an external telemetry module like a lora radio instead of esp-now? I know mav2pass lets you select where to send the telemetry. so would it send the rc injection along with it if I set it to use the serial port connected to something like a 433mhz sik telemtry radio rather than esp now as the uplink?

Yes, absolutely. That is the original idea from MavToPass just without the PPM input. So if you find a LORA serial bridge you should be able. It should even be possible to just change the serial input my program configuration.

And about the ESP32, I can send you an ESP bridge version for the ESP8266.

1 Like

Can you link me the 8266 version please?

@Vabe I have an interesting problem and i think your software might be able to fix it.

Have you ever used Andruav? it basically lets you control mavlink vehicles over 4G using a phone, you can use the phones camera for video and it does telemetry and RC all in one.

The problem I have is that the ground station app only lets you use touch screen controls, there is no way to interface a radio to it making it rather difficult to use, but I remembered that your program can inject rc into the mavlink stream and it already has wifi.

so can i set your esp32 to connect to a tcp port as a wifi client as its uplink ? that way it could be switched between sending rc over 4g or using esp now for short range. I dont need to be able to hot switch or anything like that.

So I guess that you would connect to an existing wifi hotspot?

I think your idea could work, essentially you want to add the RC input function to MavToPass. My project does this, but sadly in your case, it also adds ESP-Now. And to avoid problems with ESP-Now I took out the option to connect to an existing access point (since ESP-Now always requires you to be on the same wifi channel).

So I thin that your best starting point would be to port my RC input code to MavToPass. Essentially this are two functions at the end of my main.cpp, namely handle_PPM_interrupt and send_RC_Inputs. Of course you would still have to add the missing forward declarations, attach the interrupt and define some variables but if you add these two functions and get it to compile it should work…

1 Like

@Vabe, nice work on this project, and some interesting discussions. Unfortunately I’m deeply involved in another project right now, and also travelling again until December. Nevertheless if I can help with anything I’ll try to get back to you.