Bluetooth Low Energy ライブラリ - FreeRTOS

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

Bluetooth Low Energy ライブラリ

重要

このライブラリは、非推奨の Amazon-FreeRTOS リポジトリでホストされています。新しいプロジェクトを作成するときは、ここから始めることをお勧めします。現在非推奨の Amazon-FreeRTOS リポジトリをベースにした既存の FreeRTOS プロジェクトが既にある場合は、「Amazon FreeRTOS Github リポジトリ移行ガイド」を参照してください。

概要

FreeRTOS は、携帯電話などのプロキシデバイスを使用した Bluetooth Low Energy 経由での Message Queuing Telemetry Transport (MQTT) トピックのパブリッシュおよびサブスクライブをサポートします。FreeRTOS Bluetooth Low Energy (BLE) ライブラリを使用すると、マイクロコントローラーは AWS IoT MQTT ブローカーと安全に通信できます。

FreeRTOS Bluetooth デバイス用 Mobile SDK を使用すると、マイクロコントローラー上の組み込みアプリケーションと BLE 経由で通信するネイティブモバイルアプリケーションを作成できます。この Mobile SDK の詳細については、「FreeRTOS Bluetooth デバイス用の Mobile SDK」を参照してください。

FreeRTOS BLE ライブラリには、Wi-Fi ネットワークの設定、大量のデータの転送、および BLE 経由でのネットワーク抽象化の提供を行うためのサービスが含まれています。FreeRTOS BLE ライブラリには、BLE スタックをより直接的に制御するためのミドルウェアと低レベルの API も含まれています。

アーキテクチャ

FreeRTOS BLE ライブラリは、サービス、ミドルウェア、および低レベルラッパーの 3 つのレイヤーで構成されます。

サービス

FreeRTOS BLE サービスレイヤーは、ミドルウェア API を活用する 4 つの汎用属性 (GATT) サービスで構成されています。

  • デバイス情報

  • Wi-Fi プロビジョニング

  • ネットワークの抽象化

  • 大容量オブジェクトの転送

デバイス情報

デバイス情報サービスは、以下を含む、マイクロコントローラーに関する詳細情報を収集します。

  • デバイスが使用する FreeRTOS のバージョン。

  • デバイスが登録されているアカウントの AWS IoT エンドポイント。

  • Bluetooth Low Energy の最大送信単位 (MTU)。

Wi-Fi プロビジョニング

Wi-Fi プロビジョニングサービスでは、Wi-Fi 機能を備えたマイクロコントローラーで次のことができます。

  • 範囲内のネットワークを一覧表示します。

  • ネットワークとネットワーク認証情報をフラッシュメモリに保存します。

  • ネットワークの優先度を設定します。

  • フラッシュメモリからネットワークとネットワーク認証情報を削除します。

ネットワークの抽象化

ネットワーク抽象化サービスは、アプリケーションのネットワーク接続タイプを抽象化します。一般的な API は、デバイスの Wi-Fi、イーサネット、および Bluetooth Low Energy ハードウェアスタックとやり取りして、アプリケーションが複数の接続タイプと互換性を持てるようにします。

大容量オブジェクトの転送

大容量オブジェクトの転送サービスは、クライアントとの間でデータを送受信します。Wi-Fi プロビジョニングやネットワークの抽象化などの他のサービスでは、大容量オブジェクトの転送サービスを使用してデータを送受信します。大容量オブジェクトの転送 API を使用して、サービスを直接操作することもできます。

MQTT over BLE

MQTT over BLE には、BLE 経由で MQTT プロキシサービスを作成するための GATT プロファイルが含まれています。MQTT プロキシサービスを使用すると、MQTT クライアントはゲートウェイデバイスを介して AWS MQTT ブローカーと通信できます。例えば、プロキシサービスを使用して、FreeRTOS を実行しているデバイスをスマートフォンアプリ経由で AWS MQTT に接続できます。BLE デバイスは GATT サーバーであり、ゲートウェイデバイス向けのサービスと特性を公開します。GATT サーバーは、公開されたこれらのサービスと特性を使用して、そのデバイスのクラウドとの MQTT 操作を実行します。詳細については、「付録 A: MQTT over BLE の GATT プロファイル 」を参照してください。

