Невозможно подключиться к устройству BLE на малине Pi

Я пытаюсь подключиться к устройству BLE (датчик сердечного ритма, Polar H7) на Raspberry Pi 2. Я использую последнюю версию bluez (5.35), найденную здесь: http://www.bluez.org/download/ Но когда я пытаюсь подключиться, используя gatttool, у меня всегда появляется ошибка "Отказ в соединении".

Вот что я делаю:

[email protected] ~ $ sudo su
[email protected]:/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

[email protected]:/home/pi# hciconfig dev up
[email protected]:/home/pi# hcitool lescan
LE Scan ...
00:22:D0:6D:E0:E6 (unknown)
00:22:D0:6D:E0:E6 Polar H7 6DE0E61C
^[email protected]:/home/pi# hcitool lecc 00:22:D0:6D:E0:E6
Connection handle 64
[email protected]:/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]> 

Я пытался следовать этой теме: BLE gatttool не может подключиться, даже если устройство обнаруживается с помощью hcitool lescan но это не сработало для меня.

Ответ 1

Мне пришлось отключить плагин pnat в /etc/bluetooth/main.confDisablePlugins=pnat. Я читал, что он нестабилен, но я мало знаю об этом плагине.

Ответ 2

Мне удалось подключиться через Bluetooth из Raspberry к моему устройству Android, установив для LE address type значение random с помощью аргумента -t random, т.е.

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

От gatttool мужчина

--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

Ответ 3

По умолчанию GATT не включается. Добавьте приведенные ниже строки в /etc/bluetooth/main.conf

EnableLE = true           // Enable Low Energy support. Default is false.
AttributeServer = true    // Enable the GATT attribute server. Default is false.

Ответ 4

Если вам все еще интересно, почему случайный работал. Я прошел через код и это то, что я нашел.

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

Случайный или статический адрес - это 48-битный случайно сгенерированный адрес, который должен отвечать следующим требованиям:

• Два старших разряда статического адреса должны быть равны '1

• Все биты случайной части статического адреса не должны быть равны '1

• Все биты случайной части статического адреса не должны быть равны '0

(Источник)

Ответ 6

Исправлена проблема с отказом соединения (111) в моем raspberry pi 3B с запущенным raspbian buster путем обновления/установки BlueZ через apt-get

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

и снова работает

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

Ответ 7

Вы можете попробовать использовать gatttool -b 00:22:D0:6D:E0:E6 -I и затем подключиться, сразу после обнаружения MAC, не подключаясь ранее с hcitool lecc 00:22:D0:6D:E0:E6