3+km HD FPV system using commodity hardware


Over the last couple of months I have been working on a project that might be of interest to you: https://befinitiv.wordpress.com/wifibroadcast-analog-like-transmission-of-live-video-data/

Basically it is a digital transmission of video data that mimics the (advantageous) properties of an analog link. Although I use cheap WIFI dongles this is not one of the many "I took a raspberry and transmitted my video over WIFI"-projects.

The difference is that I use the cards in injection mode. This allows to send and receive arbitrary WIFI packets. What advantages does this give?

- No association: A receiver always receives data as long as he is in range

- Unidirectional data flow: Normal WIFI uses acknowledgement frames and thus requires a two-way communication channel. Using my project gives the possibility to have an asymmetrical link (->different antenna types for RX and TX)

- Error tolerant: Normal WIFI throws away erroneous frames although they could have contained usable data. My project uses every data it gets.

For FPV usage this means:

- No stalling image feeds as with the other WIFI FPV projects

- No risk of disassociation (which equals to blindness)

- Graceful degradation of camera image instead of stalling (or worse: disassociation) when you are getting out of range

The project is still beta but already usable. On the TX and RX side you can use any linux machine you like. I use on both sides Raspberrys which works just fine. I also ported the whole stack to Android. If I have bystanders I just give them my tablet for joining the FPV fun :)

Using this system I was able to archive a range of 3km without any antenna tracking stuff. At that distance there was still enough power for some more km. But my line of sight was limited to 3km...

In the end, what does it cost? Not much. You just need:

2x Raspberry A+

2x 8€ wifi dongles

1x Raspberry camera

1x Some kind of cheap display

Happy to hear your thoughts/rebuild reports :)

See you,


You need to be a member of diydrones to add comments!

Join diydrones

