Heart rate sensor как подключить
Перейти к содержимому

Heart rate sensor как подключить

  • автор:

Suunto Smart Heart Rate Belt Руководство пользователя

Чтобы просматривать частоту сердцебиения, нужно подключить модуль Suunto Smart Sensor к совместимому устройству Bluetooth® Smart (другими словами, выполнить сопряжение).

Процедура сопряжения может различаться, поэтому см. инструкции к мобильному приложению или спортивным часам. Перед сопряжением убедитесь, что другие устройства Bluetooth находятся на расстоянии 10 м или дальше.

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

Для мобильных устройств и смарт-часов рекомендуем использовать бесплатное приложение Sports Tracker App с функциями отслеживания спортивной активности, совместимое с пульсометром.

    Country and language
  • Поддержка
  • ВОЗВРАТ ТОВАРА И ВОЗМЕЩЕНИЕ ДЕНЕЖНЫХ СРЕДСТВ
  • Главная страница поддержки
  • Обновления ПО
  • Руководства пользователя
  • Ремонтный центр Suunto
  • Сервисные центры
  • Tutorial Tuesday
  • Свяжитесь с нами
  • Где купить
  • Интернет-магазин Suunto
  • Часто задаваемые вопросы oб интернет-магазине Suunto
  • УСЛОВИЯ И ПОЛОЖЕНИЯ ПРОДАЖИ
  • О компании Suunto
  • Новости
  • Информация о компании
  • Careers
  • Наследие
  • Информация для СМИ
  • Sustainability
  • Декларация соответствия (ЕС)
  • Whistleblowing
  • Партнеры
  • Strava
  • TrainingPeaks
  • Value Pack
  • Приветствие для партнеров
  • Партнеры
    Country and language

Magene H64 — подробный обзор нагрудного пульсометра

Нагрудный пульсометр Magene H64 – это недорогой китайский датчик пульса для занятий спортом. Он оборудован двумя каналами связи Bluetooth и ANT+, благодаря чему может передавать данные не только на телефон и планшет, но и на спортивные часы, велокомпьютеры и тренажеры. Батареи хватит на 1000 часов тренировок, а его точность не уступает профессиональным пульсометрам от таких брендов как Polar и Garmin.

В данной статье мы подробно расскажем о Magene H64 и проверим его в «боевых условиях». Есть также видео вариант обзора, поэтому если лень читать, то можете посмотреть). А мы переходим к обзору.

Отзывы

  • Отзывы о магазине
  • Polar H10 — отзыв любителя бега, плавания и велоспорта
  • Отзыв о Polar Ignite после месяца эксплуатации

Датчик частоты сердечных сокращений Polar H10 Руководство пользователя

Датчик сердечного ритма Polar-H10

В данном руководстве пользователя содержатся инструкции к датчику частоты сердечных сокращений Polar H10.

Polar H10 — это сверхточный датчик частоты пульса, который поставляется с нагрудным ремнем Polar Pro. Polar H10, обеспечивающий высококачественные электрические измерения без помех, по мнению многих источников, является наиболее точным датчиком частоты сердечных сокращений. Polar H10 подключает и передает данные через Bluetooth® и ANT + ™, предлагая широкий выбор вариантов подключения к совместимым спортивным часам, смарт-часам и приложениям для тренировок. Вы также можете иметь два одновременных соединения Bluetooth. Polar H10 имеет внутреннюю память на одну тренировку, и вы можете синхронизировать ее с Polar Beat впоследствии. Нагрудный ремень Polar Pro можно стирать в стиральной машине.

Последнюю версию этого руководства пользователя и видеоуроки можно найти по адресу support.polar.com/en/H10_heart_rate_sensor.

ЧАСТИ ДАТЧИКА ЧСС
  1. Пластик области электродов на обратной стороне ремешка определить частоту сердечных сокращений
  2. Разъем отправляет сигнал частоты пульса на принимающее устройство.
