Как правильно организовать передачу данных по Bluetooth?
Всем доброго дня!
Есть плата со счетчиком. Она передает данные по BLE на телефон. Но если организовывать непрерывную передачу информации, то батареи хватает очень на малое время. Есть идея сделать передачу раз в 3-5 минут. Но тогда как пользователь будет знать, когда нужно включить приложение, чтобы получить эту информацию?
Или может быть есть еще какая-то возможность, чтобы передавать информацию по BLE и не тратить на это много энергии?
Никита Пелевин: там смысл в том, что передача ведется очень маленькими кусочками - характеристиками, в которых может быть несколько параметров-дескрипторов. Т.е. это НЕ bluetooth 1.1, там нельзя гонять файлы.
Слоты приема и передачи ведущего и ведомого устройства (master и peripheral в терминологии Bluetooth Smart) синхронизируются. Для этого большинство популярных чипов требуют подключение внешнего часового кварца. Иногда можно и без него, но тогда увеличивается потребление.
То есть ваш девайс не будет все время находиться в приеме или передаче, а будет выходить на связ в заранее определенные интервалы времени.
Т.е. передача будет скажем через каждые 30 секунд. Но при этом они же все равно спаренные, т.е. поддерживают между собой связь. А значит на это будет тратиться энергия? Ведь так?
Никита Пелевин: Ну вот на эти интервалы передачи каждые 30 секунд и будет тратиться энергия. Почитайте научно-популярную статью — goo.gl/jnRNIo — думаю, многие вопросы отпадут.
Пользователь может узнать о том что нужно запустить приложение ( или приложение автоматически примет данные). Для этого приложение должно подписаться на изменение значения соответствующей характеристики. Чтобы лучше представить о чем речь у NordicSemiconductor есть пример - nRF Beacon - есть прошивка для их отладки и приложение для смартфона бесплатное. Когда перемещаетесь в следующую зону от маячка на экран выскакивает уведомление.
On Android 4.3 and 4.4.x the application requires the nRF Beacon Service to be installed on the device.
Которая закрытая и которая осуществляет основную работу (если я не правильно понял, поправьте).
К тому же судя этому видео, события на которые он способен реагировать ограниченны: 1)out_of_range; (2)if_in_range; (3)near; (4)on_touth. О возможно инициировать события со стороны устройства не сказано ни чего, похоже нет такой возможности.
nirvimel: все верно. Более того, для яблочных устройств все спрятано еще глубже. Но это не меняет сути дела: у каждого устройства есть набор сервисов -> у сервисов есть характеристики, в характеристики могут быть записаны значения (самим устройством). Приложение в смартфоне ,при подключении к устройству, сканирует набор сервисов и характеристик в этих сервисах. При необходимости, приложение может подписаться на изменение соответствующей характеристики ( значения в ней). Дальше приложение может быть свернуто, но когда устройство изменит значение в характеристике система на смартфоне вызовет приложение и скажет ему, что что-то изменилось и тогда решайте что делать.
Все приложения на андроиде или айосе используют какую-либо библиотеку ( системную или кастомную) но это ничего не меняет.
Я рекомендую вам обратиться к спецификации Bloetooth 4.0 ( Core 4.0 ) и выше, там все читать не надо ( начните с vol 6 part D, если не ошибаюсь ). Будет гараздо эффективнее чем чей то вольный пересказ.
P.S. Ваш вопрос состоял в том можно ли уменьшить потребление - да, можно.
P.S.S. Beacon был как пример notifications. Не зацикливайтесь на нем.