Оглавление:

Чтение значений с устройства BLE с использованием CSR1010 и Dragonboard 410c: 6 шагов
Чтение значений с устройства BLE с использованием CSR1010 и Dragonboard 410c: 6 шагов

Видео: Чтение значений с устройства BLE с использованием CSR1010 и Dragonboard 410c: 6 шагов

Видео: Чтение значений с устройства BLE с использованием CSR1010 и Dragonboard 410c: 6 шагов
Видео: Windows 10 IoT + Raspberry PI + SPI 2024, Ноябрь
Anonim
Чтение значений с устройства BLE с использованием CSR1010 и Dragonboard 410c
Чтение значений с устройства BLE с использованием CSR1010 и Dragonboard 410c

В этом руководстве показано, как считывать значения с устройства BLE CSR1010 с помощью Dragonboard 410c с Linaro.

В этом примере CSR1010 эмулирует датчик сердечного ритма.

Шаг 1. Сканируйте устройство BLE

На этом этапе проверьте, готов ли ваш клиент BT для сканирования устройств BLE.

корень @ linaro-alip: / home / linaro # sudo hcitool lescan

Сканирование LE… 18: EE: 69: 00: CE: 00 (неизвестно) 18: EE: 69: 00: CE: 00 (неизвестно) EE: 52: 5B: 04: 00: 02 Датчик ЧСС CSR

Шаг 2: Подключение устройства

Мы будем использовать gatttool для подключения нашего устройства

-b: MAC-адрес устройства

-t: тип адреса LE. Может быть общедоступным или случайным, необходимо проверить спецификацию устройства. В этом случае публично.

-I: интерактивный режим gatttool. Откроется запрос на отправку команд на устройство.

корень @ linaro-alip: / home / linaro # sudo gatttool -b EE: 52: 5B: 04: 00: 02 -t public -I

Как только приглашение откроется, мы можем отправить на устройство команду подключения.

[EE: 52: 5B: 04: 00: 02] [LE]> connectПопытка подключения к EE: 52: 5B: 04: 00: 02

Соединение успешно

[EE: 52: 5B: 04: 00: 02] [LE]>

Шаг 3: Получение характеристик устройства

Получение характеристик устройства
Получение характеристик устройства

Как только устройство подключено, мы можем прочитать все доступные службы, отправив cmd "primary"

На основе UUID сервиса мы можем определить тип сервиса в спецификации GATT.

www.bluetooth.com/specifications/gatt/services

Шаг 4: чтение имени устройства

Считывание имени устройства
Считывание имени устройства

Давайте рассмотрим характеристики, указанные в Generic Access Profile (uuid = 1800). Сначала нам нужно получить значения дескрипторов службы, описанные на первом рисунке, в этом случае, начиная с 5 по 11. Теперь мы можем получить все дескрипторы в этом интервале, используя cmd char-desc

[EE: 52: 5B: 04: 00: 02] [LE]> char-desc 05 11handle: 0x0005, uuid: 00002800-0000-1000-8000-00805f9b34fb handle: 0x0006, uuid: 00002803-0000-1000-8000- 00805f9b34fb ручка: 0x0007, uuid: 00002a00-0000-1000-8000-00805f9b34fb ручка: 0x0008, uuid: 00002803-0000-1000-8000-00805f9b34fb ручка: 0x0009, uuid: 00002a01-0000-1000-8000-00805f9b uuid: 00002803-0000-1000-8000-00805f9b34fb handle: 0x000b, uuid: 00002a04-0000-1000-8000-00805f9b34fb handle: 0x000c, uuid: 00002800-0000-1000-8000-00805f9b34fb handle: 0x000d, uuid00: 0000280 -1000-8000-00805f9b34fb handle: 0x000e, uuid: 00002a37-0000-1000-8000-00805f9b34fb handle: 0x000f, uuid: 00002902-0000-1000-8000-00805f9b34fb handle: 0x0010, uuid: 00002803-0000-1000-8000- 00805f9b34fb дескриптор: 0x0011, uuid: 00002a38-0000-1000-8000-00805f9b34fb

Согласно спецификации Generic Access Profile, UUID 2A00 относится к имени устройства.

Учитывая, что 2a00 - это дескриптор 0x0007 в нашем устройстве, давайте прочитаем значение

[EE: 52: 5B: 04: 00: 02] [LE]> char-read-hnd 7Характеристическое значение / дескриптор: 43 53 52 20 48 52 20 53 65 6e 73 6f 72

