2015-03-18 4 views
5

Я пытаюсь использовать GATT на своем Linux-ящике, чтобы настроить пользовательскую службу с нагрузкой характеристик.Bluetooth Low Energy in C - использование Bluez для создания сервера GATT

Используя this question, и те, с которыми он ссылается, я смог идентифицировать код, который мне нужно будет написать (используя функцию gatt_service_add()).

Я создал отдельный файл gatt_service.c и написал код, который, как мне кажется, мне нужен. Тем не менее, я не могу понять, как связать мой код с библиотеками Bluez, чтобы скомпилировать и запустить мое решение. Например, this site (хотя и не для разработки BLE) ссылки на libbluetooth, используя -lbluetooth как параметр gcc, и я не могу решить, с чем связать, чтобы заставить мой код работать.

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

Заранее спасибо.

EDIT - дополнительная информация:

После замечания, которые я использовал плагины/время в качестве основы, чтобы написать свой собственный файл для моей собственной «Вещательной службы». Полный код: here (я не знаю, какой бит кода поставить в ответ!).

Моя команда компиляции: gcc gatt_broadcaster_service.c -Wall -o gatt_broadcaster_service -lbluetooth 'pkg-config --cflags --libs glib-2.0' -I/home/alexander/Documents/bluez-5.29/lib (включая бит glib для исправления проблемы, о которой сообщалось here).

Ошибки я получаю: gatt_broadcaster_service.c: 11: 27: фатальная ошибка: Библиотека/bluetooth.h: Нет такого файла или каталога #include "Библиотека/bluetooth.h"

Мой файл C хранится в документах, и мое исследование говорит мне, что он не может найти lib/bluetooth.h, потому что он не ищет нужное место (this и this рассказывают об использовании флажков include для компилятора, когда файл отсутствует в общих местоположениях, но я не могу сделать эту работу.

Еще раз спасибо!

+0

'-lbluetooth' - это правильный способ связи с библиотекой bluetooth ... может быть, если вы разместите какие ошибки вы получаете, когда пытаетесь скомпилировать код, вам может помочь. –

+0

Возможно, вы включили '-lbluetooth' на этапе компиляции, а не в ссылку? –

+0

@TimTisdall - я редактировал свой вопрос, чтобы включить код, команду компиляции и ошибку, которую я получаю. Есть предположения? Благодаря! – Alex

ответ

11

я получил пример ГАТТ-сервер работает на BlueZ 5.31 (последняя в этой должности):

Моя среда:
Бродячей
Виртуальная коробка
Ubuntu Trusty Tahr как гостевая ОС (v. 14.04 32-битная ОС)
Обновлено до linux kernel 3.19
Установленные пакеты:
* libglib2.0-DEV
* libdbus-1-DEV
* libudev-DEV
* libical-DEV
* libreadline-DEV

Загруженные BlueZ 5,31 отсюда:. https://www.kernel.org/pub/linux/bluetooth/bluez-5.31.tar.xz
Установка обновленного ядра (ст 3,19):
Sudo APT-получить обновление
Sudo APT-получить установку --install рекомендует линукс-родовой-LTS-яркий

перезагрузки является необходимо. Я использую Vagrant и потерял доступ к общим папкам. Если это произойдет с вами, подождите, пока бродяга не сообщит об ошибке и все равно войдет в виртуальную машину (бродячий ssh). В виртуальной машине, выполните следующую команду, чтобы исправить общую проблему папку:
Судо /etc/init.d/vboxadd установки

Я снова перезагрузитесь (вероятно, не нужно), чтобы проверить, что общая папка активна еще раз.
После возвращения в VM, продолжить установку Bluez 5.31:
кд ~
Sudo APT-получить установку libglib2.0-DEV libdbus-1-DEV libudev-DEV libical-DEV libreadline-DEV
Wget https://www.kernel.org/pub/linux/bluetooth/bluez-5.31.tar.xz
деготь XVf BlueZ-5.31.tar.xz
кд Bluez-5,31
./configure prefix =/USR --mandir =/USR/доли/человек --sysconfdir =/и т.д. --localstatedir =/вар --disable-systemd --enable-experimental -enable-maintainer-mode

sudo make install
sudo cp attrib/gatttool/usr/bin

Установка завершена. Проверьте это следующим образом:
hciconfig
Вы должны получить ответ последующей (или что-то подобное):
hci0: Тип: BR/EDR Bus: USB
BD Адрес: 00: 1A: 7D: DA: 71: 0C ACL MTU: 310: 10 SCO MTU: 64: 8
ВНИЗ
RX байт: 15528 ACL: 126 SCO: 0 событий: 683 ошибки: 0
TX байт: 6459 ПКС: 146 SCO: 0 команд: 234 ошибок: 0

Настройте адаптер Bluetooth, запустите программу ertising, запустить пример сервера GATT (услуга сердечного ритма) с подробным включением (мой адаптер - hci0):
cd BlueZ 5.31 каталог
Судо инструментов/btmgmt -i hci0 отключения питания
Суды инструменты/btmgmt -i hci0 ль на
SUDO инструментов/btmgmt -i hci0 соединяемых на
Суды инструментами/btmgmt -i hci0 имя "товарищеского имя "
Суды инструменты/btmgmt -i hci0 рекламы на
SUDO инструментов/btmgmt -i hci0 питания на
инструментов/btgatt-сервер -i hci0 -s -t низкого общественного -r -v

Перейдите на другое устройство (я использую d iPod, Android - Samsung Galaxy 5S и планшет Nexus - и другой компьютер с BlueZ) и подключитесь к сервису. Вот как я сделал это на другом компьютере под управлением Bluez:
gatttool -b MAC-адрес сервера ГАТТ -I
подключить
первичные
характеристики

Вы можете выдавать другие команды для чтения и записи к серверу GATT.

Я также создал собственный сервер GATT (ваш первоначальный запрос), скопировав и отредактировав этот файл: tools/btgatt-server.c. Вы можете отредактировать файл Makefile.tools, чтобы включить свой собственный сервер в сборку. Вам нужно будет запустить automake, make и sudo make install, чтобы запустить его.

2

1) Гото папку Bluez

