#ios #bluetooth #bluetooth-lowenergy
#iOS #bluetooth #bluetooth -низкое энергопотребление
Вопрос:
Я разрабатываю приложение для iOS, которое подключается к определенному типу устройств BLE, но я пишу код в комнате, в которой более 20 таких устройств находятся под напряжением. Я постоянно обнаруживаю, что по утрам я могу нормально подключаться к своему персональному устройству, но с течением дня подключиться к моему устройству становится невозможно, как будто 20 других устройств каким-то образом проснулись и блокируют мой сигнал. Никто не использует большинство этих устройств; они просто сидят на столах. Это известная ошибка? Работает ли Apple над этим?
Ответ №1:
Все ли устройства рекламируются? Если они рекламируют, скажем, 20 мс, тогда может быть трудно услышать все. Есть «только» 3 рекламных канала для совместного использования между всеми устройствами. Подключение происходит по тем же каналам (периферийное устройство прослушивает собственную рекламу, чтобы услышать, хочет ли кто-нибудь подключиться).
Это не имеет ничего общего с Apple CoreBluetooth. По моему опыту, CoreBluetooth может обрабатывать около 20 устройств после успешного подключения и перехода активности на каналы трафика.
1) Попробуйте использовать более медленный рекламный интервал. Это должно работать нормально, если ваше приложение находится на переднем плане. 2) Используйте анализатор BLE (USB-ключ TI в порядке) и посмотрите, не происходит ли сбой соединения на уровне протокола, тогда это не ошибка CoreBluetooth. 3) Рекламируйте только с быстрым интервалом, когда это необходимо, или вам действительно нужно быстрое обнаружение.
Как правило, Apple требуется до 55 рекламных объявлений в фоновом режиме, чтобы увидеть устройство, когда оно единственное видимое. Так что, если вам действительно нужно обнаружение в течение 1,1 секунды, вам может потребоваться рекламный интервал в 20 мс, в противном случае используйте 100 мс или даже больше (точное число, которое оптимизирует обнаружение, см. В Руководстве Apple по рекламным интервалам). 100 мс дает гораздо больше возможностей и неплохое обнаружение. 1-2 секунды обеспечивают гораздо более длительный срок службы батареи и будут найдены через 1-2 минуты, если ваше приложение работает в фоновом режиме. Это было бы неплохо для eyeBeacons в торговых центрах или тому подобном, в то время как вам может потребоваться 100-200 мс в небольших помещениях.