ミドルウェア

FreeRTOS Bluetooth Low Energy ミドルウェアは、低レベルの API からの抽象化です。ミドルウェア API は、Bluetooth Low Energy スタックにユーザーが使いやすいインターフェイスを構成します。

ミドルウェア API を使用すると、複数のレイヤーにわたる複数のコールバックを 1 つのイベントに登録できます。Bluetooth Low Energy ミドルウェアを初期化すると、サービスも初期化され、広告を開始します。

柔軟なコールバックサブスクリプション

Bluetooth Low Energy ハードウェアが切断され、MQTT over Bluetooth Low Energy サービスが切断を検出する必要があるとします。作成したアプリケーションも、同じ切断イベントを検出する必要があります。Bluetooth Low Energy ミドルウェアは、上位レイヤーが低レベルのリソースと競合することなく、コールバックを登録したコードの異なる部分にイベントをルーティングできます。

低レベルのラッパー

低レベルの FreeRTOS Bluetooth Low Energy ラッパーは、製造元の Bluetooth Low Energy スタックからの抽象化です。低レベルのラッパーは、ハードウェアを直接制御するための共通の API セットを提供します。低レベルの API は RAM の使用を最適化しますが、機能は限られています。

Bluetooth Low Energy サービス API を使用して、Bluetooth Low Energy サービスを操作します。サービス API は、低レベル API よりも多くのリソースを要求します。

依存関係と要件

Bluetooth Low Energy ライブラリには次の直接的な依存関係があります。

  • 線形コンテナライブラリ

  • スレッド管理、タイマー、クロック関数、およびネットワークアクセスのためにオペレーティングシステムと連結するプラットフォームレイヤー。

Wi-Fi プロビジョニングサービスにのみ、次のような FreeRTOS ライブラリの依存関係があります。

GATT のサービス 依存関係
Wi-Fi プロビジョニング Wi-Fi ライブラリ

AWS IoT MQTT ブローカーと通信するには、AWS アカウントが必要で、デバイスを AWS IoT として登録する必要があります。セットアップの詳細については、「AWS IoT 開発者ガイド」を参照してください。

FreeRTOS Bluetooth Low Energy は、モバイルデバイスでのユーザー認証に Amazon Cognito を使用します。MQTT プロキシサービスを使用するには、Amazon Cognito アイデンティティとユーザープールを作成する必要があります。各 Amazon Cognito アイデンティティには、適切なポリシーがアタッチされている必要があります。詳細については、「Amazon Cognito デベロッパーガイド」をご覧ください。

ライブラリ設定ファイル

FreeRTOS MQTT over Bluetooth Low Energy サービスを使用するアプリケーションは、設定パラメータが定義されている iot_ble_config.h ヘッダーファイルを提供する必要があります。定義されていない設定パラメータは、iot_ble_config_defaults.h で指定されたデフォルト値を使用します。

次のような重要な設定パラメータがあります。

IOT_BLE_ADD_CUSTOM_SERVICES

ユーザーに独自のサービスの作成を許可します。

IOT_BLE_SET_CUSTOM_ADVERTISEMENT_MSG

ユーザーに広告およびスキャン応答メッセージのカスタマイズを許可します。

詳細については、「Bluetooth Low Energy API リファレンス」を参照してください。

最適化

ボードのパフォーマンスを最適化する場合は、次の点を考慮してください。

  • 低レベルの API はあまり RAM を使用しませんが、機能は限られています。

  • iot_ble_config.h ヘッダーファイルの bleconfigMAX_NETWORK パラメータをより低い値に設定すると、消費されるスタックの量を減らすことができます。

  • MTU サイズを最大値まで拡大してメッセージのバッファリングを制限し、コードの実行速度を向上させ、RAM の消費を抑えることができます。

使用制限

デフォルトでは、FreeRTOS Bluetooth Low Energy ライブラリは eBTpropertySecureConnectionOnly プロパティを TRUE に設定し、デバイスをセキュア接続のみモードにします。Bluetooth コア仕様 v5.0、ボリューム 3、パート C、10.2.4 で指定されているように、デバイスがセキュア接続のみモードにある場合、最も低い LE セキュリティモード 1 レベル、レベル 1 より高いアクセス許可を持つ属性へのアクセスには、最も高い LE セキュリティモード 1 レベル、レベル 4 が必要です。LE セキュリティモード 1 レベル 4 では、デバイスは数値比較のための入出力機能を備えている必要があります。