НОШЕНИЕ ДАТЧИКА ЧСС
  1. Смочите область электродов на ремешке.
  2. Закрепите ремешок на груди и отрегулируйте его, чтобы он плотно сидел.
  3. Присоедините разъем.

Отсоединяйте соединитель от ремешка и промывайте ремешок под проточной водой после каждого использования. Из-за пота и влаги электроды могут оставаться влажными, а датчик сердечного ритма может активироваться. Это сократит срок службы батареи передатчика.
См. Подробные инструкции по стирке в разделе «Уход за датчиком пульса» или на сайте support.polar.com.

НАЧАЛО РАБОТЫ

Датчик частоты пульса Polar H10 совместим с устройствами Bluetooth® и ANT + ™, которые поддерживают службу частоты пульса. Для view данные о частоте пульса на принимающем устройстве (например,ampле, смартфон). Рекомендуется использовать приложение Polar Beat, но также можно использовать другие приложения.

Обратите внимание, что H10 передает сигнал частоты пульса одновременно через Bluetooth и ANT +. Вы можете отключить передачу ANT + в настройках Beat в HRsensor.

Если у вас есть учетная запись Polar Flow, Polar Beat автоматически синхронизирует ваши тренировки. fileс этим. Обратите внимание, что вы должны войти в свою учетную запись Polar Flow при запуске Polar Beat, чтобы синхронизация работала.

При первом использовании Polar H10 необходимо выполнить сопряжение датчика частоты пульса с принимающим устройством. Дополнительные сведения о сопряжении см. В инструкциях производителя мобильного приложения.

Датчик частоты сердечных сокращений Polar H10 также совместим с тренировочными компьютерами Polar, использующими технологию GymLink. Для получения дополнительной информации перейдите на support.polar.com.

Чтобы обеспечить достаточный диапазон передачи от датчика частоты сердечных сокращений Polar H10 к принимающему устройству, держите устройство перед собой. Хорошее место — в переднем кармане или на поясе. Не носите приемное устройство на спине (например,ampле, в заднем кармане или рюкзаке).

СОПРЯЖЕНИЕ
СОПРЯЖЕНИЕ С POLAR BEAT
  1. Носить датчик.
  2. Откройте приложение Polar Beat на своем устройстве Android или iOS.
  3. Перейдите в раздел настроек приложения и найдите HRsensor. Когда ваш датчик будет найден, нажмите СОПРЯЖЕНИЕ

Обратите внимание, что H10 передает сигнал частоты пульса одновременно через Bluetooth и ANT +. Вы можете отключить передачу ANT + в настройках Beat в HRsensor.

СОПРЯЖЕНИЕ С ПОЛЯРНЫМ БЛОКОМ ЗАПЯСТЬЯ

При сопряжении датчик необходимо носить.

Ознакомьтесь с руководством пользователя наручного устройства Polar по адресу support.polar.com для получения конкретных инструкций по сопряжению.

ДАТЧИК ПАМЯТИ

H10 имеет внутреннюю память, в которой можно хранить данные о частоте пульса за одну тренировку. Вы начинаете тренировку в мобильном приложении Polar Beat, и оно также передает данные с датчика после тренировки. Это особенно удобно в спорте, где нельзя брать с собой мобильный телефон или наручный компьютер.

  1. Носить ваш датчик.
  2. Откройте приложение Polar Beat на своем мобильном телефоне. в паре ваш датчик с помощью.
  3. Выберите свой спортивный профессионалfile, коснитесь трех точек в правом верхнем углу, Сохранить ЧСС с датчиком и Start
  4. После тренировки вы можете остановить запись, нажав кнопку остановки на дисплее или отсоединив разъем от ремешка.

Когда вы вернетесь в зону действия Bluetooth вашего мобильного телефона, Beat автоматически предложит загрузить завершенную тренировку из памяти датчика и синхронизировать ваш дневник Flow. Если вы сняли коннектор с ремешка. прикрепите его обратно к ремешку и наденьте датчик на грудь, чтобы обеспечить успешное подключение к Beat и плавную передачу данных.