2) sudo./ configure --prefix =/usr --mandir =/usr/share/man --sysconfdir =/etc --localstatedir =/var --disable-systemd --enable-experimental --enable-supporter-mode

3) Судо сделать все

4) рекламы соединяемых пакетов

активировать Bluetooth

Судо hciconfig hci0 до

набора афишировать данные: "привет мир"

Sudo hcitool -i hci0 CMD 0x08 0x0008 48 45 4c 4c 4f 57 4f 52 4c 44

старт реклама как соединяемый

Sudo hciconfig hci0 leadv 0

5) Sudo службы Bluetooth остановки

6) Суда SRC/bluetoothd -d -n

7) С другого ПК, тип (сервер макинтош Change MAC ID GATT)

gatttool -b gatt_server_mac --interactive

шаг 6 для в случае, если вы хотите скомпилировать плагины/Gatt-example.c

если вы хотите скомпилировать server.c из профиля/время или Profle/предупреждение (заменить предупреждение вместо времени) или anyother файл в папке профиля заменить шаг 6

Суды SRC/bluetoothd --plugin = время -n

+0

Уход - спасибо. Что делать, если мне нужно создать свои собственные пользовательские характеристики или профили, а не использовать встроенные Bluez? – Alex

+0

Как напечатать значение обратного вызова записи в btgatt-server.c программе? – lucifer

1

Я создаю сервер времени, это хорошо для начала. профиль/время имеет хороший пользовательский пример, код очистки и пытается поддерживать минимальный код и работать с gatttool как client.If вы хотите как пользовательский клиент, так и настраиваемый сервер, чем вы можете видеть tools/btgatt-client.c и tools/btgatt-server.c.

Run инструментов/btgatt-server.c в одном ПК с Судо ./btgatt-server в одном компьютере

и Суда ./btgatt-client -d server_mac в другом компьютере

0

Забудьте о bluez для BTLE GATT-сервера. Используйте Bunget для Linux.

+0

Привет, пользователь2195463, у вас есть примеры использования bunget для малины Pi? Я ищу для реализации RPi как периферийного устройства. Благодаря! – dynex

+0

Да bunget в github, полный пример – user2195463

0

Я несколько раз приземлялся на этот вопрос в поисках автономного сервера GATT для C. Ответы здесь требуют создания вашего сервера GATT с помощью стека BlueZ. BlueZ добавила поддержку D-Bus для автономных серверов GATT и даже включает автономный образец GATT-сервера для Python, но не для C.

По-прежнему нужен сервер, я начал работать над одним с целью выпуска образца, но даже минимальная реализация - это еще больше кода, чем мне было бы удобно позвонить в образец.

Начальная реализация осуществляется в настоящее время и был выпущен под GPL-3:

https://github.com/nettlep/gobbledegook

Если это поможет кому-то, остудить. Если это помогает кому-то, кто выпустил код, который мне помог, еще лучше.