ここでは、サポートされているモード、およびその関連プロパティを示します。

モード 1、レベル 1 (セキュリティなし)
/* Disable numeric comparison */ #define IOT_BLE_ENABLE_NUMERIC_COMPARISON ( 0 ) #define IOT_BLE_ENABLE_SECURE_CONNECTION ( 0 ) #define IOT_BLE_INPUT_OUTPUT ( eBTIONone ) #define IOT_BLE_ENCRYPTION_REQUIRED ( 0 )
モード 1、レベル 2 (暗号化のある認証されていないペアリング)
#define IOT_BLE_ENABLE_NUMERIC_COMPARISON ( 0 ) #define IOT_BLE_ENABLE_SECURE_CONNECTION ( 0 ) #define IOT_BLE_INPUT_OUTPUT ( eBTIONone )
モード 1、レベル 3 (暗号化のある認証されたペアリング)

このモードはサポートされていません。

モード 1、レベル 4 (暗号化のある認証された LE のセキュアな接続ペアリング)

このモードはデフォルトでサポートされています。

LE セキュリティモードの詳細については、「Bluetooth コア仕様 v5.0、ボリューム 3、パート C、10.2.1」を参照してください。

初期化

アプリケーションがミドルウェアを介して Bluetooth Low Energy スタックを操作する場合は、ミドルウェアを初期化するだけで済みます。ミドルウェアは、スタックの下位レイヤーの初期化を行います。

ミドルウェア

ミドルウェアを初期化するには

  1. Bluetooth Low Energy ミドルウェア API を呼び出す前に、Bluetooth Low Energy ハードウェアドライバーを初期化します。

  2. Bluetooth Low Energy を有効にします。

  3. IotBLE_Init() でミドルウェアを初期化します。

    注記

    この初期化ステップは AWS デモを実行する場合は必要ありません。デモの初期化は、freertos/demos/network_manager にあるネットワークマネージャによって処理されます。

低レベル API

FreeRTOS Bluetooth Low Energy GATT サービスを使用しない場合は、ミドルウェアをバイパスし、低レベル API を直接操作してリソースを節約できます。

低レベル API を初期化するには

  1. API を呼び出す前に、Bluetooth Low Energy ハードウェアドライバーを初期化します。ドライバーの初期化は、Bluetooth Low Energy 低レベル API の一部ではありません。

  2. Bluetooth Low Energy 低レベル API は、能力とリソースを最適化するために Bluetooth Low Energy スタックへの呼び出しを有効/無効にします。API を呼び出す前に Bluetooth Low Energy を有効にする必要があります。

    const BTInterface_t * pxIface = BTGetBluetoothInterface(); xStatus = pxIface->pxEnable( 0 );
  3. Bluetooth マネージャーには、Bluetooth Low Energy と Bluetooth classic の両方に共通の API が含まれています。共通マネージャーのコールバックは、2 番目に初期化する必要があります。

    xStatus = xBTInterface.pxBTInterface->pxBtManagerInit( &xBTManagerCb );
  4. Bluetooth Low Energy アダプタは、共通 API の上部に適合します。共通 API を初期化したように、コールバックを初期化する必要があります。

    xBTInterface.pxBTLeAdapterInterface = ( BTBleAdapter_t * ) xBTInterface.pxBTInterface->pxGetLeAdapter(); xStatus = xBTInterface.pxBTLeAdapterInterface->pxBleAdapterInit( &xBTBleAdapterCb );
  5. 新しいユーザーアプリケーションの登録

    xBTInterface.pxBTLeAdapterInterface->pxRegisterBleApp( pxAppUuid );
  6. GATT サーバーへのコールバックを初期化します。

    xBTInterface.pxGattServerInterface = ( BTGattServerInterface_t * ) xBTInterface.pxBTLeAdapterInterface->ppvGetGattServerInterface(); xBTInterface.pxGattServerInterface->pxGattServerInit( &xBTGattServerCb );

    Bluetooth Low Energy アダプタを初期化すると、GATT サーバーを追加できます。GATT サーバーは一度に 1 つしか登録できません。

    xStatus = xBTInterface.pxGattServerInterface->pxRegisterServer( pxAppUuid );
  7. セキュアな接続のみ、MTU サイズなどのアプリケーションプロパティを設定します。

    xStatus = xBTInterface.pxBTInterface->pxSetDeviceProperty( &pxProperty[ usIndex ] );

