Bluetooth WPAN tethering from Raspberry Pi

Most modern Raspberry Pi models have Bluetooth and 2.4 / 5 GHz 802.11ac WiFi built in. Other models of Raspberry Pi can use a USB / external dongle to add WiFi and/or Bluetooth. Raspberry Pi and many other embedded single board computers can connect to the internet via Bluetooth WPAN a.k.a. tethering or connection sharing. This method avoids tying up the WiFi connection of a phone, or putting sensitive WiFi credentials on an embedded device. This method inherently limits internet bandwidth to the embedded device to about 1.6 Mbps practical throughput due to the legacy Bluetooth WPAN specification.

The easiest way to do this is via NetworkManager in our opinion. NetworkManager helps make connecting to advanced networks easier. NetworkManager can be thought of as a front-end to wpa_supplicant. Via nmcli NetworkManager can be used from the command line. If you have a desktop environment on the embedded system, use that to pair with the phone or whatever is the WPAN internet sharer. Once you see it works (or if you don’t have a desktop environment), use nmcli to make the Bluetooth internet connection. You can make a script and startup cron job to make this a semi-permanent connection. The command to connect will use the internet host device Bluetooth UUID like:

nmcli device connect AA:BB:CC:DD:EE:FF

It’s also possible to configure USB tethering to the phone; I’ve done that via the NetworkManager GUI from the desktop environment.

Notes

nmcli examples