exponenta event banner

Работа с характеристиками и дескрипторами устройств

Прежде чем работать с характеристиками или дескрипторами, просканируйте и создайте подключение к периферийному устройству 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     0

См. также

| | | | |

Связанные темы