API リファレンス

完全な API リファレンスについては、「Bluetooth Low Energy API リファレンス」を参照してください。

使用例

以下の例では、新規サービスの広告と作成のために Bluetooth Low Energy ライブラリを使用する方法を示します。FreeRTOS Bluetooth Low Energy デモアプリケーションの詳細については、Bluetooth Low Energy デモアプリケーションを参照してください。

広告

  1. アプリケーションで、広告 UUID を設定します。

    static const BTUuid_t _advUUID = { .uu.uu128 = IOT_BLE_ADVERTISING_UUID, .ucType = eBTuuidType128 };
  2. 次に、IotBle_SetCustomAdvCb コールバック関数を定義します。

    void IotBle_SetCustomAdvCb( IotBleAdvertisementParams_t * pAdvParams, IotBleAdvertisementParams_t * pScanParams) { memset(pAdvParams, 0, sizeof(IotBleAdvertisementParams_t)); memset(pScanParams, 0, sizeof(IotBleAdvertisementParams_t)); /* Set advertisement message */ pAdvParams->pUUID1 = &_advUUID; pAdvParams->nameType = BTGattAdvNameNone; /* This is the scan response, set it back to true. */ pScanParams->setScanRsp = true; pScanParams->nameType = BTGattAdvNameComplete; }

    このコールバックにより、広告メッセージの UUID とスキャン応答のフルネームを送信します。

  3. vendors/vendor/boards/board/aws_demos/config_files/iot_ble_config.h を開き、IOT_BLE_SET_CUSTOM_ADVERTISEMENT_MSG1 に設定します。これにより IotBle_SetCustomAdvCb コールバックがトリガーされます。

新しいサービスの追加

サービスの詳細な例については、freertos/.../ble/services を参照してください。

  1. サービスの特性と記述子の UUID を作成します。

    #define xServiceUUID_TYPE \ {\ .uu.uu128 = gattDemoSVC_UUID, \ .ucType = eBTuuidType128 \ } #define xCharCounterUUID_TYPE \ {\ .uu.uu128 = gattDemoCHAR_COUNTER_UUID,\ .ucType = eBTuuidType128\ } #define xCharControlUUID_TYPE \ {\ .uu.uu128 = gattDemoCHAR_CONTROL_UUID,\ .ucType = eBTuuidType128\ } #define xClientCharCfgUUID_TYPE \ {\ .uu.uu16 = gattDemoCLIENT_CHAR_CFG_UUID,\ .ucType = eBTuuidType16\ }
  2. 特性と記述子のハンドルを登録するバッファを作成します。

    static uint16_t usHandlesBuffer[egattDemoNbAttributes];
  3. 属性テーブルを作成します。いくつかの RAM を保存するには、テーブルを const として定義します。

    重要

    属性は常に、サービスを最初の属性として、順序どおりに作成します。

    static const BTAttribute_t pxAttributeTable[] = { { .xServiceUUID = xServiceUUID_TYPE }, { .xAttributeType = eBTDbCharacteristic, .xCharacteristic = { .xUuid = xCharCounterUUID_TYPE, .xPermissions = ( IOT_BLE_CHAR_READ_PERM ), .xProperties = ( eBTPropRead | eBTPropNotify ) } }, { .xAttributeType = eBTDbDescriptor, .xCharacteristicDescr = { .xUuid = xClientCharCfgUUID_TYPE, .xPermissions = ( IOT_BLE_CHAR_READ_PERM | IOT_BLE_CHAR_WRITE_PERM ) } }, { .xAttributeType = eBTDbCharacteristic, .xCharacteristic = { .xUuid = xCharControlUUID_TYPE, .xPermissions = ( IOT_BLE_CHAR_READ_PERM | IOT_BLE_CHAR_WRITE_PERM ), .xProperties = ( eBTPropRead | eBTPropWrite ) } } };
  4. コールバックの配列を作成します。このコールバックの配列は、上で定義されたテーブル配列と同じ順序に従う必要があります。

    たとえば、xCharCounterUUID_TYPE がアクセスされたとき vReadCounter がトリガーされ、vWriteCommand がアクセスされたとき xCharControlUUID_TYPE がトリガーされる場合、配列を次のように定義します。

    static const IotBleAttributeEventCallback_t pxCallBackArray[egattDemoNbAttributes] = { NULL, vReadCounter, vEnableNotification, vWriteCommand };
  5. サービスを作成します。

    static const BTService_t xGattDemoService = { .xNumberOfAttributes = egattDemoNbAttributes, .ucInstId = 0, .xType = eBTServiceTypePrimary, .pusHandlesBuffer = usHandlesBuffer, .pxBLEAttributes = (BTAttribute_t *)pxAttributeTable };
  6. 前のステップで作成した構造を使用して、API IotBle_CreateService を呼び出します。ミドルウェアは、すべてのサービスの作成に同期するため、IotBle_AddCustomServicesCb コールバックがトリガーされるとき、新しいサービスは既に定義されている必要があります。

    1. vendors/vendor/boards/board/aws_demos/config_files/iot_ble_config.hIOT_BLE_ADD_CUSTOM_SERVICES1 に設定します。

    2. アプリケーションで IotBle_AddCustomServicesCb を作成します。

      void IotBle_AddCustomServicesCb(void) { BTStatus_t xStatus; /* Select the handle buffer. */ xStatus = IotBle_CreateService( (BTService_t *)&xGattDemoService, (IotBleAttributeEventCallback_t *)pxCallBackArray ); }