ИСПОЛЬЗОВАНИЕ ДАТЧИКА ЧСС В ВОДЕ

Датчик частоты сердечных сокращений Polar H10 водонепроницаем. Технология GymLink может использоваться при занятиях водными видами спорта, но беспроводная технология Bluetooth® не работает в воде. Вы все еще можете запись ваш пульс во время заплыва, а затем передайте данные в мобильное приложение Polar Beat. Обратите внимание на то, что морская вода и вода в бассейне обладают высокой проводимостью, и электроды могут замыкаться накоротко, что препятствует обнаружению электрически измеряемых сигналов датчиком частоты сердечных сокращений.

При использовании купального костюма наилучшая эффективность достигается за счет ношения под ним датчика частоты пульса.

ОБНОВЛЕНИЕ ПРОШИВКИ

С датчиком частоты сердечных сокращений Polar H10 мы сможем обновить ваш датчик, чтобы улучшить его или даже добавить в него новые функции. Вы сможете обновить прошивку через мобильное приложение Polar Beat или Polar Flow.

Чтобы получать обновления прошивки, ваш датчик частоты пульса H10 должен быть сопряжен с приложением Polar Beat или Polar Flow, Android или iOS. Приложение сообщит вам, доступно ли обновление, и проведет вас через него.

Сопряжение датчиков необходимо после обновления / замены батареи, если вы используете H10 с Polar A360, M400, A300, M450, V650, M200, M600 или сторонним приложением / устройством. См. Инструкции.

УХОД ЗА ДАТЧИКОМ ЧСС

Датчик частоты пульса — это высокотехнологичный прибор, с которым следует обращаться осторожно. Следуйте инструкциям по уходу, чтобы обеспечить надежные измерения и продлить срок службы датчика частоты пульса. Следующие инструкции помогут вам выполнить гарантийные обязательства.

Разъем: Отсоединяйте соединитель от ремешка после каждого использования и сушите соединитель мягким полотенцем. При необходимости очистите разъем слабым мыльным раствором. Никогда не используйте спирт или какие-либо абразивные материалы (например, стальную мочалку или чистящие химикаты).

Ремешок: Промывайте ремешок под проточной водой после каждого использования и сушите. При необходимости осторожно очистите ремешок мягким мыльным раствором. Не используйте увлажняющее мыло, так как оно может оставить следы на ремешке. Не замачивать, не гладить, не подвергать химчистке и не отбеливать ремешок. Не растягивайте ремешок и не перегибайте участки электродов.

Высушите и храните ремешок и разъем отдельно, чтобы продлить срок службы батареи датчика ЧСС. Храните датчик частоты пульса в прохладном и сухом месте. Не храните датчик сердечного ритма влажным в недышащем материале, например в спортивной сумке, во избежание его окисления. Не подвергайте датчик частоты пульса воздействию прямых солнечных лучей в течение длительного времени.

Проверьте этикетку на ремешке, чтобы узнать, можно ли его стирать в стиральной машине. Ни в коем случае не кладите ремешок или разъем в сушилку!

Батареи

Уровень заряда батареи вашего датчика пульса отображается на принимающем устройстве.

Все разъемы оснащены сменными батареями. Чтобы заменить аккумулятор самостоятельно, следуйте приведенным ниже инструкциям.

  1. Поднимите крышку батарейного отсека с помощью небольшого инструмента с плоской головкой.
  2. Снимите старую батарею с крышки батарейного отсека.
  3. Вставьте новую батарею (CR2025) внутрь крышки отрицательной (-) стороной наружу.
  4. Совместите выступ на крышке аккумуляторного отсека с прорезью на разъеме и нажмите на крышку аккумуляторного отсека на место. Вы должны услышать щелчок.

Сопряжение датчиков необходимо после обновления / замены батареи, если вы используете H10 с Polar A360, M400, A300, M450, V650, M200, M600 или сторонним приложением / устройством. См. Инструкции.

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

