19

I'm trying to connect to a BLE device (Heart rate sensor, Polar H7), on a Raspberry Pi 2. I use the last version of bluez (5.35) found here: http://www.bluez.org/download/ But when I'm trying to connect using gatttool, I always have "connection refused" error.

Here is what I do :

pi@raspberrypi ~ $ sudo su
root@raspberrypi:/home/pi# hciconfig dev
hci0:   Type: BR/EDR  Bus: USB
        BD Address: 5C:F3:70:69:54:3D  ACL MTU: 1021:8 SCO MTU: 64:1
        DOWN
        RX bytes:616 acl:0 sco:0 events:34 errors:0
        TX bytes:380 acl:0 sco:0 commands:34 errors:0

root@raspberrypi:/home/pi# hciconfig dev up
root@raspberrypi:/home/pi# hcitool lescan
LE Scan ...
00:22:D0:6D:E0:E6 (unknown)
00:22:D0:6D:E0:E6 Polar H7 6DE0E61C
^Croot@raspberrypi:/home/pi# hcitool lecc 00:22:D0:6D:E0:E6
Connection handle 64
root@raspberrypi:/home/pi# gatttool -b 00:22:D0:6D:E0:E6 -I
[00:22:D0:6D:E0:E6][LE]> connect
Attempting to connect to 00:22:D0:6D:E0:E6
Error connect: Connection refused (111)
[00:22:D0:6D:E0:E6][LE]> 

I tried to follow this topic: BLE gatttool cannot connect even though device is discoverable with hcitool lescan but it did not work for me.

Community
  • 1
  • 1
palador
  • 273
  • 2
  • 3
  • 11

7 Answers7

41

I was able to connect via Bluetooth from Raspberry to my Android device using gatttool after setting the LE address type to random with the -t random argument, i.e. :

sudo gatttool -t random -b DD:9D:0B:43:A1:77 -I
connect

From gatttool man

--t, ---addr-type=[public | random] 
# Set LE address type. Default: public

USAGE gatttool [OPTION...]

 Help Options:
     -h, --help                                  Show help options
     -h, --help                                  Show help options
     --help-all                                  Show all help options
     --help-gatt                                 Show all GATT commands
     --help-params                               Show  all  Primary  Services/Characteristics
   arguments
     --help-char-read-write                       Show  all  Characteristics Value/Descriptor
   Read/Write arguments

   Application Options:
     --i, ---adapter=hciX                        Specify local adapter interface
     --b, ---device=MAC                          Specify remote Bluetooth address
     --t, ---addr-type=[public | random]         Set LE address type. Default: public
     --m, ---mtu=MTU                             Specify the MTU size
     --p, ---psm=PSM                             Specify the PSM for GATT/ATT over BR/EDR
     --l, ---sec-level=[low | medium | high]     Set security level. Default: low
     --I, ---interactive                         Use interactive mode
Pedro Lobito
  • 94,083
  • 31
  • 258
  • 268
  • What if someone did all of the things in this post? Turning on BLE, using -t random and the connection is still refused? Asking for a friend. – Panossa Jun 21 '22 at 08:44
5

By default GATT is not enable. Add the below lines to /etc/bluetooth/main.conf

EnableLE = true           // Enable Low Energy support. Default is false.
AttributeServer = true    // Enable the GATT attribute server. Default is false.
Robert
  • 5,278
  • 43
  • 65
  • 115
Hoang Lam
  • 59
  • 1
  • 3
2

I got it running with:

btmgmt le on
Jeremy Caney
  • 7,102
  • 69
  • 48
  • 77
Klaus
  • 31
  • 1
1

Fixed the connection refused (111) issue in my raspberry pi 3B running raspbian buster by Updating/installing BlueZ via apt-get

> sudo apt-get install --no-install-recommends bluetooth

and re running

> sudo gatttool -t random -b E9:1C:89:B7:16:F9 -I

0

I had to disable the plugin pnat in /etc/bluetooth/main.conf -> DisablePlugins=pnat. I read that it's unstable, but I don't know much about this plugin.

Christian Ternus
  • 8,406
  • 24
  • 39
Teepeemm
  • 4,331
  • 5
  • 35
  • 58
  • Good grief, this is the most underrated answer ever! This solved every problem I had on a Raspbian system, after days of other attempts. – Andrea Lazzarotto Jul 20 '22 at 23:16
0

If you are still wondering why the random worked. I have gone through the code and this what I found.

​-t ​(Addr:Type: Set LE Address Type)     
Public | random    
Default: Public

A random or static address is a 48-bit randomly generated address and shall meet the following requirements:

• The two most significant bits of the static address shall be equal to ‘1’

• All bits of the random part of the static address shall not be equal to ‘1’

• All bits of the random part of the static address shall not be equal to ‘0’

(Source)

Stephen Rauch
  • 47,830
  • 31
  • 106
  • 135
ArmCoder
  • 9
  • 2
-1

You could try to use gatttool -b 00:22:D0:6D:E0:E6 -I and then connect, just after discovering the MAC without connecting before with hcitool lecc 00:22:D0:6D:E0:E6

ascripter
  • 5,665
  • 12
  • 45
  • 68
keebOo
  • 83
  • 2
  • 10