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

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

The 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"]

Этот дескриптор одновременно является читаемым и доступным для записи.

Чтение и запись данных дескриптора

The "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

См. также

| | | | |

Похожие темы