read

Чтение данных характеристики или дескриптора на периферийном устройстве Bluetooth Low Energy

Описание

Чтение значений характеристик

пример

characteristicData = read(c) считывает значение характеристики из Bluetooth® Низкоэнергетическое периферийное устройство. Считанные данные зависят от Attributes свойство объекта входной характеристики c. Для получения дополнительной информации обо всех возможных поведениях read, см. characteristicData.

пример

characteristicData = read(c,mode) задает mode как режим чтения.

пример

[characteristicData,timestamp] = read(___) считывает временную метку для любого из предыдущих синтаксисов.

Чтение значений дескриптора

пример

descriptorData = read(d) считывает значение дескриптора с периферийного устройства Bluetooth Low Energy.

Примеры

свернуть все

Доступ к характеристике на периферийном устройстве и чтение его данных.

Создайте соединение с ближайшим периферийным устройством Bluetooth Low Energy.

b = ble("Thingy")
b = 
  ble with properties:

               Name: "Thingy"
            Address: "F2DF635320F6"
          Connected: 1
           Services: [9×2 table]
    Characteristics: [38×5 table]

Show services and characteristics

Создайте объект характеристики, который представляет "Temperature" характеристика.

c = characteristic(b,"Weather Station Service","Temperature")
c = 
  Characteristic with properties:

             Name: "Temperature"
             UUID: "EF680201-9B35-4933-9B10-52FFA9740042"
       Attributes: "Notify"
      Descriptors: [1x3 table]
 DataAvailableFcn: []

Show descriptors

Потому что эта характеристика поддерживает "Notify", можно использовать read для получения последних данных.

data = read(c)
data = 1×2

    23    75

Можно также вернуть временную метку последних данных.

[data,timestamp] = read(c)
data = 1×2

    23    73

timestamp = datetime
   16-May-2019 16:20:00

Интерпретируйте данные в Цельсии. Первый байт представляет целочисленную часть температуры, а второй байт представляет десятичную часть с разрешением 0,01.

temperature = data(1) + data(2)*0.01
temperature = 23.7300

Получите доступ к характеристике на периферийном устройстве и создайте функцию обратного вызова, чтобы считать его данные.

Создайте соединение с ближайшим периферийным устройством Bluetooth Low Energy.

b = ble("Thingy")
b = 
  ble with properties:

               Name: "Thingy"
            Address: "F2DF635320F6"
          Connected: 1
           Services: [9×2 table]
    Characteristics: [38×5 table]

Show services and characteristics

Создайте объект характеристики, который представляет "Temperature" характеристика.

c = characteristic(b,"Weather Station Service","Temperature")
c = 
  Characteristic with properties:

             Name: "Temperature"
             UUID: "EF680201-9B35-4933-9B10-52FFA9740042"
       Attributes: "Notify"
      Descriptors: [1x3 table]
 DataAvailableFcn: []

Show descriptors

Потому что эта характеристика поддерживает "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: "Temperature"
             UUID: "EF680201-9B35-4933-9B10-52FFA9740042"
       Attributes: "Notify"
      Descriptors: [1x3 table]
 DataAvailableFcn: displayCharacteristicData

Show descriptors

После завершения работы с характеристикой отключите уведомления с помощью unsubscribe.

unsubscribe(c)

Доступ к дескриптору на периферийном устройстве и чтение его данных.

Создайте соединение с ближайшим периферийным устройством Bluetooth Low Energy.

b = ble("DemoDev")
b = 
  ble with properties:

               Name: "DemoDev"
            Address: "FF548EA5658F"
          Connected: 1
           Services: [5×2 table]
    Characteristics: [10×5 table]

Show services and characteristics

Создайте объект характеристики, который представляет "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

Создайте объект дескриптора, который представляет "Client Characteristic Configuration" дескриптор.

d = descriptor(c,"Client Characteristic Configuration")
d = 
  Descriptor with properties:

          Name: "Client Characteristic Configuration"
          UUID: "2902"
    Attributes: ["Read"    "Write"]

Этот дескриптор содержит информацию о том, включены ли уведомления и индикации. Можно использовать read для получения текущих данных.

data = read(d)
data = 1×2

     0     0

Интерпретируйте эти данные, сославшись на спецификацию для этого дескриптора на веб-сайте Bluetooth SIG.

Это значение изменяется при изменении состояния уведомления или индикации. Например, подпишитесь на уведомление, используя subscribe. Затем наблюдайте изменение значения, снова прочитав дескриптор.

subscribe(c,'notification');
data = read(d)
data = 1×2

     1     0

Входные параметры

свернуть все

Характеристика периферийного устройства Bluetooth Low Energy, заданная как characteristic объект.

The Attributes свойство объекта характеристики должно включать "Read", "Notify", или "Indicate" для чтения данных.

Пример: data = read(c) считывает значение объекта характеристики c.

Режим чтения, заданный как 'latest' или 'oldest'. Использование 'latest' возвращает самые последние данные и очищает предыдущие данные. Использование 'oldest' возвращает самые старые данные с момента последнего чтения.

Примечание

Использование 'oldest' внутри DataAvailableFcn функция обратного вызова, чтобы избежать ошибок, вызванных очисткой предыдущих данных.

Пример: data = read(c,'oldest') считывает самое старое значение с момента последнего чтения объекта характеристики c.

Типы данных: char | string

Дескриптор периферийного устройства Bluetooth Low Energy, заданный как descriptor объект.

The Attributes свойство объекта дескриптора должно включать "Read" для чтения данных.

Пример: read(d) считывает значение объекта дескриптора d.

Выходные аргументы

свернуть все

Характеристические данные от периферийного устройства, возвращенные как число или массив чисел.

Считанные данные зависят от Attributes свойство объекта характеристики и заданный режим чтения.

c.Attributesread(c) или read(c,'latest')read(c,'oldest')
  • "Read"

Текущие данные.Не поддерживается.
  • "Notify", "Indicate", или и то, и другое

Последние данные уведомления или индикации.

  • Если уведомление или индикация не включены, и это первый вызов read, затем автоматически запускается уведомление или индикация.

  • Предыдущие данные сбрасываются.

Самые старые данные уведомления или индикации с момента последнего чтения.

  • Если уведомление или индикация не включены, и это первый вызов read, затем автоматически запускается уведомление или индикация.

  • "Read"

    и

  • "Notify", "Indicate", или и то, и другое

  • Если уведомление или индикация не включена, то characteristicData - текущие данные.

  • Если уведомление или индикация включена, то characteristicData - последнее уведомление или индикация.

  • Если уведомление или индикация не включена, то read(c,'oldest') не поддерживается.

  • Если уведомление или индикация включена, то characteristicData является самым старым уведомлением или данными индикации с момента удаления последних считанных и предыдущих данных.

Типы данных: double

Временная метка, указывающая на получение характеристических или дескрипторных данных на компьютере, возвращаемая как datetime массив.

Типы данных: datetime

Данные дескриптора от периферийного устройства, возвращенные как число.

Типы данных: double

Введенный в R2019b