- Как выбрать Bluetooth-монитор сердечного ритма для Android
- Какой датчик был использован
- Приложения для спорта
- Endomоndo Spоrts Trаcker
- RunKееper
- Runtаstic
- Bluetooth-пульсометр на Android: Видео
- Top 10+ Best Heart Rate Monitor Apps In 2021
- Our Top Picks
- Top 10+ Best Heart Rate Monitor Apps
- Cardiio
- Features of Cardiio
- My Baby’s Beat
- Features of My Baby’s Beat
- Cormeum
- Features of Cormeum
- Heart Rate Plus
- Подключаем нагрудный датчик пульса по Bluetooth на Swift
- С чего все началось?
- Немного теории о технологии Bluetooth LE
- Центральное и периферийное устройство
- Рекламные пакеты данных протокола
- Перейдем к написанию кода
- Подключаем библиотеку Bluetooth
- Поиск Bluetooth устройств
- Идентификатор служб UUID
- Подключаемся к пульсометру
- Получаем список сервисов с пульсометра
- Достаем характеристики из шкафа
- Положение пульсометра на теле
- Получение ЧСС и вывод на экран пользователя
- Итоги
Как выбрать Bluetooth-монитор сердечного ритма для Android
Предлагаем поговорить о новинках последнего десятилетия и в этой статье расскажем про лучший Bluetooth-монитор сердечного ритма на Android.
Какой датчик был использован
Мы для исследования наших Bluetooth-мониторов сердечного ритма Android использовали беспроводной Bluetooth-датчик сердечного ритма Zеphyr hxm для Android. Он крепится на грудь спортсмена для обеспечения как можно более точных данных, держится на груди на удобном эластичном ремне. Кроме этого, пульсометр может отслеживать RR-интервал, пройденное расстояние и скорость, с которой движется человек на тренировках.
Подключение к смартфону происходит через Bluetooth 2.0 или 4.0, такой стандарт поддерживает почти любой смартфон, так что это большой плюс. Срока службы батареи хватает до 150 полных часов.
Приложения для спорта
Теперь, когда про Bluetooth-датчик сердечного ритма на Android мы рассказали, перейдем к приложениям, в которых можно задействовать показатели пульсометра.
Endomоndo Spоrts Trаcker
Первая программа для Bluetooth-монитора сердечного ритма для Android называется Endomondо . Изначально была создана для тех, кто занимается бегом, но после разработчики начали добавлять разные новые функции, что превратило приложение в программу для отслеживания любой физической активности.
RunKееper
Второе приложение для Android-смартфонов называется RunKeeper . Это, пожалуй, единственный достойный конкурент для Endomоndo, потому как обладает аналогичными функциями.
С помощью RunKeeper можно не только просматривать историю пульса, но и всех тренировок, следить за рекордами, как своими,так и других, составлять планы занятий.
К тому же программа имеет интеграцию с Facebоok и Twittеr.
Runtаstic
И последнее приложение, которое не должно быть пропущено. Это Runtastic с поддержкой Bluetooth-датчиков – умный комбомонитор сердечного ритма для Android. Его качество на уровне предыдущих двух приложений, но оно разработано только для беговой активности: может отслеживать бег, трусцу, ходьбу или поездки на велосипеде с помощью GPS, измерять время пробежек, их дистанцию, темп, скорость и сожженные калории. Программа может строить диаграммы активности, сплит-таблицы.
Сравнивая описанные Bluetooth-мониторы для Android, не стоит заочно делать выводы, что какое-то лучше другого, так как они все достойны внимания. Рекомендуем испробовать каждое из них и выбрать самое удобное для себя.
Bluetooth-пульсометр на Android: Видео
Источник
Top 10+ Best Heart Rate Monitor Apps In 2021
Our Top Picks
In this article, we will talk about some of the best heart rate apps. Having one of these best heart rate tracker apps on your smartphone can help you in the long run. You can install these apps to monitor your heartbeats in situations like excessive workouts, diseases, etc.
Top 10+ Best Heart Rate Monitor Apps
Cardiio
This is one of the best heart rate apps iPhone that uses camera sensors to detect the pulse of the user. To use this heart rate monitors for iPhone, you need to open the Android BlueTooth heart rate monitor app and cover the device’s camera with your finger. The Heart Rate App will use sensors to read your pulses and provide you a result.
This heart rate monitor app by Cardiio, Inc. has 41.6k reviews on the App Store with an overall rating of 4.7 out of 5. Cardiio has been featured as one of the best heartbeat apps by various newspapers and tv channels. Some of the most prominent platforms which had endorsed this app are ABC News, CBS, Cult of Mac, Lifehacker, and PC Magazine.
Features of Cardiio
- There Are 10 additional premium features to subscribe to. Some of those features are Pulse Waveform Pack, Specific Heart Rate Pack, Calorie- Burn Estimator, etc
- You can pay $9.99 to unlock the Pro features of this heart rate app. You can use it for free as well, with access to basic features
- This Android BlueTooth heart rate monitor app requires iOs version 8.0 or later. Also, it is compatible with iPhone, iPad, and iPod touch devices
- The heart rate monitor app is available in 13 languages including English, Chinese, Japanese, Korean, Russian, Portuguese, etc
My Baby’s Beat
The app is exclusively available for iOs supporting devices. Users can use this heart rate app to hear and record the sound of the soon to be born baby by using the microphone of the device.
This Android BlueTooth heart rate monitor app is useful in monitoring the well being of the baby by regular heartbeat analysis. My baby’s Beat is the best app to check heart rate online developed by experts of MATIS O.M.G. Ltd. This heartbeat rate app is available on iOs exclusive app stores for Apple devices.
Features of My Baby’s Beat
- The heart rate monitor app is available for $8.99 on the iOs app store
- This heart tracker app uses a microphone to capture the heartbeats of the baby. It doesn’t require any other accessories apart from a smartphone
- The app comes with graphic tutorials and sound samples to give you an idea of what to expect
- Compatible with iOs 11.0 or later on devices like iPhone, iPad, and iPod touch
- This heartbeat rate app is available in 6 languages including English, German, Italian, Japanese, Portuguese, and Spanish
Cormeum
The Cormeum app is designed to target health-failure issues. Moreover, the app also keeps a track of the heart’s health to predict any possible danger that users might face. This one of the best heart rate monitor apps will prepare a graph and provide important alerts. These charts are always accessible for users. The app also keeps tabs on whether you’ve taken your medications and in what doses. With one tap, you can easily share your health data with any expert you want.
Features of Cormeum
- This best heart rate app can help track your meals. It automatically calculates your sodium and fluid intake
- This best heartbeat app can help you in making sure you take your meds on time
- You can measure your regular calorie intake along with other intakes like Fat
- You can share your health data with any expert you want
Heart Rate Plus
Heart Rate Plus — Heart Rate App is available for iOS and Android devices. The heart rate monitor app is developed by PVDAPPS and has more than 1.8k reviews on the Apple Store with an average rating of 4.6 out of 5 stars.
This one of the free to use heart rate monitors that work with iPhone uses a camera to checking your heart rate and monitor pulses. You can also save generated reports in form of graphs, quick notes, etc with different tags as per your preference in the heart rate tracker app itself.
The heart rate app analyzes and provides you a real-time graph as well. A Pro version can be purchased as well from the heart rate tracker app itself to remove ads.
Источник
Подключаем нагрудный датчик пульса по Bluetooth на Swift
С чего все началось?
Около года назад я приобрел данный девайс для контроля частоты сердечных сокращений (далее — ЧСС) во время тренировок. Датчик отлично подсоединяется к телефону, умным часам по Bluetooth, но обычно, фитнесс-приложения, анализирующие подобного рода данные требуют либо подписки, либо нагружены излишне сложными аналитиками, которые мне, как рядовому пользователю не очень интересны. Поэтому у меня родилась идея написать свое приложение для контроля ЧСС во время тренировок для IOS на Swift.
Немного теории о технологии Bluetooth LE
Bluetooth Low Energy — очень популярный и распространённый протокол обмена данными, который мы используем повсеместно и который становится все популярнее с каждым днем. У меня даже чайник на кухне управляется дистанционно через BLE. Low energy, кстати, гораздо сниженное энергопотребление в отличие от «голого» Bluetooth, настолько сниженное, что устройство готово общаться по данному протоколу на одной батарейке несколько месяцев, а то и лет.
Конечно, цитировать и переписывать спецификацию протокола BLE 5.2 нет никакого смысла, поэтому ограничимся основными понятиями.
Центральное и периферийное устройство
В зависимости от использования и назначения, устройство Bluetooth может быть:
Центральным (главным) — получает данные от периферийного устройства (наш телефон)
Периферийным — устройство, которое отправляет данные на центральное устройство (датчик ЧСС)
Рекламные пакеты данных протокола
Рекламные или оповещательные данные отправляются с периферийного устройства в виде пакетов, которые содержат в себе основную информацию об устройстве: его название, а также его функциональные возможности. Задача центрального устройства, получить их, прочитать, а после выделить из списка периферии необходимый для подключения девайс.
Объем рекламных пакетов не очень большой и вместить всю информацию об устройстве не способен. Чтобы получить доступ ко всем возможностям и характеристикам устройства, необходимо выполнить подключение, после чего считать его данные, которые, в свою очередь, могут быть предоставлены в виде:
Сервиса (услуг) — набор данных, описывающих функции устройства. В нашем случае мы увидим службу получения ЧСС.
Характеристик — дополнительных описаний сервисов устройства. Например характеристика изменения сердечного ритма в секунду, а также положения датчика на теле.
Переходя к абстракциям, сервисом является некий шкаф, в котором много ящиков — характеристик. Причем каждый сервис уникален и представлен идентификатором UUID, который может быть 16-битным или 128-битным, в зависимости от типов сервисов.
Перейдем к написанию кода
Создадим проект в Xcode с одноимённым названием, после чего добавим несколько необходимых Label в Main.storyboard и перетянем outlets этих labels во View Controller, закрепим их с помощью constraints, а также скроем их для первоначального изображения в методе viewDidLoad, как я сделал это на изображении:
Я создал outlets для текстовых значений «121» и «грудь», другие же текстовые значения просто закрепил на view, так как изменений в них делать мы не планируем.
Отладку и демонстрацию работы необходимо совершать на реальном устройстве, так как симулятор не поддерживает возможность работы по протоколу Bluetooth.
В файле Info.plist проекта необходимо добавить свойство: Bluetooth Always Usage Description и прикрепить к нему описание, чтобы уведомить пользователя об использовании данных по Bluetooth при первом запуске приложения. Если данное свойство не добавить в список, то приложение «упадет» с одноименной ошибкой. Не забывайте про это!
Подключаем библиотеку Bluetooth
Тут все просто, для подключения библиотеки воспользуемся следующей строчкой:
Вспомним, что по протоколу у нас существуют так называемые центральные и периферийные устройства, логично предположить, что основной функционал работы данного протокола будет исполнен методами делегатов централи и периферии.
Для начала создадим переменную центрального (главного) устройства в проекте рядом с объявлением других переменных:
Теперь, чтобы получить доступ к методам необходимо назначить ViewController делегатом, но предварительно подпишем его под протокол CBCentralManagerDelegate. Сделать это предлагаю в extension ViewController, так будет рациональнее.
Xcode на такое пользовательское действие отреагирует ошибкой: «Type ‘ViewController’ does not conform to protocol ‘CBCentralManagerDelegate'», оповещая, что данный протокол требует обязательную реализацию метода: «func centralManagerDidUpdateState(_ central: CBCentralManager)». Нажмем «fix», добавив этот метод в проект. Данный метод нужен для автоматической проверки состояния центрального менеджера, которого мы создали ранее.
Чтобы отобразить все состояния центрального менеджера, в теле метода «func centralManagerDidUpdateState(_ central: CBCentralManager)» напишем:
Xcode автоматически предложит вставить все возможные состояния данного условия, соглашаемся с ним. А в каждом из состояний напишем функцию print(«это состояние»):
Теперь нам осталось проинициализировать переменную «centralManager» и задать ей делегирование. Сделаем это в методе «viewDidLoad», а в качестве параметра очереди напишем «nil», определяя всю работу про Bluetooth в главной очереди.
Собираем проект, запускаем на устройстве с включенным Bluetooth, видим системный запрос за его использование, соглашаемся и получаем в консоль заветное сообщение «central.state is poweredOn«, которое сигнализирует нам о том, что центральный менеджер готов к работе. Если выключить Bluetooth на телефоне, то в консоли появится логичное «central.state is poweredOff«.
Поиск Bluetooth устройств
Центральный менеджер ждет дальнейших указаний, и сейчас он их получит. Для этого в методе «centralManagerDidUpdateState» в случае «.poweredOn» после метода «print» пишем:
Менеджер начнет сканировать все доступные вокруг устройства, а чтобы мы смогли увидеть их в консоли приложения, необходимо реализовать метод делегата в extension ViewController ниже метода «centralManagerDidUpdateState» следующим образом:
Запускаем приложение. И теперь в консоли мы можем увидеть множество всех доступных для подключения устройств. Замечательно! Одним из них и является необходимый для подключения пульсометр. Но чтобы упростить поиск пульсометра, можно воспользоваться некоторой хитростью, которую я сейчас покажу.
Идентификатор служб UUID
Я ранее упомянул наличие данного идентификатора в протоколе Bluetooth как уникальную характеристику для различных устройств, поэтому могу сказать вам, что пульсометры обладают таким уникальным UUID для своей непосредственной службы измерения ЧСС. Список всех UUID можно также найти в спецификации, из которой я нашел нужный: «0x180D». Добавим новую константу в проект над объявленными ранее outlets:
Также обновим метод «centralManager.scanForPeripherals(withServices: nil)» добавив в него вышенаписанный идентификатор пульсометра:
Теперь центральный менеджер находится в поиске устройств с данным UUID, и после некоторого времени в консоли появиться заветное устройство:
Теперь необходимо создать переменную в проекте, с которой мы сможем связать данное устройство, для этого рядом с «var centralManager: CBCentralManager!» напишем:
А в методе «didDiscover peripheral» свяжем найденное устройство с вышеобъявленной переменной и прекратим поиск новых устройств с помощью метода:
Подключаемся к пульсометру
Для этого напишем под строкой «centralManager.stopScan()»:
Нам уже удалось подключиться к пульсометру, но чтобы это действительно увидеть, необходимо реализовать еще один метод делегата «didConnect peripheral» ниже метода «didDiscover peripheral», который автоматически вызывается при подключении нового устройства:
Собираем проект, запускаем на устройстве и видим в консоле заветное «Соединение установлено». Хороший результат, теперь двигаемся дальше.
Получаем список сервисов с пульсометра
После того, как соединение установлено, необходимо сделать запрос об услугах (сервисах), которые данный пульсометр готов предоставить. Для этого после установки соединения вызовем метод «heartRatePeripheral.discoverServices()» в методе «didConnect», который примет следующий вид:
Запрос на получение сервисов сделан, а чтобы их увидеть и начать с ними работать, необходимо расширить класс протоколом «CBPeripheralDelegate» в самом низу нашего проекта и вызвать метод «peripheral(_:didDiscoverServices:)» следующим образом:
Метод получает сервисы, сообщает об этом центральному менеджеру и выводит их в консоль. В данный момент консоль будет пуста, так как необходимо делегировать данный протокол периферийному устройству «heartRatePeripheral». Сделаем это после инициализации периферийного устройства в следующем методе:
Отлично, делегат обьявлен, метод получения сервисов написан, запустим программу на телефоне и получим в консоль список служб пульсометра:
Не все сервисы нам интересны и оставить необходимо лишь первый. Для этого можно провести так называемую фильтрацию с помощью идентификатора UUID в методе «heartRatePeripheral.discoverServices()»
Вот теперь список служб отобразится в виде » «, из которой мы сможем извлечь нужные нам характеристики — ящики (№ шкафа мы уже получили).
Достаем характеристики из шкафа
Шкаф-сервис нам известен, осталось посмотреть, что он предлагает и получить это. Сделаем запрос на получение характеристик, для этого в теле метода «didDiscoverServices — peripheral» реализуем метод — поиск:
Теперь доступный сервис будет посылать свои характеристики, а увидеть мы их сможем в самостоятельном методе делегата «CBPeripheralDelegate» под названием «didDiscoverCharacteristicsFor». Реализуем его и выведем в консоль все доступные характеристики:
Запускаем программу, видим, что характеристики получены, а консоль заполнилась следующими строками:
Видно, что у данной службы две характеристики, имеющие два уникальных идентификатора. Из спецификации на Bluetooth узнаем, что UUID = 2A37 отвечает за измерение ЧСС, а UUID = 2A38 за положение датчика на теле. Положение датчика на теле не самая интересная характеристика в данной теме, но будет полезно считать и ее.
Для удобства добавим в проект два уникальных идентификатора данных характеристик следующим образом:
Характеристики отличаются друг от друга типами свойств. Например, характеристика ЧСС имеет свойство «.notify» т.е. она уведомляет об изменении значения ЧСС, а характеристика положения на теле имеет свойство «.read», т.е. может быть считана напрямую. Данное пояснение необходимо, чтобы правильно получить значения из них.
Положение пульсометра на теле
Характеристика выведена консоль, теперь нужно лишь реализовать метода считывая значений из нее. Для этого напишем запрос на чтение значений «peripheral.readValue(for: characteristic)»
Запрос написан, как вы догадываетесь, нужно реализовать еще один метод «peripheral(_:didUpdateValueFor:error:)» делегата «CBPeripheralDelegate», который будет в асинхронном режиме получать ответ с данного запроса, причем в данном методе напишем конструкцию «switch — case», чтобы была возможность разделить характеристики по уникальному идентификатору:
В консоли после выполнения данной программы появится строка «1 bytes». Это нужный результат, потому что мы пытались вывести объект типа «data».
Чтобы «распасить» данный байт, необходимо снова прибегнуть к спецификации, из которой мы сможем понять, как данный байт заполнен. Ускоряя результат, реализуем ниже функцию получения строки положения на теле датчика ЧСС из этого байта:
И теперь вызовем данную функцию в методе «didUpdateValueFor characteristic», одновременно выводя результат на экран телефона (не забудем показать скрытый label для положения датчика):
Ура! Характеристика успешно получена, прочитана и выведена на экран!
Не совсем ясно, где еще можно носить данный пульсометр, поэтому существует данная характеристика 🙂
Получение ЧСС и вывод на экран пользователя
Осталось совсем немного, и теперь нужно получить значения из характеристики ЧСС. Как мы помним, у нее тип значения «.notify», поэтому нам нужно как бы «подписаться на нее», чтобы она присылала обновленные значения ЧСС. Для этого нужно выполнить метод «peripheral.setNotifyValue(true, for: characteristic)» в функции «didDiscoverCharacteristicsFor service:
Если запустить приложение, то в консоли появятся стоки:
Unhandled Characteristic UUID: 2A37
Unhandled Characteristic UUID: 2A37
Unhandled Characteristic UUID: 2A37
Именно в этой характеристики и лежат данные о ЧСС. Теперь необходимо провернуть такую же развертку этих данных, обращаясь к спецификации. В некоторых моделях данные могут быть представлены либо 1 либо 2 байтами. Чтобы не получить конфуз, реализуем метод для «парсинга» этих данных в нужном порядке в протоколе «CBPeripheralDelegate».
И, наконец, добавим еще один case в методе «peripheral(_:didUpdateValueFor:error:)», в котором получим ЧСС, а также обновим и покажем label пользовательского интерфейса:
Теперь данные с пульсометра выводятся на экран телефона. Я даже слегка нервничаю 🙂
Итоги
В целом гайд по использованию Bluetooth для подключения датчика ЧСС вышел немного большим и местами сложным, надеюсь, что основной смысл мне удалось донести. Конечно, есть еще несколько нереализованных методов, которые можно было бы добавить (например, метод переподключения при обрыве соединения), но я посчитал этого набора достаточным, чтобы в меру оценить лаконичность и удобность библиотеки на swift CoreBluetooth.
Источник