翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。
Bluetooth Low Energy ライブラリ
重要
これは、FreeRTOS リリース 202012.00 で使用する FreeRTOS ユーザーガイドのアーカイブ版です。このドキュメントの最新バージョンについては、FreeRTOS ユーザーガイドを参照してください。
概要
FreeRTOS は、携帯電話などのプロキシデバイスを使用して、Bluetooth Low Energy を介して MQTT トピックの公開およびサブスクライブをサポートします。FreeRTOS Bluetooth Low Energy ライブラリを使用すると、マイクロコントローラーは AWS IoT MQTT ブローカーと安全に通信できます。

FreeRTOS Bluetooth デバイス用 Mobile SDK を使用すると、Bluetooth Low Energy を使用してマイクロコントローラーの組み込みアプリケーションと通信するネイティブモバイルアプリケーションを作成できます。この Mobile SDK の詳細については、「FreeRTOS Bluetooth デバイス用の Mobile SDK」を参照してください。
FreeRTOS Bluetooth Low Energy ライブラリには、Wi-Fi ネットワークを設定、大量のデータを転送、および Bluetooth Low Energy 経由でのネットワーク抽象化を提供するためのサービスが含まれています。FreeRTOS Bluetooth Low Energy ライブラリには、Bluetooth Low Energy スタックをより直接的に制御するためのミドルウェアと低レベルの API も含まれています。
アーキテクチャ
FreeRTOS Bluetooth Low Energy ライブラリは、サービス、ミドルウェア、および低レベルのラッパーの 3 つのレイヤーで構成されます。

