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 в другой ПК
Я приземлился на этот вопрос несколько раз в моем поиске автономного сервера GATT для C. ответы здесь требуют создания вашего сервера GATT со стеком BlueZ. BlueZ добавил поддержку D-Bus, чтобы разрешить автономные серверы GATT и даже включает автономный образец сервера GATT для Python, но не для C.
все еще нуждаясь в сервере, я начал работать над ним с намерением выпустить образец, но даже минимальная реализация все еще больше кода, чем мне было бы удобно вызываю пример.
первоначальная реализация выполнена сейчас и была выпущена под GPL-3:
https://github.com/nettlep/gobbledegook
Если это кому-то помогает, круто. Если это помогает кому-то, кто выпустил код, который помог мне, даже лучше.