При преобразовании шестнадцатеричного кода в ASCII имя устройства выглядит следующим образом: «CSR HR Sensor».

Шаг 5: чтение BPM

[EE: 52: 5B: 04: 00: 02] [LE]> дескриптор primaryattr: 0x0001, конечный дескриптор grp: 0x0004 uuid: 00001801-0000-1000-8000-00805f9b34fb attr handle: 0x0005, end grp handle: 0x000b uuid: 00001800-0000-1000-8000-00805f9b34fb Attr handle: 0x000c, end grp handle: 0x0013 uuid: 0000180d-0000-1000-8000-00805f9b34fb attr handle: 0x0014, end grp handle: 0x0017 uuid: 0000180f-0000-1000-8000- 00805f9b34fb дескриптор атрибута: 0x0018, конечный дескриптор grp: 0x0021 uuid: 00001016-d102-11e1-9b23-00025b00a5a5 дескриптор атрибута: 0x0022, конечный дескриптор grp: 0xffff uuid: 0000180a-0000-1000-8000-00805f9b34fb

UUID службы сердечного ритма - 0x180d, поэтому интервал обработки составляет от 0x000c до 0x0013.

[EE: 52: 5B: 04: 00: 02] [LE]> char-desc 0x00c 0x0013

ручка: 0x000c, uuid: 00002800-0000-1000-8000-00805f9b34fb ручка: 0x000d, uuid: 00002803-0000-1000-8000-00805f9b34fb ручка: 0x000e, uuid: 00002a37-0000-1000-8000-00805f9b34fb ручка: 0x000f, uuid: 00002902-0000-1000-8000-00805f9b34fb ручка: 0x0010, uuid: 00002803-0000-1000-8000-00805f9b34fb ручка: 0x0011, uuid: 00002a38-0000-1000-8000-00805f9b34fb ручка: 0x0012, uuid: 00002803-0000 1000-8000-00805f9b34fb дескриптор: 0x0013, uuid: 00002a39-0000-1000-8000-00805f9b34fb

Чтение всех деклараций характеристик (UUID 0x2803).

[EE: 52: 5B: 04: 00: 02] [LE]> char-read-hnd 0x000d

Характеристическое значение / дескриптор: 10 0e 00 37 2a [EE: 52: 5B: 04: 00: 02] [LE]> char-read-hnd 0x0010 Характеристическое значение / дескриптор: 02 11 00 38 2a [EE: 52: 5B: 04:00:02] [LE]> char-read-hnd 0x0012 Характеристическое значение / дескриптор: 08 13 00 39 2a

Заметить, что:

- дескриптор 0x000d - это CCCD для услуги 2a37 (Измерение пульса) с битом 10 (поддержка NOTIFY)

- дескриптор 0x0010 - это CCCD для службы 2a38 (местоположение датчика тела) с битом 02 (поддержка READ)

- дескриптор 0x0012 - это CCCD для службы 2a39 (точка контроля сердечного ритма) с битом 08 (поддержка WRITE)

Теперь мы знаем, что измерение пульса работает только с уведомлением. Это означает, что сначала мы должны зарегистрироваться для изменения значения в его CCCD (UUID 0x2902), который в данном случае является дескриптором 0xf.

[EE: 52: 5B: 04: 00: 02] [LE]> char-write-req 0x00f 0100

Дескриптор уведомления = значение 0x000e: 16 65 f3 01 Значение характеристики было успешно записано Дескриптор уведомления = значение 0x000e: 16 6d fa 01 Дескриптор уведомления = значение 0x000e: 16 6d fa 01 Дескриптор уведомления = значение 0x000e: 16 6c f9 01 Дескриптор уведомления = значение 0x000e: 16 6a f7 01 Дескриптор уведомления = значение 0x000e: 16 69 f6 01

Согласно спецификации профиля, второе шестнадцатеричное число - это информация о BPM.

BPM:

6d = 109

6d = 109

6c = 108

6а = 106

69 = 105

Шаг 6: Считывание местоположения датчика тела

Считывание положения датчика тела
Считывание положения датчика тела

Расположение датчика тела - UUID 0x2A38. Согласно дескриптору, эта характеристика поддерживает базовое чтение, поэтому мы можем прочитать ее значение напрямую.

[EE: 52: 5B: 04: 00: 02] [LE]> char-read-hnd 0x11Характеристическое значение / дескриптор: 03

Согласно спецификации SIG, 03 означает «палец».

Рекомендуемые: