Вопрос или проблема
Как получить доступ к услугам Bluetooth
Странно, но я не могу найти ничего по этому поводу. Я пытаюсь получить доступ/читать/записывать Bluetooth-сервисы на своем устройстве. Я использую команду bluetoothctl
. Существует набор служб, которые отображаются с помощью команды info, и другой набор, который отображается в menu gatt
/list-attributes
.
info:
Устройство <someMACaddress> (публичное)
Имя: <somename>
Псевдоним: <somealias>
Спарено: да
Доверенное: да
Заблокировано: нет
Подключено: да
УстаревшееСопряжение: нет
UUID: Общий доступ к профилю (00001800-0000-1000-8000-00805f9b34fb)
UUID: Общий атрибутный профиль (00001801-0000-1000-8000-00805f9b34fb)
UUID: Информация об устройстве (0000180a-0000-1000-8000-00805f9b34fb)
UUID: Служба батареи (0000180f-0000-1000-8000-00805f9b34fb)
UUID: Устройство человека (00001812-0000-1000-8000-00805f9b34fb)
UUID: Специфично для производителя (3dda0001-957f-7d4a-34a6-74696673696d)
Ключ ManufacturerData: 0x<2bytekey>
Значение ManufacturerData:
<10bytehexvalue>
<10bytevalue>
Я могу получить доступ к gatt-службам, но не могу найти способ получить доступ к первому набору служб, указанному выше. Мне было интересно, есть ли какой-то способ? Похоже, что эти службы не являются GATT, но все мои поиски о чтении значений приводят к GATT. Например, когда я подключаю устройство к Android, лог hcisnoop показывает, что используется HID-обработчик 1812, когда я нажимаю кнопку на BLE-устройстве. Он также отображается как /dev/hidraw2.
Мне было интересно, могу ли я специально слушать обработчик 1812 или uuid для сырого ввода? Или другой обработчик, такой как 180a или 1801 и т.д…?
Я нашел наиболее подходящий ответ на свой вопрос на StackOverflow от OlivierM.
В основном, он утверждает, что некоторые специфические GATT-сервисы, такие как служба батареи, были перемещены в DBUS и могут быть доступны через DBUS. Пример этого решения также был дан: Могу сказать, что это сработало для меня, и я получил чтение.
- Подключитесь к вашему целевому BLE-устройству с помощью bluetoothctl
- А затем запросите DBUS:
dbus-send --print-reply=literal --system --dest=org.bluez /org/bluez/hci0/dev_<mac_address_of_your_ble_peripheral>
org.freedesktop.DBus.Properties.Get string:"org.bluez.Battery1"
string:"Percentage"
Ответ или решение
Чтобы получить доступ к Bluetooth-сервисам на устройстве, вам необходимо выполнить несколько шагов, используя команду bluetoothctl
, а также dbus-send
для взаимодействия с определёнными GATT-сервисами. Давайте подробно рассмотрим процесс.
Шаги по доступу к Bluetooth-сервисам
-
Убедитесь, что Bluetooth включен:
Убедитесь, что Bluetooth на вашем устройстве активирован. Если вы используете Linux, вы можете включить его командой:sudo systemctl start bluetooth
-
Запустите
bluetoothctl
:
Откройте терминал и введите:bluetoothctl
Это приведет к запуску командного интерфейса для работы с Bluetooth.
-
Подключитесь к устройству:
Найдите ваше устройство с помощью командыscan on
и подключитесь к нему, используяconnect <mac_address>
, заменив<mac_address>
на реальный MAC-адрес вашего Bluetooth-устройства. -
Получение информации о сервисах:
После подключения используйте команду:info <mac_address>
Эта команда выдаст вам перечень доступных сервисов, как вы уже заметили.
-
Доступ к GATT-сервисам:
Чтобы получить доступ к GATT-сервисам, используйте командыmenu gatt
, затемlist-attributes
. Это позволит вам увидеть UUID и другие атрибуты GATT, которые вы можете использовать для чтения или записи данных. - Использование D-Bus для доступа к службам:
Некоторые услуги, такие как служба батареи, могут быть доступны через D-Bus. Пример команды для получения уровня заряда батареи:dbus-send --print-reply=literal --system --dest=org.bluez /org/bluez/hci0/dev_<mac_address_of_your_ble_peripheral> org.freedesktop.DBus.Properties.Get string:"org.bluez.Battery1" string:"Percentage"
Не забудьте заменить
<mac_address_of_your_ble_peripheral>
на настоящий MAC-адрес вашего устройства.
Примечания:
-
HID и другие услуги: Если вас интересует доступ к информации об интерфейсах HID (Human Interface Device), такие как UUID 1812, вы можете обратиться к
/dev/hidraw
для получения необработанных данных ввода. Для этого может потребоваться использование дополнительных библиотек или утилит, таких какevtest
, для чтения событий от устройств ввода. -
Чтение и запись значений: Для чтения и записи значений через GATT-сервисы может потребоваться использование специализированных библиотек для работы с Bluetooth Low Energy (например,
bluepy
для Python). - Ресурсы для изучения: Рекомендуется ознакомиться с документацией по BlueZ и D-Bus для более глубокого понимания доступных возможностей и настройки соответствующих команд.
Если у вас возникнут дополнительные вопросы или трудности, не стесняйтесь их задавать.