Bluetooth Low Energy in C-использование Bluez для создания сервера GATT

Я пытаюсь использовать GATT на моем Linux box, чтобы настроить пользовательскую службу с нагрузкой характеристик.

используя этот вопрос, и те, на которые он ссылается, я смог определить код, который мне нужно будет написать (используя ).

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

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

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

изменить - больше информация:

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

моя команда компиляции: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 для исправления проблемы, сообщенной здесь).

ошибка, которую я получаю: gatt_broadcaster_service.c: 11: 27: фатальная ошибка: lib / bluetooth.ч: нет такого файла или каталога #включить " lib / bluetooth.h"

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

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

5 ответов


Я получил пример сервера GATT, работающего для BlueZ 5.31 (последний на данный момент):

мое окружение:
Бродяга!--3--> Виртуальная Коробка
Ubuntu Trusty Tahr в качестве гостевой ОС (V. 14.04 32-разрядная ОС)
Обновлено до ядра linux 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-get install --install-рекомендует linux-generic-lts-vivid

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

Я бы перезагрузился снова (возможно, не обязательно), чтобы проверить, что общая папка снова активна.
Вернувшись в виртуальную машину, продолжите установку BlueZ 5.31:
cd ~
судо apt-получить установку libglib2.0-Дев libdbus-1-dev с libudev-dev и libical-Дев libreadline-dev и
wget https://www.kernel.org/pub/linux/bluetooth/bluez-5.31.tar.xz
тар xvf на Bluez-5.31.смола.xz
компакт-диск на Bluez-5.31
./настроить --префикс=/usr --Мандир=/usr/доли/человек --sysconfdir=/и т. д. --localstatedir=/var с помощью --disable-добавлена опция --enable-экспериментальной опцией --enable-хранитель-режим
make
sudo make install
sudo cp attrib /gatttool/usr / bin

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

настройте адаптер Bluetooth, запустите рекламу, запустите пример сервера GATT (служба сердечного ритма) с подробным включением (мой адаптер-hci0):
компакт-диск BlueZ 5.31 directory
sudo tools/btmgmt-i hci0 сила
sudo tools / btmgmt-i hci0 le on
sudo tools / btmgmt-i hci0 connectable on
sudo tools / btmgmt-i hci0 имя"дружеский имя"
sudo tools / btmgmt-I hci0 реклама на
sudo tools / btmgmt-i hci0 питание включено
инструменты / btgatt-server-i hci0-s low-t public-r-v

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

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

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


1) goto Bluez папка

2) судо ./настроить --префикс=/usr --Мандир=/usr/доли/человек --sysconfdir=/и т. д. --localstatedir=/var с помощью --disable-добавлена опция --enable-экспериментальной опцией --enable-хранитель-режим

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

4) реклама подключаемых пакетов

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

sudo hciconfig hci0 вверх

установить данные рекламы: "hello world"

sudo hcitool-i hci0 cmd 0x08 0x0008 48 45 4c 4c 4f 57 4f 52 4c 44

начать рекламу как connectable

sudo hciconfig hci0 leadv 0

5) sudo сервис bluetooth стоп

6) sudo src / bluetoothd-d-n

7) с другого ПК введите (изменить MAC id GATT server mac)

gatttool-b gatt_server_mac --interactive

Шаг 6 это в случае, если вы хотите скомпилировать Плагины / gatt-пример.c

Если вы хотите скомпилировать сервер.с профиль/времени или profle / alert(заменить на alert вместо времени) или любой другой файл в папке профиля заменить Шаг 6

sudo src / bluetoothd --plugin=Время-n


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

Run tools / btgatt-server.c в одном ПК с судо ./ btgatt-server в одном ПК

и судо ./ btgatt-client-D server_mac в другой ПК


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


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

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

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

https://github.com/nettlep/gobbledegook

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