2016-02-14 6 views
4

У меня есть устройство с несколькими пользовательскими службами GATT, и я хотел бы написать программу Linux для взаимодействия с ней. После некоторых поисков я узнал, что Linux использует BlueZ для обработки протокола Bluetooth LE. Я использую Ubuntu 15.10 с BlueZ 5.35, но я не могу понять, как использовать этот BlueZ из программы пользовательского пространства. Я не могу найти документацию по API где-нибудь, нет учебников, примеров, ничего. Возможно ли использовать этот стек BlueZ для чего-то другого, кроме как просто подключения к устройствам Bluetooth со службами по умолчанию? И если да, то где документация? (Предпочтительно, C/C++ API, но в этот момент все идет)Bluetooth Low-Enery в Linux API

+0

Да, это возможно. Но есть кривая обучения. BlueIS APIS задокументированы в [синем дереве] (https://github.com/r10r/bluez/blob/master/doc/). Это все API-интерфейсы DBUS. Поэтому, чтобы использовать их, вам сначала нужно немного узнать о DBUS. Существуют различные привязки для использования DBUS. К ним относятся python, Glib и QT. Есть и другие. – kaylum

ответ

3

Возможно, было бы проще и быстрее написать сценарий оболочки для Linux, чтобы сделать то, что вам нужно. Команды BlueZ относительно просты и понятны, и есть много учебников и вопросов о том, как их использовать.

Учебники: -

http://www.jaredwolff.com/blog/get-started-with-bluetooth-low-energy/ https://learn.adafruit.com/reverse-engineering-a-bluetooth-low-energy-light-bulb/control-with-bluez https://lilyhack.wordpress.com/2014/02/03/ble-read-write-arduino-raspberry-pi/ http://joost.damad.be/2013/08/experiments-with-bluetooth-low-energy.html

Вопросы: -

Как только вы более знакомы с использованием команд вручную, вы можете написать минимальный сценарий оболочки, чтобы он был автоматизирован для вас.

+1

Я использовал много этих команд для проверки возможностей BlueZ, и у него есть функции, которые мне нужны. Но мне нужно создать нечто более сложное, чем скрипт оболочки. – UnTraDe

0

У меня была аналогичная проблема, которая должна взаимодействовать с устройством BLE с помощью API GATT C/C++. Я понял, что такого API не существует. Как я исправился, проблема заключалась в том, чтобы написать мою собственную библиотеку GATT. Я нажал код на Github: https://github.com/labapart/gattlib

Я использую эту библиотеку в своем собственном проекте BLE, и это соответствует моим потребностям. Я создал несколько примеров https://github.com/labapart/gattlib/tree/master/examples, которые используют библиотеку, чтобы побуждать людей использовать ее и получать лучшую обратную связь.

3

Посмотрите на attrib/gatttool.c в источниках bluez [1]. Gatttool - это утилита командной строки для подключения к устройствам BTLE с использованием C "API". Однако интерфейс GATT не отображается в libbluetooth. Более новая альтернатива gatttool и, следовательно, еще один пример для изучения - это btgatt-клиент, который вы можете найти в tools/btgatt-client.c (чтобы включить компиляцию configure bluez с --enable-experimental). Кроме того, интерфейс C bluez интегрировал интерфейс DBUS. bluetoothctl - это пример инструмента, использующего интерфейс DBUS. Код bluetoothctl можно найти в client/ [2]. Другой пример программы, использующей C-интерфейс bluez, - это SDK Anki Drive [3]. Он упаковал синий интерфейс GATT C в свою собственную библиотеку libbzle [4]. При использовании интерфейса C вам необходимо подключить сокет при установлении соединения BTLE. Gatttool делает это через интерфейс GATT, который, в свою очередь, использует glib iirc. Но вы также можете сделать это, используя syscalls (сокет, connect, ...), как объяснено, например. здесь [5]. В этом документе также объясняется:

К сожалению, на данный момент нет официальной ссылки на API для ссылки, поэтому более любопытным читателям рекомендуется загрузить и изучить исходный код BlueZ.

Гилберт Brault также извлек интерфейс ГАТТ от Bluez [6] и ссылок на рудиментарный Doxygen документацию интерфейса ГАТТ [7] со следующей оговоркой:

Это работа выполняется с цель документирования всех важных функций и структур данных

Также Шимон Джанк дал хороший обзор в своем разговоре «Bluetooth на современной Linux» на конференции Linux встраиваемых Linux 2016 [8]. Начиная с 42:00 он рассказывает о неэкспонированном интерфейсе C. Но в целом он, кажется, рекомендует API DBUS (см. «Подсказки» в 45:30). Некоторая документация DBUS может быть найдена в doc/gatt-api.txt [9], а примеры Python с использованием интерфейса DBUS можно найти в test/.

Надеюсь, это поможет.

[1] http://git.kernel.org/cgit/bluetooth/bluez.git/tree/attrib/gatttool.c
[2] http://git.kernel.org/cgit/bluetooth/bluez.git/tree/client/
[3] https://github.com/anki/drive-sdk/
[4] https://github.com/anki/drive-sdk/tree/master/deps/bzle/
[5] https://people.csail.mit.edu/albert/bluez-intro/c404.html
[6] https://github.com/gbrault/gattclient
[7] http://gbrault.github.io/gattclient/index.html
[8] https://www.youtube.com/watch?v=tclS9arLFzk
[9] http://git.kernel.org/cgit/bluetooth/bluez.git/tree/doc/gatt-api.txt

 Смежные вопросы

  • Нет связанных вопросов^_^