サービス
FreeRTOS Bluetooth Low Energy サービスレイヤーは、ミドルウェア 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 を使用して、直接サービスを操作することもできます。
ミドルウェア
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 コア仕様
ここでは、サポートされているモード、およびその関連プロパティを示します。
- モード 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 コア仕様
初期化
アプリケーションがミドルウェアを介して Bluetooth Low Energy スタックを操作する場合は、ミドルウェアを初期化するだけで済みます。ミドルウェアは、スタックの下位レイヤーの初期化を行います。
ミドルウェア
ミドルウェアを初期化するには
-
Bluetooth Low Energy ミドルウェア API を呼び出す前に、Bluetooth Low Energy ハードウェアドライバーを初期化します。
-
Bluetooth Low Energy を有効にします。
-
IotBLE_Init()
でミドルウェアを初期化します。注記
AWS デモを実行する場合、この初期化ステップは必要ありません。デモの初期化は、
にあるネットワークマネージャによって処理されます。freertos
/demos/network_manager
低レベル API
FreeRTOS Bluetooth Low Energy GATT サービスを使用しない場合は、ミドルウェアをバイパスし、低レベル API を直接操作してリソースを節約できます。
低レベル API を初期化するには
-
API を呼び出す前に、Bluetooth Low Energy ハードウェアドライバーを初期化します。ドライバーの初期化は、Bluetooth Low Energy 低レベル API の一部ではありません。
-
Bluetooth Low Energy 低レベル API は、能力とリソースを最適化するために Bluetooth Low Energy スタックへの呼び出しを有効/無効にします。API を呼び出す前に Bluetooth Low Energy を有効にする必要があります。
const BTInterface_t * pxIface = BTGetBluetoothInterface(); xStatus = pxIface->pxEnable( 0 );
-
Bluetooth マネージャーには、Bluetooth Low Energy と Bluetooth classic の両方に共通の API が含まれています。共通マネージャーのコールバックは、2 番目に初期化する必要があります。
xStatus = xBTInterface.pxBTInterface->pxBtManagerInit( &xBTManagerCb );
-
Bluetooth Low Energy アダプタは、共通 API の上部に適合します。共通 API を初期化したように、コールバックを初期化する必要があります。
xBTInterface.pxBTLeAdapterInterface = ( BTBleAdapter_t * ) xBTInterface.pxBTInterface->pxGetLeAdapter(); xStatus = xBTInterface.pxBTLeAdapterInterface->pxBleAdapterInit( &xBTBleAdapterCb );
-
新しいユーザーアプリケーションの登録
xBTInterface.pxBTLeAdapterInterface->pxRegisterBleApp( pxAppUuid );
-
GATT サーバーへのコールバックを初期化します。
xBTInterface.pxGattServerInterface = ( BTGattServerInterface_t * ) xBTInterface.pxBTLeAdapterInterface->ppvGetGattServerInterface(); xBTInterface.pxGattServerInterface->pxGattServerInit( &xBTGattServerCb );
Bluetooth Low Energy アダプタを初期化すると、GATT サーバーを追加できます。GATT サーバーは一度に 1 つしか登録できません。
xStatus = xBTInterface.pxGattServerInterface->pxRegisterServer( pxAppUuid );
-
セキュアな接続のみ、MTU サイズなどのアプリケーションプロパティを設定します。
xStatus = xBTInterface.pxBTInterface->pxSetDeviceProperty( &pxProperty[ usIndex ] );
API リファレンス
完全な API リファレンスについては、「Bluetooth Low Energy API リファレンス」を参照してください。
使用例
以下の例では、新規サービスの広告と作成のために Bluetooth Low Energy ライブラリを使用する方法を示します。FreeRTOS Bluetooth Low Energy デモアプリケーションの詳細については、Bluetooth Low Energy デモアプリケーションを参照してください。
広告
-
アプリケーションで、広告 UUID を設定します。
static const BTUuid_t _advUUID = { .uu.uu128 = IOT_BLE_ADVERTISING_UUID, .ucType = eBTuuidType128 };
-
次に、
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 とスキャン応答のフルネームを送信します。
-
vendors/
を開き、vendor
/boards/board
/aws_demos/config_files/iot_ble_config.hIOT_BLE_SET_CUSTOM_ADVERTISEMENT_MSG
を1
に設定します。これによりIotBle_SetCustomAdvCb
コールバックがトリガーされます。
新しいサービスの追加
サービスの詳細な例については、
を参照してください。freertos
/.../ble/services
-
サービスの特性と記述子の 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\ }
-
特性と記述子のハンドルを登録するバッファを作成します。
static uint16_t usHandlesBuffer[egattDemoNbAttributes];
-
属性テーブルを作成します。いくつかの 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 ) } } };
-
コールバックの配列を作成します。このコールバックの配列は、上で定義されたテーブル配列と同じ順序に従う必要があります。
たとえば、
xCharCounterUUID_TYPE
がアクセスされたときvReadCounter
がトリガーされ、vWriteCommand
がアクセスされたときxCharControlUUID_TYPE
がトリガーされる場合、配列を次のように定義します。static const IotBleAttributeEventCallback_t pxCallBackArray[egattDemoNbAttributes] = { NULL, vReadCounter, vEnableNotification, vWriteCommand };
-
サービスを作成します。
static const BTService_t xGattDemoService = { .xNumberOfAttributes = egattDemoNbAttributes, .ucInstId = 0, .xType = eBTServiceTypePrimary, .pusHandlesBuffer = usHandlesBuffer, .pxBLEAttributes = (BTAttribute_t *)pxAttributeTable };
-
前のステップで作成した構造を使用して、API
IotBle_CreateService
を呼び出します。ミドルウェアは、すべてのサービスの作成に同期するため、IotBle_AddCustomServicesCb
コールバックがトリガーされるとき、新しいサービスは既に定義されている必要があります。-
vendors/
でvendor
/boards/board
/aws_demos/config_files/iot_ble_config.hIOT_BLE_ADD_CUSTOM_SERVICES
を1
に設定します。 -
アプリケーションで 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
(すべてのオプションは、eBTpropertyRemoteRssi
とeBTpropertyRemoteVersionInfo
を必須とします) -
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 ライブラリの移植を参照してください。