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

Прежде, чем работать с характеристиками или дескрипторами, отсканируйте для и создайте связь со своим Bluetooth® Низкое энергетическое периферийное устройство. Смотрите Находят Ваш 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. В этом примере устройство имеет и стандартные и пользовательские характеристики. Стандартные характеристики заданы SIG Bluetooth, в то время как пользовательские характеристики обычно характерны для производителя устройств или производителя устройств.

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

Интерпретируйте данные путем обращения к спецификации для этой характеристики на веб-сайте SIG Bluetooth. 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

Интерпретируйте данные путем обращения к спецификации для этой характеристики, найденной в Сервисе Сердечного ритма на веб-сайт SIG Bluetooth.

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

Это значение изменяется когда уведомление или изменения состояния индикации. Например, запишите в это значение, чтобы включить уведомление для "Heart Rate Measurement" характеристическое использование write. Затем наблюдайте изменение в значениях путем чтения дескриптора снова.

write(d,[1 0])
data = read(d)
data = 1×2

     1     0

Смотрите также

| | | | |

Похожие темы