iBeacon и XCode — обнаружение с помощью CoreLocation и подключение с помощью CoreBluetooth

У меня есть небольшой аппарат с модулем BLE, который взаимодействует с устройством iOS.

Я хотел бы выполнить обнаружение с помощью iBeacon (то есть с использованием рекламных пакетов iBeacon) и, очевидно, подключение (и обмен данными) с помощью CoreBluetooth, но есть некоторые проблемы.

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

  1. Серийный номер (нужен для внутренних целей) - 6 символов и 10 цифр.

  2. «Аппаратная версия» для указания типа продукта (каждый продукт использует другой протокол).

Проблема, с которой я сталкиваюсь, в основном заключается в том, как выполнить фазу обнаружения, а затем подключиться к конкретному обнаруженному объекту:

О. В пакете iBeacon adv я должен использовать поле UUID для серийного номера и поле основного/дополнительного номера для версии аппаратного обеспечения, но если я это сделаю, устройства в основном не будут обнаруживаться (iBeacon SDK для iOS должен знать UUID, чтобы ищите перед началом фазы мониторинга, поэтому она не может быть разной для каждого устройства).

B. В iOS функции iBeacon доступны через библиотеки CoreLocation, вместо этого стандартные функции BLE доступны через CoreBluetooth. Если я использую рекламный пакет iBeacon, объекты, обнаруженные библиотеками CoreBluetooth, не видят никакой информации о пакете (поэтому проблема заключается в следующем: «Как узнать, какой объект с серийным номером XYZ?»).


person The Good Giant    schedule 07.04.2014    source источник


Ответы (2)


Я понял, что возможным решением моей проблемы будет реклама как iBeacon, так и стандартных пакетов BLE, скажем, «циклическим способом».

Я попробовал это (я рекламировал пакет iBeacon на 500 мс и стандартный пакет BLE на 500 мс), и стандартный BLE, похоже, в порядке.

Мне все еще нужно больше узнать о том, как обнаружение iBeacon реагирует на это, но, как уже говорилось, это может быть решением.

person The Good Giant    schedule 08.04.2014
comment
Эй, что вы нашли в качестве лучшего решения для этого? У вас сейчас та же проблема, и вы ищете, как подключиться к стандартному BLE после того, как маяк найден. Ваше решение на 500 мс кажется возможным, но, может быть, есть лучший способ? - person JInn; 19.05.2016
comment
Привет, я и моя команда некоторое время тестировали решение 500 мс и обнаружили, что оно кажется достаточно стабильным, чтобы считать его окончательным решением. Очевидно, это вряд ли зависит от используемого вами аппаратного обеспечения (не уверен на сто процентов, но я предполагаю, что мы использовали модуль Bluegiga). Мы честно пытались найти какие-то другие решения некоторое время, но безуспешно :( (также здесь, это вряд ли зависит от того, сколько информации вам нужно для рекламы) - person The Good Giant; 20.05.2016

ВАРИАНТ 1. Если вы хотите использовать рекламу iBeacon, забудьте о кодировании любой информации непосредственно в ProximityUUID. Как вы упомянули, вам нужно знать это заранее в iOS. Вместо этого создайте таблицу поиска, чтобы преобразовать идентификаторы iBeacon в номер оборудования/серийный номер. Как это:

Proximity UUID                       Major Minor  HW/N  S/N
2F234454-CF6D-4A0F-ADF2-F4911BA9FFA6 10001 10001  0001  abcdef0000000001
2F234454-CF6D-4A0F-ADF2-F4911BA9FFA6 10001 10002  0001  abcdef0000000002

Эта система позволит вам иметь 65536*65536 различных серийных номеров для одного UUID. Вам нужно будет сохранить эту таблицу на стороне сервера и иметь веб-службу для поиска номера оборудования и серийного номера на основе UUID/Major/Minor.

Моя компания предлагает облачный сервис по адресу http://www.proximitykit.com, который позволяет вам делать именно это. Вы даже можете использовать API нашего веб-сервиса для программного добавления элементов в свою таблицу поиска. (Возможно, он будет большим.)

ВАРИАНТ 2. Поскольку вам нужен CoreBluetooth после установления соединения, вы можете рассмотреть возможность использования CoreBluetooth для всего этого. Ваше объявление будет одинаковым для всех типов оборудования, но после подключения первая передача данных на iOS с устройства будет содержать номер оборудования и серийный номер. Затем вы можете настроить связь по мере необходимости на основе номера оборудования.

person davidgyoung    schedule 07.04.2014
comment
Прежде всего спасибо за ответ. Я попытался сделать что-то похожее на вариант 1 (извините, но я не хочу использовать внешние сервисы), поместив свой серийный номер внутри основного/младшего (это 4294967295 возможных серийных номеров!), и спрятав внутри него версию аппаратного обеспечения. Это немного сложно, и мне это не очень нравится, но это работает. Я склонен исключать вариант 2, потому что он в основном означает подключение ко всем устройствам BLE в радиусе действия. - person The Good Giant; 08.04.2014