移植

ユーザー入力および出力周辺機器

セキュアな接続には、数値比較のために入力と出力の両方が必要です。イベントマネージャを使用して eBLENumericComparisonCallback イベントを登録できます。

xEventCb.pxNumericComparisonCb = &prvNumericComparisonCb; xStatus = BLE_RegisterEventCb( eBLENumericComparisonCallback, xEventCb );

周辺機器は数値のパスキーを表示し、比較の結果を入力として取得する必要があります。

API 実装の移植

FreeRTOS を新しいターゲットに移植するには、Wi-Fi プロビジョニングサービスおよび Bluetooth Low Energy 機能用にいくつかの API を実装する必要があります。

Bluetooth Low Energy API

FreeRTOS Bluetooth Low Energy ミドルウェアを使用するには、一部の API を実装する必要があります。

Bluetooth Classic 用 GAP と Bluetooth Low Energy 用 GAP の共通 API
  • pxBtManagerInit

  • pxEnable

  • pxDisable

  • pxGetDeviceProperty

  • pxSetDeviceProperty (すべてのオプションは、eBTpropertyRemoteRssieBTpropertyRemoteVersionInfo を必須とします)

  • pxPair

  • pxRemoveBond

  • pxGetConnectionState

  • pxPinReply

  • pxSspReply

  • pxGetTxpower

  • pxGetLeAdapter

  • pxDeviceStateChangedCb

  • pxAdapterPropertiesCb

  • pxSspRequestCb

  • pxPairingStateChangedCb

  • pxTxPowerCb

Bluetooth Low Energy の GAP に固有の API
  • pxRegisterBleApp

  • pxUnregisterBleApp

  • pxBleAdapterInit

  • pxStartAdv

  • pxStopAdv

  • pxSetAdvData

  • pxConnParameterUpdateRequest

  • pxRegisterBleAdapterCb

  • pxAdvStartCb

  • pxSetAdvDataCb

  • pxConnParameterUpdateRequestCb

  • pxCongestionCb

GATT サーバー
  • pxRegisterServer

  • pxUnregisterServer

  • pxGattServerInit

  • pxAddService

  • pxAddIncludedService

  • pxAddCharacteristic

  • pxSetVal

  • pxAddDescriptor

  • pxStartService

  • pxStopService

  • pxDeleteService

  • pxSendIndication

  • pxSendResponse

  • pxMtuChangedCb

  • pxCongestionCb

  • pxIndicationSentCb

  • pxRequestExecWriteCb

  • pxRequestWriteCb

  • pxRequestReadCb

  • pxServiceDeletedCb

  • pxServiceStoppedCb

  • pxServiceStartedCb

  • pxDescriptorAddedCb

  • pxSetValCallbackCb

  • pxCharacteristicAddedCb

  • pxIncludedServiceAddedCb

  • pxServiceAddedCb

  • pxConnectionCb

  • pxUnregisterServerCb

  • pxRegisterServerCb

