Ответ 1
Мне пришлось отключить плагин pnat
в /etc/bluetooth/main.conf
→ DisablePlugins=pnat
. Я читал, что он нестабилен, но я мало знаю об этом плагине.
Я пытаюсь подключиться к устройству 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 но это не сработало для меня.
Мне пришлось отключить плагин pnat
в /etc/bluetooth/main.conf
→ DisablePlugins=pnat
. Я читал, что он нестабилен, но я мало знаю об этом плагине.
Мне удалось подключиться через 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
По умолчанию GATT не включается. Добавьте приведенные ниже строки в /etc/bluetooth/main.conf
EnableLE = true // Enable Low Energy support. Default is false.
AttributeServer = true // Enable the GATT attribute server. Default is false.
Если вам все еще интересно, почему случайный работал. Я прошел через код и это то, что я нашел.
-t (Addr:Type: Set LE Address Type) Public | random Default: Public
Случайный или статический адрес - это 48-битный случайно сгенерированный адрес, который должен отвечать следующим требованиям:
• Два старших разряда статического адреса должны быть равны '1
• Все биты случайной части статического адреса не должны быть равны '1
• Все биты случайной части статического адреса не должны быть равны '0
(Источник)
Ошибка: соединение отказано. Я пытался различными способами, все еще получая ту же ошибку.
Исправлена проблема с отказом соединения (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
Вы можете попробовать использовать gatttool -b 00:22:D0:6D:E0:E6 -I
и затем подключиться, сразу после обнаружения MAC, не подключаясь ранее с hcitool lecc 00:22:D0:6D:E0:E6