Прежде чем работать с характеристиками или дескрипторами, просканируйте и создайте подключение к периферийному устройству Bluetooth ® Low Energy. Дополнительные сведения и инструкции см. в разделе Поиск периферийных устройств Bluetooth с низким энергопотреблением. После подключения к устройству с ним можно взаимодействовать, считывая или записывая характеристики и дескрипторы устройства.
b = ble("DemoDev");Просмотрите характеристики устройства, ознакомившись с Characteristics имущества ble объект.
b.Characteristics
ans=11×5 table
ServiceName ServiceUUID CharacteristicName CharacteristicUUID Attributes
___________________ ______________________________________ ____________________________________________ ______________________________________ ______________
"Generic Access" "1800" "Device Name" "2A00" {1×2 string }
"Generic Access" "1800" "Appearance" "2A01" {["Read" ]}
"Generic Access" "1800" "Peripheral Preferred Connection Parameters" "2A04" {["Read" ]}
"Generic Access" "1800" "Central Address Resolution" "2AA6" {["Read" ]}
"Generic Attribute" "1801" "Service Changed" "2A05" {["Indicate"]}
"Heart Rate" "180D" "Heart Rate Measurement" "2A37" {["Notify" ]}
"Heart Rate" "180D" "Body Sensor Location" "2A38" {["Read" ]}
"Battery Service" "180F" "Battery Level" "2A19" {["Read" ]}
"User Data" "181C" "Gender" "2A8C" {1×2 string }
"Custom" "03B80E5A-EDE8-4B33-A751-6CE34EC4C700" "Custom" "7772E5DB-3868-4112-A1A9-F2669D106BF3" {1×6 string }
"Custom" "03B80E5A-EDE8-4B33-A751-6CE34EC4C700" "Custom" "7772E5DC-3868-4112-A1A9-F2669D106BF3" {1×3 string }
В этой таблице перечислены каждый признак и услуга, с которой он связан. Как показано в таблице, каждая услуга может содержать несколько признаков. Если несколько признаков имеют одно и то же имя, различайте их с помощью UUID. В этом примере устройство имеет как стандартные, так и пользовательские характеристики. Стандартные характеристики определяются Bluetooth SIG, в то время как пользовательские характеристики обычно зависят от устройства или производителя устройства.
Attributes поле в этой таблице содержит разрешения на чтение и запись для каждого признака. Выберите интересующий признак и просмотрите его свойства с помощью characteristic. Например, доступ к "Gender" признак с использованием имени сервиса и признака.
c = characteristic(b,"User Data","Gender")
c =
Characteristic with properties:
Name: "Gender"
UUID: "2A8C"
Attributes: "Read" "Write"
Descriptors: []
Этот признак доступен как для чтения, так и для записи.
Потому что "Gender" признак доступен для чтения и записи, в него можно записать данные и проверить изменение значений.
Использовать read для получения текущих данных. Полное поведение read для признака зависит от Attributes свойство, как описано в characteristicData.
data = read(c)
data = 0
Интерпретируйте данные, ссылаясь на спецификацию для этой характеристики на веб-сайте Bluetooth SIG. 0 представляет мужчин и 1 представляет женщину. Написать 1 к характеристике для обозначения самки с помощью write.
write(c,1)
Для просмотра изменений в данных можно повторно выполнить считывание из признака.
data = read(c)
data = 1
Можно также подписаться на признак, чтобы включить уведомление или индикацию признака. Вы можете подписаться только на признаки, которые содержат "Notify", "Indicate", или оба в Attributes собственность. После включения уведомления или индикации для признака используйте read для получения обновленных данных. Посмотрите characteristicData для описания полного поведения read на основе Attributes.
Для этого примера создайте объект признака, который представляет "Heart Rate Measurement" характеристика.
c = characteristic(b,"Heart Rate","Heart Rate Measurement")
c =
Characteristic with properties:
Name: "Heart Rate Measurement"
UUID: "2A37"
Attributes: "Notify"
Descriptors: [1x3 table]
DataAvailableFcn: []
Show descriptors
Эта характеристика поддерживает "Notify".
Начать получать уведомления с помощью subscribe. Посмотрите type для описания полного поведения subscribe на основе Attributes.
subscribe(c)
Считывайте из признака для проверки получения данных.
read(c)
ans = 1×19
23 14 1 187 1 186 1 185 1 184 1 183 1 182 1 181 1 180 1
Интерпретируйте данные, ссылаясь на спецификацию для этой характеристики на веб-сайте Bluetooth SIG.
После завершения работы с признаком отключите уведомления с помощью unsubscribe.
unsubscribe(c)
Также можно создать функцию обратного вызова для считывания данных признаков по мере их обновления новыми данными с устройства.
Потому что "Heart Rate Measurement" характерные опоры "Notify", можно создать функцию обратного вызова с именем displayCharacteristicData. Укажите режим чтения как 'oldest' вместо 'latest'. Вызов 'latest' данные могут привести к ошибкам в функции обратного вызова, вызванным сбросом предыдущих данных.
function displayCharacteristicData(src,evt) [data,timestamp] = read(src,'oldest'); disp(data); disp(timestamp); end
Используйте @ для назначения дескриптора функции DataAvailableFcn свойство характеристики. Когда новое уведомление доступно, вызывается обратный вызов.
c.DataAvailableFcn = @displayCharacteristicData
c =
Characteristic with properties:
Name: "Heart Rate Measurement"
UUID: "2A37"
Attributes: "Notify"
Descriptors: [1x3 table]
DataAvailableFcn: displayCharacteristicData
Show descriptors
После завершения работы с характеристикой отключите уведомления и сбросьте обратный вызов с помощью unsubscribe.
unsubscribe(c) c.DataAvailableFcn = [];
Если признак имеет дескрипторы, можно получить доступ к ним для чтения или записи. Просмотр дескрипторов для характеристики путем просмотра Descriptors имущества characteristic объект.
Для этого примера покажите Descriptors для "Heart Rate Measurement" характеристика.
c.Descriptors
ans=1×3 table
DescriptorName DescriptorUUID Attributes
_____________________________________ ______________ ____________
"Client Characteristic Configuration" "2902" {1×2 string}Доступ к "Client Characteristic Configuration" дескриптор.
d = descriptor(c,"Client Characteristic Configuration")d =
Descriptor with properties:
Name: "Client Characteristic Configuration"
UUID: "2902"
Attributes: ["Read" "Write"]Этот дескриптор доступен как для чтения, так и для записи.
"Client Characteristic Configuration" дескриптор содержит информацию о том, включено или отключено уведомление или индикация. Вы можете использовать read для получения текущих данных.
data = read(d)
data = 1×2
0 0Интерпретируйте эти данные, ссылаясь на спецификацию для этого дескриптора на веб-сайте Bluetooth SIG.
Это значение изменяется при изменении состояния уведомления или индикации. Например, запишите это значение, чтобы включить уведомление для "Heart Rate Measurement" признак с использованием write. Затем проверьте изменение значений, прочитав дескриптор еще раз.
write(d,[1 0]) data = read(d)
data = 1×2
1 0characteristic | descriptor | read | subscribe | unsubscribe | write