Вы можете приобрести комплекты уплотнительных колец / аккумуляторов в хорошо оснащенных розничных магазинах Polar и в авторизованных сервисных центрах Polar. В США и Канаде дополнительные уплотнительные кольца доступны в авторизованных сервисных центрах Polar. В США комплекты уплотнительного кольца / аккумулятора также доступны на сайте www.shoppolar.com.

Храните батарейки в недоступном для детей месте. При проглатывании немедленно обратитесь к врачу. Батареи следует утилизировать в соответствии с местными правилами.

ТЕХНИЧЕСКИЕ ХАРАКТЕРИСТИКИ
  • Кодированная передача OwnCode®

Использует беспроводные технологии Bluetooth® и ANT + ™.

Подключаем нагрудный датчик пульса по 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

Тут все просто, для подключения библиотеки воспользуемся следующей строчкой:

import CoreBluetooth

Вспомним, что по протоколу у нас существуют так называемые центральные и периферийные устройства, логично предположить, что основной функционал работы данного протокола будет исполнен методами делегатов централи и периферии.

Для начала создадим переменную центрального (главного) устройства в проекте рядом с объявлением других переменных:

var centralManager: CBCentralManager!

Теперь, чтобы получить доступ к методам необходимо назначить ViewController делегатом, но предварительно подпишем его под протокол CBCentralManagerDelegate. Сделать это предлагаю в extension ViewController, так будет рациональнее.

extension ViewController: CBCentralManagerDelegate <>

Xcode на такое пользовательское действие отреагирует ошибкой: «Type ‘ViewController’ does not conform to protocol ‘CBCentralManagerDelegate'», оповещая, что данный протокол требует обязательную реализацию метода: «func centralManagerDidUpdateState(_ central: CBCentralManager)». Нажмем «fix», добавив этот метод в проект. Данный метод нужен для автоматической проверки состояния центрального менеджера, которого мы создали ранее.

Чтобы отобразить все состояния центрального менеджера, в теле метода «func centralManagerDidUpdateState(_ central: CBCentralManager)» напишем:

 func centralManagerDidUpdateState(_ central: CBCentralManager)

Xcode автоматически предложит вставить все возможные состояния данного условия, соглашаемся с ним. А в каждом из состояний напишем функцию print(«это состояние»):

 extension ViewController: CBCentralManagerDelegate < func centralManagerDidUpdateState(_ central: CBCentralManager) < switch central.state < case .unknown: print ("central.state is unknown") case .resetting: print ("central.state is resetting") case .unsupported: print ("central.state is unsupported") case .unauthorized: print ("central.state is unauthorized") case .poweredOff: print ("central.state is poweredOff") case .poweredOn: print ("central.state is poweredOn") @unknown default: break >> >

Теперь нам осталось проинициализировать переменную «centralManager» и задать ей делегирование. Сделаем это в методе «viewDidLoad», а в качестве параметра очереди напишем «nil», определяя всю работу про Bluetooth в главной очереди.

override func viewDidLoad()

Собираем проект, запускаем на устройстве с включенным Bluetooth, видим системный запрос за его использование, соглашаемся и получаем в консоль заветное сообщение «central.state is poweredOn«, которое сигнализирует нам о том, что центральный менеджер готов к работе. Если выключить Bluetooth на телефоне, то в консоли появится логичное «central.state is poweredOff«.

Поиск Bluetooth устройств

Центральный менеджер ждет дальнейших указаний, и сейчас он их получит. Для этого в методе «centralManagerDidUpdateState» в случае «.poweredOn» после метода «print» пишем:

centralManager.scanForPeripherals(withServices: nil)

Менеджер начнет сканировать все доступные вокруг устройства, а чтобы мы смогли увидеть их в консоли приложения, необходимо реализовать метод делегата в extension ViewController ниже метода «centralManagerDidUpdateState» следующим образом:

 func centralManager(_ central: CBCentralManager, didDiscover peripheral: CBPeripheral, advertisementData: [String : Any], rssi RSSI: NSNumber)

