Z из Python. Перезагрузил Raspberry и включил адаптер. Статус адаптера проверил командой hciconfig piraspberrypi hciconfig. Type BREDR Bus USB. BD Address 5. C F3 7. E F5 ACL MTU 1. SCO MTU 6. RX bytes 6. 16 acl 0 sco 0 events 3. TX bytes 3. 80 acl 0 sco 0 commands 3. Флаг DOWN показал, что адаптер выключен, включил его командой. Прежде чем писать код для Raspberry, мне нужно было убедиться, что все необходимые мне сервисы частота пульса, уровень заряда аккумулятора и виброзвонок доступны в терминальном режиме из Blue. Z. Это так называемый низкий уровень секретности, он используется по умолчанию. Список доступных сервисов выводится командой primary. Получилось два общих сервиса generic, два сервиса, заданных производителем fee. Работа С Bluez Linux' title='Работа С Bluez Linux' />Устанавливаем пакет для работы с устройствами Bluetooth, а также драйвер для ALSA sudo aptget install bluez bluezalsa Получаем. В Linux канонической реализацией стека протоколов Bluetooth является. Пакет bluez предоставляет стек Bluetooth протокола, а пакет. Я решил остановиться на Bluez, т. Он является выбором многих других дистрибутивов, таких как SuSE, Mandrake, Debian и Gentoo. По проблемам работы интернетмагазина, функционирования сайта. Работа С Bluez Linux' title='Работа С Bluez Linux' />HRM сервис 1. Нашел в списке характеристику с идентификатором ff. Указатель 0x. 00. Попробовал считать данные командой char read hnd прочитать данные по указателю Батарейка сдалась первой. В ответе не только уровень заряда, это первый байт в hex смартфон накануне показывал 7. По условиям задачи мне нужен был только уровень. Вторым покорился виброзвонок. По данным из MCP я предположил, что это Immediate Alert, а Alert Level это команда, которую нужно послать на идентификатор 0x. A0. 6 В списке характеристик, этому идентификатору соответствует строка handle 0x. Отправил команду на указатель 0x. С частотой пульса оказалось вс значительно сложнее. MCP показал следующее Связанные с этим сервисом характеристики handle 0x. Частота пульса передается в смартфон в режиме нотификации или push уведомления, е нельзя считать как уровень заряда аккумулятора. Нужно разрешить нотификацию, записав в CCC Client Characteristic Configuration с указателем 0x. CCC всегда 2. 90. Ничего не вышло, значение успешно записывалось, но никаких уведомлений не поступало, браслет просто отключался через несколько секунд. Запуск gatttool в консольном режиме с ключом listen также не дал результатов, gatttool просто зависал в ожидании. Загадка, одним словом. Для прояснения ситуации пришлось использовать BLE сниффер на ноутбуке с Windows 8. В основе был перепрошитый BLE usb донгл на чипе СС2. Texas Instruments и программа Smart Packet Sniffer того же производителя. Вс необходимое, включая программатор, можно без труда найти в виде набора для разработчика, а программу и прошивку я свободно скачал с сайта TI. Важно Запускать сниффер следует, когда браслет находится в режиме презентации advertising mode, т. Иначе он будет невидим. Также неплохо убрать все лишние BLE устройства подальше от сниффера, а еще лучше экранировать, это очень помогает потом разобраться в логе. Так выглядят пакеты в сниффере в режиме презентации Определил, что это именно мой браслет по полю Adv. A Advertising Address. После установления связи со смартфоном, в режиме GATT соединения, картина изменилась Здесь как раз видно, как значение 0. CCC с указателем 0x. C, разрешая уведомления о частоте пульса. Один из исследователей предыдущей версии браслета в своем блоге написал, что не все сервисы могут быть доступны анонимному устройству. Насколько я смог разобраться, в ряде случаев устройство, взаимодействующее с браслетом, должно передать в браслет корректную информацию о пользователе, которая частично хешируется при спаривании со смартфоном. Эти данные длиной в 2. Первые четыре байта это uid смартфона, далее, в открытом виде байты пола, возраста, роста, веса, байт разрешения перезаписи должен быть 0. Считать user info из браслета у меня не получилось. При анализе пакетов удалось выяснить следующее Каждый раз при соединении в браслет отправляются все разрешения уведомлений CCC с идентификатором 2. Далее происходит передача информации о пользователе. Затем, по указателю 0x. После этого считываются данные об уровне заряда батареи и количество пройденных за день шагов. Перед тем как получить уведомление о частоте пульса по указателю 0x. E, соответствующему характеристике точка контроля пульса записывается последовательность 0x. Затем туда же записывается 0x. После этого, через 1. Второй байт и есть частота пульса в hex. В теории, для того чтобы получить частоту пульса, нужно было повторить все эти транзакции, возможно исключив 3 й и 4 й пункты. Как оказалось, можно обойтись и без сброса. Вручную это сделать невозможно, браслет отключился бы раньше чем я бы успел ввести все команды. Поэтому я подготовил Python скрипт import sys, pexpect. I. gatt. logfile open. Ответ четыре байта, читать нужно слева направо. Скрипт выводит уровень заряда батареи, отправляет уведомление, ждет и печатает частоту пульса. Загадка решена, осталось научиться отправлять данные в облачный сервис, в качестве которого я решил использовать Thingspeak. Это бесплатный сервис с простым API и готовой визуализацией. Настройка Thingspeak заняла не более пяти минут. Необходимо зарегистрироваться и войти в персональное пространство. Далее, создать новый канал, в настройках канала указать название, количество и метки полей. Сохранить настройки и перейти на вкладку API Keys. Там скопировать API ключ для записи Write API Key После этого переключиться на вкладку Private View если при настройке канала не было указано Make Public. За отправку данных в Thingspeak отвечает вот такая конструкция на Python base. URL https api. Радиус действия ретранслятора 3 4 метра в прямой видимости, что нормально для медицинской палаты. Однако браслет на таком расстоянии легко экранируется ладонью. Работа С Bluez Linux© 2017