Email me when people reply –


    • awww nice, then I can get at least a battery meter on screen when I figure out how to read it into the pi from my naze32! :)

  • This will work with 5ghz.  However you'll have to perform an antenna mod for the 5ghz version of the tplink card to get decent range.  Surprisingly Alfa 5ghz to Alfa 5ghz does not work without crazy packet loss.  I'm seeing good results with 2.4ghz using diversity and expect to get similar results with 5ghz after performing the mod.  Right now I'm experiencing an average 140ms latency (measured using stopwatch).  Some people (perhaps with limited experience) say that this is not low enough for fpv racing.  However, in my experience I do not feel the lag at all.

    • Just saw Tobias' comment about the CSL 5ghz card. Is there anywhere that sells this card in the US? Also, does this work in monitor mode on Linux?
  • So, I finally got the TL-WN722N cards, and I got it to work. The problem for me initially was that the delay was huge, about 10 seconds... but I changed the script in tx, for raspivid I changed to -b 2000000, and then the delay was minimal, but I don't know how to test the exact delay amount...

    Now that I got it to work... the next thing that I want to do for it is add OSD, is that possible?

  • I just got it to work on 5Ghz


    TX: Pi2 with standard rpi camera module + http://www.amazon.co.uk/gp/product/B00PKABAI6?psc=1&redirect=tr...

    RX: Pi2 with HDMI to TFT + http://www.amazon.co.uk/gp/product/B00PKABAI6?psc=1&redirect=tr...

    I started with a clean raspbian image on both pis and then followed the instructions from befinitiv written up here: https://befinitiv.wordpress.com/wifibroadcast-analog-like-transmiss...

    To start tx and rx I used nicegraham's scripts from here: https://gist.github.com/nicegraham/b0b564173a100e206163

    I modified them to CHANNEL=$1 so I can pass the channel number as argument. E.g.: ./send.sh 36

    with sudo iw reg set GB I managed to get it to transmit and receive on channels 36 to 48. On channels 52 to 108 tx works, but rx doesn't. With reg set BO 52 to 62 tx works, rx not, on 149 to 165 tx&receive works. Channels 36 to 48 for GB setting are in the range from 5.18 to 5.24 GHz. ImmersionRC is from 5.74 to 5.86GHz. So using the legal GB channels 36 to 48 wifibroadcast should work fine even with other FPV flyers around.

    I am very happy to have it working on 5Ghz now so I can still use my Taranis and don't have to bother with openlrsng. I tested with my taranis right next to the groundpi and couldn't see any effect on the image quality. I also tried the dongle on the 2.4GHz channels. Wifibroadcast also worked but the image quality was much worse. On all the working 5GHz channels I found I had a crystal clear image. I noticed the quality was improved by having the two antennas at 90 deg to each other. I.e. one antenna -45 deg to horizontal and one +45deg. At the moment I used the rubber duckies that came with those dongles.

    befinitiv, do you think adding a second dongle on the rx would further improve things? These already have dual antennas. But maybe it would allow extra range? At <13 pounds I might try this out.

    • Hi,

      I'm stuck with the CSL, could you share the script you use to make it works over 5GHz please ?

      Thanks :)


    • Awesome, thanks for being the guinea pig Tobias :)  Do these work plugged straight into the raspberry?  There's a comment on the amazon page that says they have to plugged into a powered usb hub, which would make them difficult to use on a uav.

      Are they RP-SMA male or female connectors?  Ie do the gold connectors on the usb stick have a hole or a pin? (hoping/assuming pin, like most adaptors).

      • I already had two of these CSL dongles at home. I purchased them because they are cheap, dual band, and work out of the box on raspberry pi. That these dongles can be used for FPV is a plus. I tried them before buying the TL-WN722N adapters befinitv is using. Everything seems to work out of the box. Just plugged them into my pi and followed the guide from befinitiv here: https://befinitiv.wordpress.com/wifibroadcast-analog-like-transmiss...

        How good the CSL dongles are in terms of range remains to be seen. If I have time tonight I will mount the transmitting pi near my upstairs bedroom window and walk down the road with the receiving pi.

        I have also ordered one more dongle to see if having two of these on the receiver will help.

        I am using the new pi model 2. I have not noticed my pi crashing with wifibroadcast sending. The transmitting pi was powered from a USB cable from phone charger, the receiving pi was powered from a lipo via a 5V/5A UBEC (servo cable plugged into the GPIO pins, +5V on pin 1, GND on pin 3, like shown on the picture here: http://dev.ardupilot.com/wiki/companion-computers/raspberry-pi-via-...).

        Wifibroadcast – Analog-like transmission of live video data
        Wifibroadcast is a project aimed at the live transmission of HD video (and other) data using wifi radios. One prominent use case is to transmit camer…
      • OK sorry you can just see in one of the pictures it's female RP-SMA.  Great news, I can use all the bits I just ordered wrongly for the 722n adaptors :)

        If you could do a line of sight range test, that would be really cool.

    • Excellent work Tobias

This reply was deleted.


DIY Robocars via Twitter
RT @a1k0n: @DanielChiaJH @diyrobocars @circuitlaunch Here's my car's view of that race. About 8.4 second lap times for laps 2 and 3... both…
DIY Robocars via Twitter
RT @DanielChiaJH: Great racing against @a1k0n today at @diyrobocars! Pretty cool to both break sun-9s at the track today I think I got very…
DIY Robocars via Twitter
Broadcasting the @circuitlaunch race live now at https://m.twitch.tv/diyrobocars Races begin around 2:00pm PT
DIY Robocars via Twitter
RT @a1k0n: ran a huge number of hyperparameter tuning experiments yesterday; now I can train a new policy, far with better quality, in 15 m…
DIY Robocars via Twitter
RT @a1k0n: Did I get rid of hand-tuned parameters? Yes. Am I still hand-tuning more parameters? Also yes. I have a few knobs to address the…
Sep 26
DIY Robocars via Twitter
RT @a1k0n: I'm not going to spoil it, but (after charging the battery) this works way better than it has any right to. The car is now faste…
Sep 26
DIY Robocars via Twitter
RT @a1k0n: Decided to just see what happens if I run the sim-trained neural net on the car, with some safety rails around max throttle slew…
Sep 26
DIY Robocars via Twitter
Sep 24
DIY Robocars via Twitter
RT @SmallpixelCar: @a1k0n @diyrobocars I learned from this. This is my speed profile. Looks like I am too conservative on the right side of…
Sep 24
DIY Robocars via Twitter
RT @a1k0n: @SmallpixelCar @diyrobocars Dot color is speed; brighter is faster. Yeah, it has less room to explore in the tighter part, and t…
Sep 24
DIY Robocars via Twitter
RT @a1k0n: I'm gonna try to do proper offline reinforcement learning for @diyrobocars and throw away all my manual parameter tuning for the…
Sep 23
DIY Robocars via Twitter
RT @circuitlaunch: DIY Robocars & Brazilian BBQ - Sat 10/1. Our track combines hairpin curves with an intersection for max danger. Take tha…
Sep 22
DIY Robocars via Twitter
RT @SmallpixelCar: Had an great test today on @RAMS_RC_Club track. However the car starts to drift at 40mph. Some experts recommended to ch…
Sep 11
DIY Robocars via Twitter
RT @gclue_akira: 世界最速 チームtamiyaのaiカー https://t.co/1Qq2zOeftG
Sep 10
DIY Robocars via Twitter
RT @DanielChiaJH: Always a good time working on my @diyrobocars car at @circuitlaunch. Still got some work to do if I’m to beat @a1k0n howe…
Sep 10
DIY Robocars via Twitter
RT @SmallpixelCar: My new speed profile for @RAMS_RC_Club track https://t.co/RtLb7TcgIJ
Sep 10