Время, необходимое для подключения моего приложения к устройству Bluetooth 4.0, похоже, сильно различается. То же приложение, то же устройство. Иногда коннектится сразу - вроде меньше секунды. Иногда это занимает около 10-12 секунд. И время от времени он вообще не подключается - мне нужно перезапустить сканирование и т. Д. Мне было интересно, видел ли кто-нибудь еще эту проблему. Что может быть причиной этого?
Время установки соединения CoreBluetooth сильно различается
Ответы (2)
Для этого может быть ряд причин. Вот несколько из верхней части моей головы.
Аппарат не очень часто рекламируют. О/С в основном сканирует устройство, которое посылает рекламный сигнал. Это то, что устройства делают как можно реже для экономии заряда батареи. На некоторых устройствах есть кнопка, которая заставляет их рекламировать их чаще, когда вы настраиваете соединение. У других может быть настройка, позволяющая изменить рекламную ставку. (Какое устройство вы используете?)
Устройство может быть подключено к чему-то еще.
Батарея может быть разряжена.
Возможны радиопомехи от другого источника. Wi-Fi часто является проблемой. И устройства Bluetooth 4.0, и устройства WiFi используют скачкообразную перестройку частоты. Попробуйте отключить или перезапустить сеть Wi-Fi. Попробуйте отключить Wi-Fi на телефоне и посмотрите, поможет ли это.
Конечно, хотя нам и не хочется это признавать, всегда есть скрытая возможность того, что мы закодировали что-то неправильно в нашем приложении! Тот факт, что мы получили одно соединение, не является гарантией того, что приложение идеально.
Я также нахожу ту же проблему. У меня реклама устройства BLE каждые 2 секунды.
[self.CM scanForPeripheralsWithServices:nil options:0]
возвращается через 0,2 с до ~ 30 с. (СМ — мой центральный менеджер)
Мой следующий шаг — собрать время в CSV-файле и построить график частотного распределения различных значений времени подключения и времени подключения в зависимости от времени, чтобы посмотреть, смогу ли я различить закономерность.
Существует полезное демонстрационное приложение TI. Но, к сожалению, они сделали его универсальным и не реализовали раскадровку для iPad (она есть и пуста), а установка версии только для iPhone вызывает ошибку, когда я пытаюсь запустить в режиме отладки. И у меня нет под рукой другого устройства Apple с BLE.
Вызов
[self.CM stopScan];
до того, как scanWithPeripherals, кажется, уменьшает количество очень долгих ожиданий.
Я попробовал параметр CBCentralManagerScanOptionAllowDuplicatesKey, как показано в этом ответе Stackoverflow, но если что-то казалось для увеличения времени обнаружения.
Я думаю, что раздобуду некоторые инструменты для прослушивания пакетов Bluetooth, чтобы помочь увидеть, что на самом деле находится в воздухе.