Raspberry Pi Blog - Abandoned Since 2015
  • Home
  • Raspbian
    • Installation
    • Adjustments
  • Guides
    • DNS resolver
    • VNC server
    • Plotting graphs
    • Streaming with VLC
    • VOD with VLC
    • Stream announcements
    • Samba shares
    • NTP client and server
    • DynDNS client
    • No-IP client
    • Bluetooth
    • Internet via GPRS/EDGE/3G/HSPA
    • OpenSSH server
    • XMPP/Jabber server
    • CryptoCat messaging service
    • Converse.js XMPP/Jabber client
  • GPIO
    • Setup GPIO
    • LEDs and buttons
    • Thermal sensor (1Wire)
    • Thermal sensor (I2C)
    • UART to RS-232
  • Case
  • Arduino
  • Contact
  • Sitemap

Bluetooth dongle and Raspberry Pi


I found one old bluetooth dongle in my drawer from time when it was the only way to get files from or to my Siemens mobile :) So I decided to try to plug it into RPi. It works, even it is bought from dx.com for 1$ many years ago.
Bluetooth dongle
Bluetooth dongle
My intention was to make RPi accept files that I send from my mobile or any bluetooth capable device. At first install required packages...
apt-get install bluetooth bluez
After successful installation, connect your bluetooth dongle and list USB devices.
lsusb
You should see dongle in statement like this:
Bus 001 Device 002: ID 0424:9512 Standard Microsystems Corp.
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 001 Device 003: ID 0424:ec00 Standard Microsystems Corp.
Bus 001 Device 005: ID 0a12:0001 Cambridge Silicon Radio, Ltd Bluetooth Dongle (HCI mode)
Now, when you are sure your device is recognized, list bluetooth devices.
hcitool dev
You will get output with adapter name and its MAC address:
Devices:
        hci0    00:15:83:xx:xx:xx
If you want detailed information about hci device, use this command:
hciconfig -a
I use this command because in output I can see how many bytes was transmitter and received.
hci0:   Type: BR/EDR  Bus: USB
        BD Address: 00:15:83:xx:xx:xx  ACL MTU: 672:3  SCO MTU: 128:2
        UP RUNNING PSCAN
        RX bytes:914 acl:0 sco:0 events:30 errors:0
        TX bytes:360 acl:0 sco:0 commands:23 errors:0
        Features: 0xff 0x3e 0x85 0x30 0x18 0x18 0x00 0x00
        Packet type: DM1 DM3 DM5 DH1 DH3 DH5 HV1 HV2 HV3
        Link policy: RSWITCH HOLD SNIFF
        Link mode: SLAVE ACCEPT
        Name: ''
        Class: 0x000208
        Service Classes: Unspecified
        Device Class: Phone, Cordless
        HCI Version: 2.0 (0x3)  Revision: 0xc5c
        LMP Version: 2.0 (0x3)  Subversion: 0xc5c
        Manufacturer: Cambridge Silicon Radio (10)

Now you can try to scan for devices in the area.
hcitool scan
And it finds my phone...
Scanning ...
        64:99:5D:xx:xx:xx       tomas-phone
Of course your device have to be discoverable. But how to make RPi discoverable when some user is scanning for it?
hciconfig hci0 piscan
If you reissue "hciconfig -a" you will see added flag ISCAN - which means device is discoverable. I tried to discover new devices in my mobile phone and...
Android finds RPi
Android finds RPi
Next step will be pairing. When 2 devices want to communicate via bluetooth, have to be "introduced" at first (enter same PIN on both devices). First, set PIN on RPi with:
bluetooth-agent 4554
Bluetooth agent will not stop. Now you can initiate pairing from mobile...
Android pairing with RPi
Android pairing with RPi
During pairing attemp, bluetooth-agent will print notification...
Pincode request for device /org/bluez/2061/hci0/dev_64_99_5D_xx_xx_xx
Enter PIN and "OK", Now devices should be paired and able to communicate with each other.
Android successfuly paired with RPi
Android successfuly paired with RPi
After successful pairing, you can stop bluetooth-agent with Ctrl+C. Now when devices are paired, you can try to ping them.
l2ping -i hci0 64:99:5D:xx:xx:xx
Change address in black bold to your device`s MAC address. It can be found in output of "hcitool scan"
Ping: 64:99:5D:xx:xx:xx from 00:15:83:xx:xx:xx (data size 44) ...
44 bytes from 64:99:5D:xx:xx:xx id 0 time 18.01ms
44 bytes from 64:99:5D:xx:xx:xx id 1 time 34.66ms
44 bytes from 64:99:5D:xx:xx:xx id 2 time 17.65ms
44 bytes from 64:99:5D:xx:xx:xx id 3 time 31.80ms
44 bytes from 64:99:5D:xx:xx:xx id 4 time 14.95ms
5 sent, 5 received, 0% loss
Now when we are sure devices can talk to each other, you can make RPi to automaticaly accept files transmitted.
obexpushd -B -o /root/bluetooth
Tried to transmit a file, and success...
Succesfully transmitter file to RPi
Succesfully transmitter file to RPi
Address in black bold is destination, where files will be stored. My RPi bluetooth dongle is always visible, but if you want to hide it, after successful pairing, you can make RPi invisible again by issuing:
hciconfig hci0 noscan
Of course, all of this can be available from start. Edit crontab...
crontab -e
And add following lines.
@reboot sudo -u root hciconfig hci0 piscan            #make RPi discoverable
@reboot sudo -u root obexpushd -B -o /root/bluetooth  #accept files from paired devices and save to /root/bluetooth
@reboot sudo -u root bluetooth-agent 4554 &           #set PIN for pairing
Edit statements in black bold. Now close file (CTRL+X...) and save changes (...press "y" and Enter). Reboot and try if all is working from start.
Create a free web site with Weebly