FreeRTOS Bluetooth Low Energy ライブラリをご使用のプラットフォームに移植する方法については、FreeRTOS 移植ガイドの Bluetooth Low Energy ライブラリの移植を参照してください。

付録 A: MQTT over BLE の GATT プロファイル

GATT サービスの詳細

MQTT over BLE は、データ転送 GATT サービスのインスタンスを使用して、FreeRTOS デバイスとプロキシデバイスの間で MQTT の簡潔なバイナリオブジェクト表現 (CBOR) メッセージを送信します。データ転送サービスでは、BLE GATT プロトコルを介した未加工データの送受信に役立つ特定の特性が公開されています。また、BLE の最大伝送単位 (MTU) サイズを超えるペイロードのフラグメント化とアセンブリも処理します。

サービス UUID

A9D7-166A-D72E-40A9-A002-4804-4CC3-FF00

サービスインスタンス

ブローカーとの MQTT セッションごとに GATT サービスの 1 つのインスタンスが作成されます。各サービスには、そのタイプを識別する一意の UUID (2 バイト) があります。個々のインスタンスは、インスタンス ID によって区別されます。

各サービスは、各 BLE サーバーデバイス上でプライマリサービスとしてインスタンス化されます。特定のデバイス上に、サービスの複数のインスタンスを作成できます。MQTT プロキシサービスタイプには一意の UUID があります。

特徴

特性コンテンツ形式: CBOR

最大特性値サイズ: 512 バイト

特徴 要件 必須のプロパティ オプションのプロパティ セキュリティアクセス許可 簡単な説明 UUID
コントロール M 書き込み なし 書き込みに暗号化が必要 MQTT プロキシを開始および停止するために使用されます。 A9D7-166A-D72E-40A9-A002-4804-4CC3-FF01
TXMessage M 読み取り、通知 なし 読み取りに暗号化が必要 メッセージを含む通知をプロキシ経由でブローカーに送信するために使用されます。 A9D7-166A-D72E-40A9-A002-4804-4CC3-FF02
RXMessage M 応答なしの読み取り、書き込み なし 読み取り、書き込みに暗号化が必要 プロキシ経由でブローカーからメッセージを受信するために使用されます。 A9D7-166A-D72E-40A9-A002-4804-4CC3-FF03
TXLargeMessage M 読み取り、通知 なし 読み取りに暗号化が必要 プロキシ経由でブローカーに大容量メッセージ (メッセージ > BLE MTU サイズ) を送信するために使用されます。 A9D7-166A-D72E-40A9-A002-4804-4CC3-FF04
RXLargeMessage M 応答なしの読み取り、書き込み なし 読み取り、書き込みに暗号化が必要 プロキシ経由でブローカーから大容量メッセージ (メッセージ > BLE MTU サイズ) を受信するために使用されます。 A9D7-166A-D72E-40A9-A002-4804-4CC3-FF05
GATT プロシージャの要件
特性値の読み取り 必須
長い特性値の読み取り 必須
特性値の書き込み 必須
長い特性値の書き込み 必須
特性記述子の読み取り 必須
特性記述子の書き込み 必須
通知 必須
表示 必須
メッセージタイプ

以下のメッセージタイプが交換されます。

メッセージの種類 Message マップに使用するキーと値のペア
0x01 CONNECT
  • キー =「w」、値 = タイプ 0 整数、メッセージタイプ (1)

  • キー =「d」、値 = タイプ 3、テキスト文字列、セッションのクライアント ID

  • キー =「a」、値 = タイプ 3、テキスト文字列、セッションのブローカーエンドポイント

  • キー =「c」、値 = 単純値タイプ True/False

0x02 CONNACK
  • キー =「w」、値 = タイプ 0 整数、メッセージタイプ (2)

  • キー =「s」、値 = タイプ 0 整数、ステータスコード

