Main Content

デバイスの特性と記述子の操作

特性または記述子を操作する前に、Bluetooth® Low Energy 周辺デバイスをスキャンして接続を作成します。詳細と手順については、Bluetooth Low Energy 周辺デバイスの検索を参照してください。デバイスに接続した後、デバイスの特性と記述子の読み取りや書き込みによってインターフェイスを取ることができます。

b = ble("DemoDev");

デバイス特性へのアクセス

ble オブジェクトの Characteristics プロパティを調べてデバイスの特性を表示します。

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  }

この table には、それぞれの特性と、それに関連付けられたサービスがリストされています。table が示すように、それぞれのサービスには複数の特性を含めることができます。複数の特性が同じ名前を持つ場合は、UUID を使用して区別します。この例では、デバイスに標準とカスタムの両方の特性があります。標準特性は Bluetooth SIG によって定義され、カスタム特性は通常、デバイスまたはデバイス メーカーに固有のものです。

この table の Attributes フィールドには、各特性の読み取り権限と書き込み権限が記されています。関心のある特性を選択し、characteristic を使用してそのプロパティを表示します。たとえば、サービス名と特性名を使用して "Gender" 特性にアクセスします。

c = characteristic(b,"User Data","Gender")
c = 
  Characteristic with properties:

             Name: "Gender"
             UUID: "2A8C"
       Attributes: "Read" "Write"
      Descriptors: []

この特性は読み取りと書き込みの両方が可能です。

特性データの読み取りと書き込み

"Gender" 特性は読み取り可能かつ書き込み可能であるため、そこにデータを書き込んで値の変化を確認することができます。

read を使用して現在のデータを取得します。characteristicData で説明されているように、特性に対する read の完全な動作は Attributes プロパティに依存します。

data = read(c)
data = 0

Bluetooth SIG Web サイトにあるこの特性の仕様を参照して、データを解釈します。0 は男性を、1 は女性を表します。write を使用して、女性を示すよう特性に 1 と書き込みます。

write(c,1)

特性から再度読み取って、データの変化を確認することができます。

data = read(c)
data = 1

特性のサブスクライブ

特性をサブスクライブして、特性についての通知や表示を有効にすることもできます。"Notify""Indicate"、またはその両方を Attributes プロパティに含む特性のみをサブスクライブできます。特性の通知または表示を有効にした後、read を使用して、更新されたデータを取得します。Attributes に基づく read の完全な動作の説明は、characteristicData を参照してください。

この例では、"Heart Rate Measurement" 特性を表す characteristic オブジェクトを作成します。

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 を使用して通知の受信を開始します。Attributes に基づく subscribe の完全な動作の説明は、type を参照してください。

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 Web サイトの Heart Rate Service にあるこの特性の仕様を参照して、データを解釈します。

特性の操作が終了したら、unsubscribe を使用して通知を無効にします。

unsubscribe(c)

コールバック関数を使用した特性データの読み取り

コールバック関数を作成して、特性データを、デバイスからの新たなデータで更新される際に読み取ることもできます。

"Heart Rate Measurement" 特性は "Notify" をサポートするため、displayCharacteristicData というコールバック関数を作成することができます。読み取りモードを 'latest' ではなく 'oldest' として指定します。'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 = [];

デバイス記述子へのアクセス

特性に記述子がある場合は、その記述子にアクセスして読み取りや書き込みができます。characteristic オブジェクトの Descriptors プロパティを調べて、特性の記述子を表示します。

この例では、"Heart Rate Measurement" 特性の Descriptors を表示します。

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 Web サイトの Bluetooth Core Specification にあるこの記述子の仕様を参照して、このデータを解釈します。

通知または表示のステータスが変更されると、この値は変化します。たとえば、write を使用して、"Heart Rate Measurement" 特性の通知を有効にするようこの値に書き込みます。次に、記述子を再び読み取って、値の変化を確認します。

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

     1     0

参考

| | | | |

関連するトピック