Запускаем приложение. И теперь в консоли мы можем увидеть множество всех доступных для подключения устройств. Замечательно! Одним из них и является необходимый для подключения пульсометр. Но чтобы упростить поиск пульсометра, можно воспользоваться некоторой хитростью, которую я сейчас покажу.

Идентификатор служб UUID

Я ранее упомянул наличие данного идентификатора в протоколе Bluetooth как уникальную характеристику для различных устройств, поэтому могу сказать вам, что пульсометры обладают таким уникальным UUID для своей непосредственной службы измерения ЧСС. Список всех UUID можно также найти в спецификации, из которой я нашел нужный: «0x180D». Добавим новую константу в проект над объявленными ранее outlets:

let heartRateUUID = CBUUID(string: "0x180D")

Также обновим метод «centralManager.scanForPeripherals(withServices: nil)» добавив в него вышенаписанный идентификатор пульсометра:

case .poweredOn: print ("central.state is poweredOn") centralManager.scanForPeripherals(withServices: [heartRateUUID] )

Теперь центральный менеджер находится в поиске устройств с данным UUID, и после некоторого времени в консоли появиться заветное устройство:

Теперь необходимо создать переменную в проекте, с которой мы сможем связать данное устройство, для этого рядом с «var centralManager: CBCentralManager!» напишем:

var heartRatePeripheral: CBPeripheral!

А в методе «didDiscover peripheral» свяжем найденное устройство с вышеобъявленной переменной и прекратим поиск новых устройств с помощью метода:

 func centralManager(_ central: CBCentralManager, didDiscover peripheral: CBPeripheral, advertisementData: [String : Any], rssi RSSI: NSNumber)

Подключаемся к пульсометру

Для этого напишем под строкой «centralManager.stopScan()»:

centralManager.connect(heartRatePeripheral, options: nil)

Нам уже удалось подключиться к пульсометру, но чтобы это действительно увидеть, необходимо реализовать еще один метод делегата «didConnect peripheral» ниже метода «didDiscover peripheral», который автоматически вызывается при подключении нового устройства:

func centralManager(_ central: CBCentralManager, didConnect peripheral: CBPeripheral)

Собираем проект, запускаем на устройстве и видим в консоле заветное «Соединение установлено». Хороший результат, теперь двигаемся дальше.

Получаем список сервисов с пульсометра

После того, как соединение установлено, необходимо сделать запрос об услугах (сервисах), которые данный пульсометр готов предоставить. Для этого после установки соединения вызовем метод «heartRatePeripheral.discoverServices()» в методе «didConnect», который примет следующий вид:

func centralManager(_ central: CBCentralManager, didConnect peripheral: CBPeripheral)

Запрос на получение сервисов сделан, а чтобы их увидеть и начать с ними работать, необходимо расширить класс протоколом «CBPeripheralDelegate» в самом низу нашего проекта и вызвать метод «peripheral(_:didDiscoverServices:)» следующим образом:

extension ViewController: CBPeripheralDelegate < func peripheral(_ peripheral: CBPeripheral, didDiscoverServices error: Error?) < guard let services = peripheral.services else < return >for service in services < print(service) >> > 

Метод получает сервисы, сообщает об этом центральному менеджеру и выводит их в консоль. В данный момент консоль будет пуста, так как необходимо делегировать данный протокол периферийному устройству «heartRatePeripheral». Сделаем это после инициализации периферийного устройства в следующем методе:

 func centralManager(_ central: CBCentralManager, didDiscover peripheral: CBPeripheral, advertisementData: [String : Any], rssi RSSI: NSNumber)

Отлично, делегат обьявлен, метод получения сервисов написан, запустим программу на телефоне и получим в консоль список служб пульсометра:

Не все сервисы нам интересны и оставить необходимо лишь первый. Для этого можно провести так называемую фильтрацию с помощью идентификатора UUID в методе «heartRatePeripheral.discoverServices()»

