Bluetooth Low Energy ライブラリ - FreeRTOS

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

Bluetooth Low Energy ライブラリ

重要

このライブラリは、廃止された Amazon FreeRTOS リポジトリでホストされています。新しいプロジェクトを作成するときは、ここから始めることをお勧めします。廃止予定の Amazon FreeRTOS リポジトリに基づく既存の FreeRTOS プロジェクトがすでにある場合は、を参照してくださいアマゾン無料の GitHub リポジトリ移行ガイド

概要

FreeRTOS は、携帯電話などのプロキシデバイスを使用して、Bluetooth Low Energy を介して、メッセージキューテレメトリトランスポート (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: BLE GATT プロファイルに対する MQTT 」を参照してください。

ミドルウェア

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. AddCustomServicesCb アプリケーションに IotBle _ を作成:

      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: BLE GATT プロファイルに対する MQTT

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
TX メッセージ M 既読、通知 なし 読み取りには暗号化が必要 メッセージを含む通知をプロキシ経由でブローカーに送信するために使用されます。 A9D7-166A-D72E-40A9-A002-4804-4CC3-FF02
Rx メッセージ M 応答なしの読み取り、書き込み なし 読み取り、書き込みには暗号化が必要 プロキシ経由でブローカーからメッセージを受信するために使用されます。 A9D7-166A-D72E-40A9-A002-4804-4CC3-FF03
TXLargeMessage M 既読、通知 なし 読み取りには暗号化が必要 プロキシ経由でブローカーに大きなメッセージ(メッセージ > BLE MTU Size)を送信するために使用されます。 A9D7-166A-D72E-40A9-A002-4804-4CC3-FF04
RXLargeMessage M 応答なしの読み取り、書き込み なし 読み取り、書き込みには暗号化が必要 プロキシ経由でブローカーから大きなメッセージ(メッセージ > BLE MTU Size)を受信する場合に使用されます。 A9D7-166A-D72E-40A9-A002-4804-4CC3-FF05
GATT 手続きの要件
特性値の読み取り 必須
ロング特性値の読み取り 必須
特性値を書き込む 必須
長い特性値の書き込み 必須
特性記述子の読み取り 必須
特性記述子の記述 必須
通知 必須
徴候 必須
メッセージタイプ

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

メッセージタイプ Message 次のキーと値のペアを使用してマッピング
0x01 CONNECT
  • キー =「w」、値 = タイプ 0 整数、メッセージタイプ (1)

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

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

  • キー =「c」、値 = 単純値タイプ真/偽

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

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

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

  • キー =「u」、値 = タイプ 3、テキスト文字列、公開用トピック

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

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

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

0x04 上向き
  • QoS 1 メッセージの場合にのみ送信されます。

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

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

0x08 申し込む
  • キー =「w」、値 = タイプ 0 整数、メッセージタイプ (8)

  • Key =「v」、value = Type 4、テキスト文字列の配列、サブスクリプションのトピック

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

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

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

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

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

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

  • Key =「v」、value = Type 4、テキスト文字列の配列、購読解除のトピック

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

0x0 潜水しない
  • キー =「w」、値 = タイプ 0 整数、メッセージタイプ (11)

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

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

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

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

0x0 接続解除
  • キー =「w」、値 = タイプ 0 整数、メッセージタイプ (14)

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

LargeMessage デバイスは TX を使用して、BLE 接続でネゴシエートされた MTU サイズを超える大きなペイロードを送信します。

  • デバイスは、ペイロードの最初の MTU バイトを通知としてキャラクタリスティック経由で送信します。

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

  • デバイスは MTU サイズまたはペイロードの残りのバイトのどちらか小さい方まで送信します。毎回、送信されるペイロードのサイズに応じて読み取られるオフセットが増加します。

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

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

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

RXLargeMessage

LargeMessage デバイスは RX を使用して、BLE 接続でネゴシエートされた MTU サイズを超える大きなペイロードを受信します。

  • プロキシは、この特性について write with response を使用して、最大で MTU サイズまでメッセージを 1 つずつ書き込みます。

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

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

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