Introduction: Install Bluetooth USB Radio Hardware in Linux System
Introduction
This instructable is based on my experience installing Bluetooth in a notebook and Raspberry Pi.
Target Readers
This instructable will mostly benefit Linux users, especially Debian and its deriviatives like Raspberry Pi running Raspbian OS.
System Environment
A notebook PC with the following specification:
- Intel® Core™2 Duo Processor
- Debian 7.4
- Bluetooth Radio Built-in
Raspberry Pi with the following specification:
- Model B
- Debian 7.6
- Bluetooth Radio USB Adaptor
- Mains-Powered USB Hub
Credits
The bluetooth protocol picture is copied from this website.
Step 1: Install Bluetooth Radio in the Linux System
On Raspberry Pi
Open terminal emulator
Type:
sudo tail -f /var/log/syslog<br>
Plugin Bluetooth Radio USB Adaptor into the USB hub connected to the Raspberry Pi.
The Linux system automatically detects and loads suitable kernel modules to interface with the Bluetooth Radio. It will output the following messages to /var/log./syslog in the terminal emulator window:
Jul 19 21:21:43 rpipro2 kernel: [348888.110797] usb 1-1.3.3: new full-speed USB device number 13 using dwc_otg
Jul 19 21:21:43 rpipro2 kernel: [348888.222799] usb 1-1.3.3: New USB device found, idVendor=0a12, idProduct=0001
Jul 19 21:21:43 rpipro2 kernel: [348888.222824] usb 1-1.3.3: New USB device strings: Mfr=0, Product=0, SerialNumber=0
Jul 19 21:21:43 rpipro2 kernel: [348888.297758] Bluetooth: Core ver 2.19
Jul 19 21:21:43 rpipro2 kernel: [348888.297884] NET: Registered protocol family 31
Jul 19 21:21:43 rpipro2 kernel: [348888.297896] Bluetooth: HCI device and connection manager initialized
Jul 19 21:21:43 rpipro2 kernel: [348888.297928] Bluetooth: HCI socket layer initialized
Jul 19 21:21:43 rpipro2 kernel: [348888.297945] Bluetooth: L2CAP socket layer initialized
Jul 19 21:21:43 rpipro2 kernel: [348888.297990] Bluetooth: SCO socket layer initialized
Jul 19 21:21:43 rpipro2 kernel: [348888.304784] usbcore: registered new interface driver btusb
Step 2: Check That the Bluetooth Radio Is Successfully Installed
Open a terminal emulator program like LXTerminal
List Bluetooth devices that the system has detected:
sudo lsusb -v | grep -i bluetooth
Output from Notebook:
Bus 007 Device 011: ID 044e:300d Alps Electric Co., Ltd Bluetooth Controller (ALPS/UGPZ6)
bDeviceProtocol 1 Bluetooth
idProduct 0x300d Bluetooth Controller (ALPS/UGPZ6)
bInterfaceProtocol 1 Bluetooth
bInterfaceProtocol 1 Bluetooth
bInterfaceProtocol 1 Bluetooth
bInterfaceProtocol 1 Bluetooth
bInterfaceProtocol 1 Bluetooth
bInterfaceProtocol 1 Bluetooth
bInterfaceProtocol 1 Bluetooth
Output from Raspberry Pi:
Bus 001 Device 006: ID 0a12:0001 Cambridge Silicon Radio, Ltd Bluetooth Dongle (HCI mode)
bDeviceProtocol 1 Bluetooth
idProduct 0x0001 Bluetooth Dongle (HCI mode)
bInterfaceProtocol 1 Bluetooth
bInterfaceProtocol 1 Bluetooth
bInterfaceProtocol 1 Bluetooth
bInterfaceProtocol 1 Bluetooth
bInterfaceProtocol 1 Bluetooth
bInterfaceProtocol 1 Bluetooth
bInterfaceProtocol 1 Bluetooth
Step 3: Install Bluetooth Middleware
Although the Linux system has detected and loaded the kernel modules (device drivers) to interface with the Bluetooth Radio, the Linux system is still unable to speak Bluetooth because there are no Bluetooth applications. In order to speak Bluetooth, the Linux system requires the Bluetooth protocol stack and applications.
Open terminal emulator like LXTerminal
sudo apt-get update
sudo apt-get install bluez sudo apt-cache show bluez
Output of PC
Package: bluez
Version: 4.99-2
Installed-Size: 2473
Maintainer: Debian Bluetooth Maintainers
Architecture: amd64
Replaces: bluez-audio (<= 3.36-3), bluez-input, bluez-network, bluez-serial, bluez-utils (<= 3.36-3), udev (<< 170-1)
Depends: libc6 (>= 2.9), libcap-ng0, libdbus-1-3 (>= 1.1.1), libglib2.0-0 (>= 2.28.0), libreadline6 (>= 6.0), libudev0 (>= 0.140), libusb-0.1-4 (>= 2:0.1.12), kmod, udev (>= 170-1), lsb-base, dbus, python-gi, python-dbus
Conflicts: bluez-audio (<= 3.36-3), bluez-utils (<= 3.36-3)
Breaks: udev (<< 170-1)
Description-en: Bluetooth tools and daemons
This package contains tools and system daemons for using Bluetooth devices.
.
BlueZ is the official Linux Bluetooth protocol stack. It is an Open Source
project distributed under GNU General Public License (GPL).
Output of Raspberry Pi
Package: bluez
Version: 4.99-2
Architecture: armhf
Maintainer: Debian Bluetooth Maintainers
Installed-Size: 2026
Depends: libc6 (>= 2.13-28), libcap-ng0, libdbus-1-3 (>= 1.1.1), libglib2.0-0 (>= 2.30.0), libreadline6 (>= 6.0), libudev0 (>= 0.140), libusb-0.1-4 (>= 2:0.1.12), kmod, udev (>= 170-1), lsb-base, dbus, python-gi, python-dbus
Conflicts: bluez-audio (<= 3.36-3), bluez-utils (<= 3.36-3)
Breaks: udev (<< 170-1)
Replaces: bluez-audio (<= 3.36-3), bluez-input, bluez-network, bluez-serial, bluez-utils (<= 3.36-3), udev (<< 170-1)
Multi-Arch: foreign
Homepage: http://www.bluez.org
Priority: optional
Section: admin
Filename: pool/main/b/bluez/bluez_4.99-2_armhf.deb
Size: 895456
SHA256: b96e78b7e18cfdf51f82e0bf9e67a08c627b21becbf19b6f79376841210e916c
SHA1: ebf58db06d1c0d82ce47ddd2d0d4fcfba82b2b1f
MD5sum: 414616015104fdf722f1bd14fdefa5f5
Description: Bluetooth tools and daemons
This package contains tools and system daemons for using Bluetooth devices.
.
BlueZ is the official Linux Bluetooth protocol stack. It is an Open Source
project distributed under GNU General Public License (GPL).
Step 4: Start Bluetooth Middleware Service
For Raspberry Pi running Raspbian based on Wheezy:
Open terminal emulator
sudo service bluetooth start
sudo service bluetooth status
Output of PC
[ ok ] bluetooth is running.
Output of Raspberry Pi
[ ok ] bluetooth is running.
If the above command did not work, try rebooting the RPi.
For Raspberry Pi running Raspbian based on Jessie:
Open terminal emulator
cd /etc/systemd/system/bluetooth.target.wants
Make backup
sudo cp bluetooth.service /home/$user/bluetooth.service.pristine
Change bluetooth.service setting:
sudo vi bluetooth.service
Refer to screenshot
sudo systemctl start bluetooth
Status
The notebook computer and Raspberry Pi is now a Bluetooth device
Step 5: Discover Name of Bluetooth Device Installed in the System
For Bluetooth device, Linux does not create a file in /dev directory. However, the bluetooth device is identified by some other means.
Use hciconfig software to find the identity of the bluetooth device.
Open terminal emulator
sudo hciconfig -a hci0
hci0: Type: BR/EDR Bus: USB
BD Address: 00:15:83:CE:77:03 ACL MTU: 310:10 SCO MTU: 64:8 UP RUNNING PSCAN RX bytes:3890 acl:0 sco:0 events:92 errors:0 TX bytes:1315 acl:0 sco:0 commands:81 errors:0 Features: 0xff 0xff 0x8f 0xfe 0xdb 0xff 0x5b 0x87 Packet type: DM1 DM3 DM5 DH1 DH3 DH5 HV1 HV2 HV3 Link policy: RSWITCH HOLD SNIFF PARK Link mode: SLAVE ACCEPT Name: 'rpipro2-0' Class: 0x420100 Service Classes: Networking, Telephony Device Class: Computer, Uncategorized HCI Version: 4.0 (0x6) Revision: 0x1d86 LMP Version: 4.0 (0x6) Subversion: 0x1d86 Manufacturer: Cambridge Silicon Radio (10)
The bluetooth device name is hci0.
UP RUNNING means it is ready to interface with other bluetooth device.