0x03 発行
  • キー =「w」、値 = タイプ 0 整数、メッセージタイプ (3)

  • キー =「u」、値 = タイプ 3、テキスト文字列、パブリッシュ対象のトピック

  • キー =「n」、値 = タイプ 0、整数、パブリッシュの QoS

  • キー =「i」、値 = タイプ 0、整数、メッセージ識別子、QoS 1 パブリッシュのみ

  • キー =「k」、値 = タイプ 2、バイト文字列、パブリッシュのペイロード

0x04 PUBACK
  • QoS 1 メッセージに対してのみ送信されます。

  • キー =「w」、値 = タイプ 0 整数、メッセージタイプ (4)

  • キー =「i」、値 = タイプ 0、整数、メッセージ識別子

0x08 サブスクライブ
  • キー =「w」、値 = タイプ 0 整数、メッセージタイプ (8)

  • キー =「v」、値 = タイプ 4、テキスト文字列の配列、サブスクリプション対象のトピック

  • キー =「o」、値 = タイプ 4、整数の配列、サブスクリプションの QoS

  • キー =「i」、値 = タイプ 0、整数、メッセージ識別子

0x09 SUBACK
  • キー =「w」、値 = タイプ 0 整数、メッセージタイプ (9)

  • キー =「i」、値 = タイプ 0、整数、メッセージ識別子

  • キー =「s」、値 = タイプ 0、整数、サブスクリプションのステータスコード

0X0A UNSUBSCRIBE
  • キー =「w」、値 = タイプ 0 整数、メッセージタイプ (10)

  • キー =「v」、値 = タイプ 4、テキスト文字列の配列、サブスクリプション解除対象のトピック

  • キー =「i」、値 = タイプ 0、整数、メッセージ識別子

0x0B UNSUBACK
  • キー =「w」、値 = タイプ 0 整数、メッセージタイプ (11)

  • キー =「i」、値 = タイプ 0、整数、メッセージ識別子

  • キー =「s」、値 = タイプ 0、整数、サブスクリプション解除のステータスコード

0X0C PINGREQ
  • キー =「w」、値 = タイプ 0 整数、メッセージタイプ (12)

0x0D PINGRESP
  • キー =「w」、値 = タイプ 0 整数、メッセージタイプ (13)

0x0E DISCONNNECT
  • キー =「w」、値 = タイプ 0 整数、メッセージタイプ (14)

大容量ペイロード転送特性
TXLargeMessage

TXLargeMessage は、BLE 接続に対してネゴシエートされた MTU サイズより大きい大容量ペイロードを送信するために、デバイスによって使用されます。

  • デバイスはペイロードの最初の MTU バイトを特性を介して通知として送信します。

  • プロキシは、この特性に対して、残りのバイトの読み取りリクエストを送信します。

  • デバイスは、MTU サイズまたはペイロードの残りのバイト数のいずれか小さい方のサイズを送信します。そのたびに、送信されたペイロードのサイズ分だけ読み取り済みのオフセットを増やします。

  • プロキシは、取得したペイロードの長さが 0 になるか、ペイロードが MTU サイズより小さくなるまで、特性の読み取りを続けます。

  • 指定されたタイムアウト内にデバイスが読み取りリクエストを受け取らない場合、転送は失敗し、プロキシとゲートウェイはバッファを解放します。

  • 指定されたタイムアウト内にプロキシが読み取りレスポンスを受け取らない場合、転送は失敗し、プロキシはバッファを解放します。

RXLargeMessage

RXLargeMessage は、BLE 接続に対してネゴシエートされた MTU サイズより大きい大容量ペイロードを受信するためにデバイスによって使用されます。

  • プロキシは、この特性に基づいてレスポンス付き書き込みを使用して、MTU サイズまでのメッセージを 1 つずつ書き込みます。

  • デバイスは、長さがゼロ、または MTU サイズより小さい書き込みリクエストを受信するまでメッセージをバッファします。

  • 指定されたタイムアウト内にデバイスが書き込みリクエストを受け取らない場合、転送は失敗し、デバイスはバッファを解放します。

  • 指定されたタイムアウト内にプロキシが書き込みレスポンスを受け取らない場合、転送は失敗し、プロキシはバッファを解放します。