heartRatePeripheral.discoverServices([heartRateUUID])

Вот теперь список служб отобразится в виде » «, из которой мы сможем извлечь нужные нам характеристики — ящики (№ шкафа мы уже получили).

Достаем характеристики из шкафа

Шкаф-сервис нам известен, осталось посмотреть, что он предлагает и получить это. Сделаем запрос на получение характеристик, для этого в теле метода «didDiscoverServices — peripheral» реализуем метод — поиск:

extension ViewController: CBPeripheralDelegate < func peripheral(_ peripheral: CBPeripheral, didDiscoverServices error: Error?) < guard let services = peripheral.services else < return >for service in services < peripheral.discoverCharacteristics(nil, for: service) >> >

Теперь доступный сервис будет посылать свои характеристики, а увидеть мы их сможем в самостоятельном методе делегата «CBPeripheralDelegate» под названием «didDiscoverCharacteristicsFor». Реализуем его и выведем в консоль все доступные характеристики:

func peripheral(_ peripheral: CBPeripheral, didDiscoverCharacteristicsFor service: CBService, error: Error?) < guard let characteristics = service.characteristics else < return >for characteristic in characteristics < print(characteristic) >>

Запускаем программу, видим, что характеристики получены, а консоль заполнилась следующими строками:

Видно, что у данной службы две характеристики, имеющие два уникальных идентификатора. Из спецификации на Bluetooth узнаем, что UUID = 2A37 отвечает за измерение ЧСС, а UUID = 2A38 за положение датчика на теле. Положение датчика на теле не самая интересная характеристика в данной теме, но будет полезно считать и ее.

Для удобства добавим в проект два уникальных идентификатора данных характеристик следующим образом:

 let heartRateUUID = CBUUID(string: "0x180D") let heartRateCharacteristicCBUUID = CBUUID(string: "2A37") let bodyLocationCharacteristicCBUUID = CBUUID(string: "2A38")

Характеристики отличаются друг от друга типами свойств. Например, характеристика ЧСС имеет свойство «.notify» т.е. она уведомляет об изменении значения ЧСС, а характеристика положения на теле имеет свойство «.read», т.е. может быть считана напрямую. Данное пояснение необходимо, чтобы правильно получить значения из них.

Положение пульсометра на теле

Характеристика выведена консоль, теперь нужно лишь реализовать метода считывая значений из нее. Для этого напишем запрос на чтение значений «peripheral.readValue(for: characteristic)»

 func peripheral(_ peripheral: CBPeripheral, didDiscoverCharacteristicsFor service: CBService, error: Error?) < guard let characteristics = service.characteristics else < return >for characteristic in characteristics < peripheral.readValue(for: characteristic) >>

Запрос написан, как вы догадываетесь, нужно реализовать еще один метод «peripheral(_:didUpdateValueFor:error:)» делегата «CBPeripheralDelegate», который будет в асинхронном режиме получать ответ с данного запроса, причем в данном методе напишем конструкцию «switch — case», чтобы была возможность разделить характеристики по уникальному идентификатору:

func peripheral(_ peripheral: CBPeripheral, didUpdateValueFor characteristic: CBCharacteristic, error: Error?) < switch characteristic.uuid < case bodySensorLocationCharacteristicCBUUID: print(characteristic.value ?? "no value") default: print("Unhandled Characteristic UUID: \(characteristic.uuid)") >>

В консоли после выполнения данной программы появится строка «1 bytes». Это нужный результат, потому что мы пытались вывести объект типа «data».

Чтобы «распасить» данный байт, необходимо снова прибегнуть к спецификации, из которой мы сможем понять, как данный байт заполнен. Ускоряя результат, реализуем ниже функцию получения строки положения на теле датчика ЧСС из этого байта:

 private func bodyLocation(from characteristic: CBCharacteristic) -> String < guard let characteristicData = characteristic.value, let byte = characteristicData.first else < return "Error" >switch byte < case 0: return "Другое" case 1: return "Грудь" case 2: return "Запястье" case 3: return "Палец" case 4: return "Ладонь" case 5: return "Мочка уха" case 6: return "Нога" default: return "Резерв" >>

