기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.
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를 통해 마이크로 컨트롤러의 내장형 애플리케이션과 통신하는 네이티브 모바일 애플리케이션을 작성할 수 있습니다. 모바일 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 라이브러리는 서비스, 미들웨어 및 하위 수준 래퍼 계층으로 구성되어 있습니다.

서비스
FreeRTOS Bluetooth Low Energy 서비스 계층은 미들웨어 API를 활용하는 네 가지 일반 속성(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를 사용하여 다중 계층의 여러 콜백을 단일 이벤트에 등록할 수 있습니다. 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 핵심 규격
Initialization(초기화)
애플리케이션이 미들웨어를 통해 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가 포함되어 있습니다. 공통 관리자에 대한 콜백은 두 번째로 초기화해야 합니다.
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 서버는 한 번에 하나만 등록할 수 있습니다.
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
가 트리거되고,xCharControlUUID_TYPE
을 액세스할 때vWriteCommand
가 트리거되는 경우 다음과 같이 배열을 정의합니다.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 라이브러리 이식을 참조하세요.