Skip to content

Wifibroadcast FPV manual setup

The following section assumes the use of Raspberry Pi’s running raspbian on both the tx and rx side with AR9271 wifi dongles (2.4GHz TP-LINK TL-WN722N for example).

Transmitter

As a first step you need to clone the wifibroadcast repository on your tx raspberry pi:

sudo apt-get install mercurial
hg clone https://bitbucket.org/befi/wifibroadcast

Next, you need to install a patched firmware for the wifi card that sets the data rate of the injected packets to 26mbit/s:

sudo cp wifibroadcast/patches/AR9271/firmware/htc_9271.fw /lib/firmware

Optinally, you can also patch the kernel driver to set the output power of the card to a fixed level as described here. This helps to increase the maximum range. By default, the kernel patch sets the cards power to 20dBm. But if your country and hardware allows you to use higher power you can adapt the max_power value inside the patch.

Now the wifibroadcast project needs to be compiled:

sudo apt-get install libpcap-dev iw
cd wifibroadcast
make

To transmit video into the air you need to put the wifi card into monitor mode and start the tx program:

sudo killall ifplugd #stop management of interface
sudo ifconfig wlan0 down
sudo iw dev wlan0 set monitor otherbss fcsfail
sudo ifconfig wlan0 up
sudo iwconfig wlan0 channel 13
raspivid -ih -t 0 -w 1280 -h 720 -fps 30 -b 4000000 -n -g 60 -pf high -o – | sudo ./tx -b 8 -r 4 -f 1024 wlan0

The LED of your wifi card should blink indicating that you are transmitting video data of your camera into the air.

Receiver

On the receiver side you also need wifibroadcast installed:

sudo apt-get install mercurial libpcap-dev iw
hg clone https://bitbucket.org/befi/wifibroadcast
cd wifibroadcast
make

Additionally, you need a program to decode and view the video stream:

cd $HOME
hg clone https://bitbucket.org/befi/hello_video
cp hello_video/video.c /opt/vc/src/hello_pi/hello_video
cd /opt/vc/src/hello_pi/
./rebuild.sh

Then you can go back to wifibroadcast and start the application:

cd $HOME/wifibroadcast
sudo killall ifplugd #stop management of interface
sudo ifconfig wlan0 down
sudo iw dev wlan0 set monitor otherbss fcsfail
sudo ifconfig wlan0 up
sudo iwconfig wlan0 channel 13
sudo ./rx -b 8 -r 4 -f 1024 wlan0 | /opt/vc/src/hello_pi/hello_video/hello_video.bin

And voilà, you have finished your wifibroadcast setup 🙂

You can also watch the stream on a normal GNU/Linux PC using gstreamer:

#setup of wifi card is identical to that of the PI (see above)
 sudo ./rx -b 8 -r 4 -f 1024 wlan0 | gst-launch-1.0 -v fdsrc ! h264parse ! avdec_h264 !  xvimagesink sync=false

Starting things automatically

Since you don’t want to type all these commands each time before you use wifibroadcast, scripts are provided for starting everything automatically.

Tx side

cd #go into home directory
hg clone https://bitbucket.org/befi/wifibroadcast_fpv_scripts
cd wifibroadcast_fpv_scripts
sudo cp init.d/wbctxd /etc/init.d
sudo update-rc.d wbctxd start

After a reboot the video transmission should start automatically. If you want to change the parameters of the transmission just edit the file “wifibroadcast_fpv_scripts/tx.sh”.

Rx side

Video reception

The basic setup is analogue to the tx side:

cd #go into home directory
hg clone https://bitbucket.org/befi/wifibroadcast_fpv_scripts
cd wifibroadcast_fpv_scripts
sudo cp init.d/wbcrxd /etc/init.d
sudo update-rc.d wbcrxd start

Again, the parameters of wifibroadcast are found in the file “wifibroadcast_fpv_scripts/rx.sh”

The rx.sh script gathers all wifi sticks connected to your Raspberry and uses them for diversity reception (to increase diversity just plug more sticks into the PI). However, there are two things to note: First, the script puts all wifi sticks into monitor mode. So if you use one wifi stick for connection to you wifi network (to get ssh access for example) this script will cut your connection. You can avoid this by listing all wifi devices explicitly in rx.sh NICS variable. The second thing to note is that each wifi sticks adds usb traffic to the PI. You have to test how much traffic it can handle (depends on the video data rate and redundancy settings). Tests have shown that the PI2 can handle much more traffic than its predecessors.

Video recording

The Rx PI can automatically record video data onto a USB-stick. To enable this feature, you need to install the usbmount tool:

sudo apt-get install usbmount

To get decent write speeds you need to remove the “sync” option in the file “/etc/usbmount/usbmount.conf”.

Now connect the USB-stick and create the required directory:

mkdir /media/usb0/video

If you now reboot, the received video will be recorded. Recording is disabled automatically if you boot without USB-stick or with a stick without the “video” directory.

The videos are saved in a raw h264 format. To convert them so that they are compatible with VLC or Youtube, you can use a helper script also provided in the repository. This should be done on your PC instead of the Raspberry.

Prerequisites:

sudo apt-get install avconv 
hg clone https://bitbucket.org/befi/wifibroadcast_fpv_scripts
cd wifibroadcast_fpv_scripts/utils

To convert the raw video “0.rawvid” int the file “0.avi”:

./h264encaps 48 /tmp/0.rawvid /tmp/0.avi

Clean shutdown

Especially if you are recording video you want to have a clean shutdown where all the data gets written properly to your disks.
A simple way to do so is to connect a pushbutton with one leg to the raspberry GPIO pin header #22 (which is gpio no. 25) and the other leg to 3.3V and also a resistor > 1k between the GPIO and GND. Then you can install the following scripts from the repository:

cd #go into home directory
cd wifibroadcast_fpv_scripts
sudo cp init.d/shutdown /etc/init.d
sudo update-rc.d shutdown start

Now a button press for at least a second should bring the system to halt and you can safely remove the power.