Работа С Bluez Linux

Работа С Bluez Linux

Работа С Bluez Linux Rating: 6,0/10 7140reviews

Контроль над браслетом в ритме Blue. Z Хабрахабр. В исследовательском проекте мне потребовался прототип медицинского браслета. Устройство должно было периодически измерять пульс, предупреждая об этом пациента, и отправлять результаты вместе с уровнем заряда батареи в облачный сервис. Таким устройством вполне мог стать и фитнес браслет со стационарным ретранслятором вместо смартфона. Поэтому, прежде чем попытаться собрать прототип своими руками, я решил поэкспериментировать с чем нибудь готовым. Так у меня появился новый Xiaomi mi band 1. S Pulse обзор на Geektimes с оптическим датчиком частоты сердечного ритма. Bluetooth Linux, или Синий зуб на службе cистемного администратора. К тому же алгоритмы работы с RFCOMM у Bluez оказались написаны на. Выбор браслета был связан с его относительно невысокой ценой, хорошим аккумулятором и тем, что измерение пульса инициируется именно со смартфона, а не запускается нажатием кнопки. Эксперименты я начал с изучения набора сервисов и характеристик, доступных через Bluetooth 4. Bluetooth Low Energy, далее BLE. Кое что нетрудно было найти в сети, и эта информация мне очень помогла, но она касалась предыдущей версии, без нужного мне датчика. Поэтому я начал с BLE сканера. Оказалось, что подходящий и, признаться, очень удобный инструмент есть у Nordic Semiconductor. Это Master Control Panel или n. RF MCP для Android 4. Установив приложение на планшет и запустив SCAN, я без труда обнаружили mi band и записал его физический адрес C8 0. F 1. 0 1. 1 1. B 6. E Нажав на OPEN TAB и затем на CONNECT, получил набор сервисов Идентификатор измерителя пульса оказался стандартным для подобных устройств 0x. D. Забегая вперед, скажу, что обрадовался я рано. В качестве ретранслятора я использовал Raspberry Pi модель B и BLE usb адаптер BT4. ASUS. Также потребовались Blue. Z настоящий швейцарский нож для работы с Bluetooth под Linux и пара дополнительных модулей для Python. Подготовка Raspberry Pi. Для Raspberry Pi использовался образ Raspbian. После apt get update и apt get upgrade проверил адаптер piraspberrypi lsusb. Также потребовались BlueZ настоящий швейцарский нож для работы с Bluetooth под Linux и пара дополнительных модулей для. Ядро Linux может использовать различные программные стеки. Самые известные bluez и affix. Я предпочитаю bluez, потому что. Собственно под GNULinux у нас нет выбора BlueZ. Если я верно понимаю типичный способ работы с BlueZ это обращение. Настройка Linux. А вы знаете, что настроить bluetooth соединение с PC на Linux. Bus 0. 01 Device 0. ID 0b. 05 1. 7cb ASUSTek Computer, Inc. Загадкі На Беларускай Мове Пра Жывёл тут. Установил Blue. Z. Рекомендуется скачать последний архив кода, на момент подготовки статьи это был Blue. Z 5. 3. 7, распаковать и скомпилировать. Я же удовлетворился версией 5. Корректность установки можно проверить, выполнив команду gatttool help. В старых версиях gatttool по умолчанию не устанавливался, нужно было прикручивать руками, но здесь help был доступен и значит, у меня есть почти вс необходимое для работы с браслетом. Через pip установил Pexpect для работы с Blue. Работа С Bluez Linux' title='Работа С Bluez Linux' />Работа С Bluez LinuxZ из 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