Я работаю над настройкой двух Linux-систем для демонстрации BLE. Очевидно, что одна из систем будет периферийной, а одна из них будет центральными устройствами. У меня есть несколько вопросов, связанных с обеими этими конфигурациями.
Окружающая среда
- 2x системы Ubuntu 14.04
- 2x подключаемые USB-BT4LE-ключи (http://plugable.com/products/usb-bt4le)
Настройка периферийного устройства
Первый порядок бизнеса - настройка и настройка периферийной системы с помощью настроенного сервера GATT. В настоящее время не представляется возможным настроить сервер GATT из командной строки. Таким образом, хотя это простая задача, приносящая USB-ключ и рекламируя его, это не позволяет создавать пользовательские сервисы и характеристики. Единственным примером сервера GATT, который я мог найти, был файл gatt-example.c в пакете Bluez. Поэтому я загрузил и построил последний источник bluez-5.23. (http://www.linuxfromscratch.org/blfs/view/svn/general/bluez.html). Дополнительно настраивается с использованием флага --enable-maintainer-mode, чтобы принудительно построить плагин gatt-example.c в bluetoothd. И я проверил post-build из каталога ~/bluez-5.23/plugins
, что был файл bluetoothd-gat-example.o
. Который говорит мне, что пример gatt был, по крайней мере, успешно построен.
Затем я изменил файл конфигурации, чтобы включить LE и сервер атрибутов.
$ sudo vi /etc/bluetooth/main.conf
EnableLE = true // Enable Low Energy support. Default is false.
AttributeServer = true // Enable the GATT attribute server. Default is false.
Затем просто перезагрузите или перезапустите демон bluetooth...
Настройка центрального устройства
Поскольку центральному устройству не нужны никакие специальные плагины, построенные как периферийные устройства, я просто установил bluez с помощью apt-get
. По-видимому, установлено значение v4.101 в соответствии с bluetoothd -v
.
Настройка сеанса
Процесс подключения должен быть довольно простым. Я настраиваю периферийное устройство для рекламы, а затем подключаюсь к центральному устройству:
Периферийные:
$ sudo hciconfig hci0 up // Make sure the interface is up
$ sudo hciconfig hci0 leadv // Set the interface to advertise
Центральная:
$ sudo hcitool -i hci0 lescan // Scan for nearby devices advertising
LE Scan ...
00:02:72:C9:5E:0F (unknown) // Not sure why two of the same MAC are found?
00:02:72:C9:5E:0F (unknown) // but I know this is my device...
$ sudo gatttool -i hci0 -b 00:02:72:C9:5E:0F -m 48 --interactive // Connect interactively
[ ][00:02:72:C9:5E:0F][LE]> connect
[CON][00:02:72:C9:5E:0F][LE]> primary
attr handle: 0x0001, end grp handle: 0x0008 uuid: 00001800-0000-1000-8000-00805f9b34fb
attr handle: 0x0010, end grp handle: 0x0010 uuid: 00001801-0000-1000-8000-00805f9b34fb
[CON][00:02:72:C9:5E:0F][LE]> characteristics
handle: 0x0004, char properties: 0x02, char value handle: 0x0006, uuid: 00002a00-0000-1000-8000-00805f9b34fb
handle: 0x0007, char properties: 0x02, char value handle: 0x0008, uuid: 00002a01-0000-1000-8000-00805f9b34fb
И мы видим, что ни одна из услуг или характеристик из примера gatt не доступна.
Вопросы
- Периферийное устройство
- Как мне создать собственный GATT-сервер? Может ли это быть автономным приложением C или нужно его встроить в bluetoothd в качестве плагина, такого как пример gatt? Ответ на этот вопрос (Создание сервера Gatt?) подразумевает, что вы выполните следующее: "начните с инициализации библиотеки GATT и дополнительных модулей", а затем "зарегистрируйте свою базу данных GATT". Но нет ни одного примера того, как реализовать эти общие инструкции, а предоставленная ссылка - это просто URL-адрес веб-сайта Bluetooth.
- Спецификации GATT (https://developer.bluetooth.org/gatt/Pages/default.aspx) предоставляют множество "усыновленных" сервисов и характеристик, которые можно загрузить в формате XML. Но нет инструкций о том, как их использовать?!
- Как проверить мой сервер GATT?
- Центральное устройство
- Почему мое центральное устройство не видит сервисы и характеристики сервера GATT, работающего на периферии?
Я могу предоставить любую дополнительную информацию, необходимую. Спасибо.