Используйте BlueZ Stack в качестве периферийного устройства (рекламодатель)

Цель: Используйте BlueZ и ключ Bluetooth 4LE для создания периферийного устройства, которое рекламирует Bluetooth-эквивалент «Hello World».

Где я нахожусьВ настоящее время я установил и загрузил стек BlueZ, я могу использовать инструмент hci для распознавания и просмотра ключа Bluetooth. Я возился с hciconfig leadv, но я просто не совсем понимаю / понимаю, что происходит.

Какая помощь, я думаю, мне нужна: Мне нужно, чтобы перейти к следующему шагу. Если кто-нибудь может указать мне на хороший ресурс, провести меня через это или что-то еще, это будет очень цениться. Если мне нужно выполнить дополнительную работу по поиску, я могу, но я изучил Google и SO так много разных производных этого вопроса, сколько я могу себе представить.

* Я также отметил это как CoreBluetooth в надежде, что, возможно, разработчик iOS в какой-то момент возился с этим.

РЕДАКТИРОВАТЬ: В ответ на комментарий, кажется разумным заявить, какова моя конечная цель. В конечном итоге я хотел бы рекламировать через ключ самые простые из простых сообщений / сигналов и поднять это на устройстве iOS (CoreBluetooth). Я смог добиться того, чтобы все работало на iOS (тонны документации по сравнению с Linux), но для меня это сложная задача - настроить адаптер как периферийное устройство. Стек BlueZ для меня ужасная загадка.

РЕДАКТИРОВАТЬ: После более копать, я в конце концов наткнулся на этот пост:Соединение Raspberry Pi Bluetooth 4.0, Это привело меня к теме сервера GATT, и я продолжу эту тему.

РЕДАКТИРОВАТЬ: Хорошо, так что мои поиски обучения продолжаются. За последние пару дней я углубился в инструменты hci *, sdptool и gatttool. Я дошел до того, что смог установить адаптер для рекламы "hciconfig hci0 leadv". На этом этапе я могу успешно «увидеть» адаптер, но на самом деле я не могу ничего с него прочитать. Я даже не вижу дружеского имени. Я буду продолжать, но, как всегда, любая помощь / предложения приветствуются.

РЕДАКТИРОВАТЬ: Соответствующая ссылка, полный обзор Bluetooth LE, относящихся к iOS.https://developer.apple.com/library/content/documentation/NetworkingInternetWeb/Conceptual/CoreBluetooth_concepts/AboutCoreBluetooth/Introduction.html#//apple_ref/doc/uid/TP40013257-CH1-SW1

ПОСЛЕДНИЕ РЕДАКТИРОВАТЬ: Привет всем, эта ссылка описывает, как создать iBeacon, используя Raspberry Pi + BlueZ ...http://www.wadewegner.com/2014/05/create-an-ibeacon-transmitter-with-the-raspberry-pi/

 vanthome23 сент. 2014 г., 08:19
Последняя ссылка мертва;)
 TJD22 апр. 2013 г., 20:26
Как вы управляете другой стороной (получение рекламы)? Если у вас есть два ключа, то вы бы сделалиhciconfig leadv на ведомом устройстве иhcitool lescan на главном устройстве.
 Matt Rajca01 июн. 2013 г., 20:39
@ Фитцерини, ты достиг дальнейшего прогресса в этом? Я также пытаюсь использовать BlueZ 5 на Raspberry Pi, чтобы рекламировать сервис Bluetooth LE для устройств iOS для использования.
 Ceryni01 июл. 2013 г., 19:43
@ Matt, к сожалению, я больше не добился прогресса в этом, и в настоящее время я больше не занимаюсь этим. Что касается рекламы устройства iOS для использования, это был именно тот случай использования, к которому я стремился. Я смог добраться до того, чтобы мое iOS-устройство «увидело» адаптер Pi, но я не смог подключиться или получить какие-либо данные из сигнала. Я желаю вам удачи, BlueZ не для слабонервных. Я также оставлю эту ссылку здесь:ti.com/ww/en/wireless_connectivity/sensortag/... Я имел большой успех, используя это устройство.
 Ceryni23 апр. 2013 г., 16:32
В конечном счете, я хочу управлять централизованно через устройство iOS. Конечной игрой было бы иметь донгл, рекламирующий какое-то основное сообщение, и устройство iOS подбирает его и отображает. Надеюсь, это добавляет разъяснения.

Ответы на вопрос(2)

Решение Вопроса

ройства и сообщит его состояние:

$ hciconfig

Вывод должен выглядеть примерно так:

hci0:    Type: BR/EDR  Bus: USB
     BD Address: 00:01:02:aa:bb:cc  ACL MTU: 1021:8  SCO MTU: 64:1
     DOWN
     RX bytes:1000 acl:0 sco:0 events:47 errors:0
     TX bytes:1072 acl:0 sco:0 commands:47 errors:0

Это указывает на то, что устройство называется hci0 и находится в нерабочем состоянии. Выполните следующую команду, чтобы вызвать это:

$ sudo hciconfig hci0 up

Теперь это должно выглядеть так:

$ hciconfig
hci0:   Type: BR/EDR  Bus: USB
     BD Address: 00:01:02:aa:bb:cc  ACL MTU: 1021:8  SCO MTU: 64:1
     UP RUNNING
     RX bytes:1000 acl:0 sco:0 events:47 errors:0
     TX bytes:1072 acl:0 sco:0 commands:47 errors:0

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

$ sudo hcitool -i hci0 cmd 0x08 0x0008 1e 02 01 1a 1a ff 4c 00 02 15 e2 c5 6d b5 df fb 48 d2 b0 60 d0 f5 a7 10 96 e0 00 00 00 00 c5 00 00 00 00 00 00 00 00 00 00 00 00 00

Вы можете изменить шестнадцатеричные байты (начиная с 1e), чтобы отправлять различные последовательности байтов для вашей рекламы. Тот, который буквально посылает коды ASCII для "HELLO WORLD", будет использовать:48 45 4c 4c 4f 57 4f 52 4c 44 (РЕДАКТИРОВАТЬ: Но вам также придется поставить префикс этого сообщения с правильным заголовком, см.Вот.)

Теперь используйте следующую команду, чтобы активировать рекламу на ключе, она начнет отправлять пакеты «Helo World».

$ sudo hciconfig hci0 leadv 0

РЕДАКТИРОВАТЬ: Приведенная выше команда делает рекламируемую услугу подключаемой. Если вы не хотите разрешать подключения, измените его на$ sudo hciconfig hci0 leadv 3

Вы также можете отключить рекламу, используя следующую команду:

$ sudo hciconfig hci0 noleadv

 davidgyoung27 окт. 2013 г., 03:05
Извините, я на самом деле никогда не делал этого, поэтому я не знаю деталей. Все, что я читал в рекламе, было с API Bluetooth для iOS и Android.
 davidgyoung16 янв. 2014 г., 23:45
Извините, но вы не можете. API Apple CoreBluetooth запрещают доступ к основному тексту рекламы.
 davidgyoung14 янв. 2014 г., 22:49
Ну, я полагаю, вымог вставьте строку «Hello World» в идентификаторы iBeacon, но это не очень полезно для iOS. Чтобы «увидеть» iBeacon, приложение для iOS должно сначала сообщить ОС ProximityUUID (16 байт) iBeacon, который должен быть видимым. Таким образом, вы действительно не можете вставить неизвестную строку в это поле. Это оставляет только четыре байта, оставленных в старшем и младшем полях. С 8-битной кодировкой символов этого достаточно для «ада», но недостаточно для «Hello World»
 davidgyoung18 дек. 2013 г., 05:14
@ Марк, да, вы абсолютно правы, что это нарушит преамбулу iBeacon. Выше был задан вопрос, как отправить объявление Bluetooth LE (НЕ объявление iBeacon) «Hello World». Поэтому я показал ему свой код, который создает рекламу iBeacon, и объяснил, как он может изменить его, чтобы вместо него рекламировать «Hello World». Есть смысл?
 Ceryni03 окт. 2013 г., 19:14
Это действительно хороший способ начать рекламу. Я принимаю это, поскольку это отвечает на оригинальный вопрос. Но ради полноты, не могли бы вы описать, как затем подобрать рекламное сообщение, используя другую пару устройство / ключ?

bluez не выставляет API DBUS для регистрации сервера ГАТТ; у вас есть доступная реализация профиля, но вам нужно сконфигурировать и скомпилировать ее с опцией --enable-эксперимент или включить gatt-example в папке плагина, чтобы, например, использовать некоторый gatt-сервер

когда вы рекламируете hciconfig hci0 leadv, обратите внимание на рекламируемые данные. в приведенном ниже примере для iBeacon

sudo hcitool -i hci0 cmd 0x08 0x0008 1e **02 01 1a** ff 4c 00 02 15 e2 c5 6d b5 df fb 48 d2 b0 60 d0 f5 a7 10 96 e0 00 00 00 00 c5 00 00 00 00 00 00 00 00 00 00 00 00 00

Эта часть, выделенная жирным шрифтом, предназначена для структуры AD, которая высвобождается в поле флагов (проверьте в спецификации Bluetooth для формата данных adsisgin). При таких настройках флагов устройство рекламирует себя как одновременно LE и BR-EDR.

По моему опыту, при рекламе таким способом устройство Android, которое сканирует устройство bluez, выступающее в качестве периферийного устройства BLE, будет запускать соединение через классический Bluetooth (из-за настроек флага), а не через BLE (обратите внимание, что процедуры подключения различны для LE и Classic). Не уверен, как центральное устройство Apple действует в этом случае. В любом случае, чтобы избежать этого, вы можете установить 06 вместо 1A, чтобы поддержка BR-EDR не объявлялась. Таким образом, вы увидите соединение через BLE.

Если вы хотите протестировать его с помощью центрального устройства Android, для этого есть бесплатное приложение Nordic.

 lucifer08 нояб. 2016 г., 16:27
Как добавить сервис в устройстве рекламодателя, который отображается в центральном устройстве с разрешением на запись?

Ваш ответ на вопрос