И теперь вызовем данную функцию в методе «didUpdateValueFor characteristic», одновременно выводя результат на экран телефона (не забудем показать скрытый label для положения датчика):

 func peripheral(_ peripheral: CBPeripheral, didUpdateValueFor characteristic: CBCharacteristic, error: Error?) < switch characteristic.uuid < case bodyLocationCharacteristicCBUUID: let bodySensorLocation = bodyLocation(from: characteristic) bodyLocationLabel.text = bodySensorLocation bodyLocationLabel.isHidden = false default: print("Unhandled Characteristic UUID: \(characteristic.uuid)") >>

Ура! Характеристика успешно получена, прочитана и выведена на экран!

Не совсем ясно, где еще можно носить данный пульсометр, поэтому существует данная характеристика 🙂

Получение ЧСС и вывод на экран пользователя

Осталось совсем немного, и теперь нужно получить значения из характеристики ЧСС. Как мы помним, у нее тип значения «.notify», поэтому нам нужно как бы «подписаться на нее», чтобы она присылала обновленные значения ЧСС. Для этого нужно выполнить метод «peripheral.setNotifyValue(true, for: characteristic)» в функции «didDiscoverCharacteristicsFor service:

func peripheral(_ peripheral: CBPeripheral, didDiscoverCharacteristicsFor service: CBService, error: Error?) < guard let characteristics = service.characteristics else < return >for characteristic in characteristics < peripheral.readValue(for: characteristic) peripheral.setNotifyValue(true, for: characteristic) >>

Если запустить приложение, то в консоли появятся стоки:

Unhandled Characteristic UUID: 2A37

Unhandled Characteristic UUID: 2A37

Unhandled Characteristic UUID: 2A37

Именно в этой характеристики и лежат данные о ЧСС. Теперь необходимо провернуть такую же развертку этих данных, обращаясь к спецификации. В некоторых моделях данные могут быть представлены либо 1 либо 2 байтами. Чтобы не получить конфуз, реализуем метод для «парсинга» этих данных в нужном порядке в протоколе «CBPeripheralDelegate».

 private func heartRate(from characteristic: CBCharacteristic) -> Int < guard let characteristicData = characteristic.value else < return -1 >let byteArray = [UInt8](characteristicData) let firstBitValue = byteArray[0] & 0x01 if firstBitValue == 0 < return Int(byteArray[1]) >else < return (Int(byteArray[1]) >

И, наконец, добавим еще один case в методе «peripheral(_:didUpdateValueFor:error:)», в котором получим ЧСС, а также обновим и покажем label пользовательского интерфейса:

 func peripheral(_ peripheral: CBPeripheral, didUpdateValueFor characteristic: CBCharacteristic, error: Error?) < switch characteristic.uuid < case bodyLocationCharacteristicCBUUID: let bodySensorLocation = bodyLocation(from: characteristic) bodyLocationLabel.text = bodySensorLocation bodyLocationLabel.isHidden = false case heartRateCharacteristicCBUUID: let bpm = heartRate(from: characteristic) heartRateLabel.text = String(bpm) heartRateLabel.isHidden = false default: print("Unhandled Characteristic UUID: \(characteristic.uuid)") >>

Теперь данные с пульсометра выводятся на экран телефона. Я даже слегка нервничаю 🙂

Итоги

В целом гайд по использованию Bluetooth для подключения датчика ЧСС вышел немного большим и местами сложным, надеюсь, что основной смысл мне удалось донести. Конечно, есть еще несколько нереализованных методов, которые можно было бы добавить (например, метод переподключения при обрыве соединения), но я посчитал этого набора достаточным, чтобы в меру оценить лаконичность и удобность библиотеки на swift CoreBluetooth.

  • Разработка под iOS
  • Разработка мобильных приложений
  • Swift

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *