Design of OpenVLC

The new OpenVLC1.3 takes advantage of the programmable real time units (PRU) included in the BBB. This,and the new receiver design allow us to increase the transmission frequency to 1 MHz and, thus, the communication rate. One cape can work as Transmitter (TX) or Receiver (RX).

OpenVLC1.3 cape plugged into the BBB

BBB board


If you have doubts and questions about these instructions, please leave your message in our Google group:!forum/openvlc

Once it’s plugged, connect the 5 V power supply and that’s all.
Be careful not to bend the components that stand out when you press or pull the cape.

​Setting up the TX/RX
There are two parts in the TX/RX, the kernel driver and the PRU code. Follow these steps: 

  • In order to load the kernel driver, run the following command inside the OpenVLC1.3 folder: sudo ./ With this script, you can change the IP taken by the interface. That’s the IP in the VLC network, so TX and RX must have different IPs (for example TX: and RX
  • ​Once the module driver is installed, go to PRU folder. Enter TX/RX and run sudo ./ This will boot up the PRUs with the code necessary to transmit and received VLC data.

Working with the TX/RX

Once you have done the steps above in TX and RX, you can start using VLC as a common network interface.

Here is an example of an iperf test at 2.5 meters of distance:​​



OpenVLC needs just a few components to work:

  1. BEAGLEBONE Black (BBB) Board (needs Rev C produced from 2017; you need to connect an external 5V power supply to the BBB): cost $ 45 - $ 60; AM3359 1 GHz, 4 timers, 65 GPIOs
  2. OpenVLC1.3 RevA cape:  the VLC front-end
  3. OpenVLC1.3 driver: software defined MAC and PHY layer (implemented as Linux driver) and firmware (to control the programmable real time units of the BBB (PRU))

The software solution is implemented as a Linux driver that can communicate directly with the cape and the Linux networking stack. In OpenVLC, the VLC interface is set up as a new communication interface that can take advantage of the vast range of Linux tools.

Experimental Setup

Creating the SD Card

We need to flash the BBB with a Debian image. To do that we need a SD Card with at least 4 GB. Follow these steps:

Flashing the BBB

Now that we have the SD Card ready with the image, we need to flash the BBB. Follow these steps:

  • With the power disconnected, insert the SD Card into the BBB and power it up with the USB cable.
  • Connect through SSH to the IP
  • In order to run the OS on the SD Card, flash it into the BBB: go to /opt/scripts/tools/eMMC and run sudo ./ 
  • Wait until the script of previous steps reports the following message: “eMMC has been flashed”. Once it finishes, disconnect the usb cable and with the BBB switched off, remove the SD Card.

Setting up the OS

The firsts steps are to prepare the beaglebone. This must be done in the OpenVLC board operating as TX as well as in the OpenVLC board operating as RX. These are the steps:

  • Disable the HDMI: The HDMI uses some PRU pins that we need. To disable the HDMI cape edit the uEnv.txt file: sudo nano /boot/uEnv.txt and uncomment the line: dtb=am335x-boneblack-emmc-overlay.dtb
  • Reboot the OpenVLC board. The HDMI is disable after rebooting.
  • Install the headers: Connect the beaglebone to the Internet, and then update with: sudo apt-get update
  • Then the board is ready to install the headers with: sudo apt-get install linux-headers-$(uname -r)
  • The code is in github at​​. In OpenVLC1.3_revA subdirectory you will find the kernel and PRU code folders. Just fetch them using git, and copy them into the path "/home/debian

Connecting the cape

Connecting the cape to the BBB is quite easy. You just need to plug the cape to the correct pins as shown in the image below: