Bluetooth Low Energy 라이브러리 - FreeRTOS

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

Bluetooth Low Energy 라이브러리

중요

이 라이브러리는 더 이상 사용되지 않는 Amazon-FreeRTOS 리포지토리에서 호스팅됩니다. 새 프로젝트를 생성할 때는 여기서 시작하는 것이 좋습니다. 현재 사용되지 않는 Amazon-FreeRTOS 리포지토리를 기반으로 하는 기존 FreeRTOS 프로젝트가 이미 있는 경우에는 Amazon-FreeRTOS Github 리포지토리 마이그레이션 가이드 섹션을 참조하세요.

개요

FreeRTOS는 프록시 디바이스(예: 휴대폰)를 통해 Bluetooth Low Energy(BLE)를 이용한 Message Queuing Telemetry Transport(MQTT) 주제 게시 및 구독을 지원합니다. FreeRTOS 블루투스 저에너지 (BLE) 라이브러리를 사용하면 마이크로컨트롤러가 MQTT 브로커와 안전하게 통신할 수 있습니다. AWS IoT

AWS IoT Core Cognito를 통해 MQTT/HTTP/웹소켓을 통해 연결되는 BLE 디바이스. AWS

FreeRTOS Bluetooth 디바이스용 Mobile SDK를 사용하여 BLE를 통해 마이크로컨트롤러의 내장형 애플리케이션과 통신하는 기본 모바일 애플리케이션을 작성할 수 있습니다. 모바일 SDK에 대한 자세한 내용은 FreeRTOS Bluetooth 디바이스용 Mobile SDK을 참조하십시오.

FreeRTOS BLE 라이브러리에는 Wi-Fi 네트워크를 구성하고 대용량 데이터를 전송하며 BLE를 통해 네트워크 추상화를 제공하는 서비스가 포함됩니다. 또한 FreeRTOS BLE 라이브러리에는 BLE 스택을 통해 더 직접적으로 제어하기 위한 하위 수준 API와 일부 미들웨어도 포함됩니다.

아키텍처

FreeRTOS BLE 라이브러리는 세 계층, 즉 서비스, 미들웨어 및 하위 수준 래퍼로 구성되어 있습니다.

클라우드 아키텍처 계층: 사용자 애플리케이션, 서비스, 미들웨어, 저수준 래퍼, 제조업체 BLE Stack.

서비스

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를 사용하여 다중 계층의 여러 콜백을 단일 이벤트에 등록할 수 있습니다. 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 라이브러리의 직접 종속성은 다음과 같습니다.

  • 선형 컨테이너 라이브러리

  • 스레드 관리, 타이머, 클록 기능 및 네트워크 액세스를 위해 운영 체제와 인터페이스하는 플랫폼 계층입니다.

상호 작용을 나타내는 방향 화살표가 있는 BLE, 목록/대기열, 네트워크, 클록 등의 구성 요소를 보여주는 아키텍처 다이어그램

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, Vol 3, Part C, 10.2.4에 지정되어 있듯이 디바이스가 Secure Connections Only(보안 연결만 허용) 모드로 설정된 경우 최저 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, Vol 3, Part C, 10.2.1을 참조하십시오.

Initialization(초기화)

애플리케이션이 미들웨어를 통해 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가 포함되어 있습니다. 공통 관리자에 대한 콜백은 두 번째로 초기화해야 합니다.

    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 서버는 한 번에 하나만 등록할 수 있습니다.

    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가 트리거되고, xCharControlUUID_TYPE을 액세스할 때 vWriteCommand가 트리거되는 경우 다음과 같이 배열을 정의합니다.

    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.h에서 IOT_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: 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 서비스 인스턴스가 하나씩 생성됩니다. 각 서비스에는 해당 유형을 식별하는 고유한 UUID(2바이트)가 있습니다. 각 개별 인스턴스는 인스턴스 ID로 구분됩니다.

각 서비스는 각 BLE 서버 디바이스에서 기본 서비스로 인스턴스화됩니다. 하나의 디바이스에서 여러 서비스 인스턴스를 생성할 수 있습니다. MQTT 프록시 서비스 유형에는 고유한 UUID가 있습니다.

특성

특성 내용 형식: CBOR

최대 특성 값 크기: 512바이트

기능 요구 사항 필수 속성 선택적 속성 보안 권한 간략한 설명 UUID
컨트롤 M 쓰기 None 쓰기에 암호화 필요 MQTT 프록시를 시작하고 중지하는 데 사용됩니다. A9D7-166A-D72E-40A9-A002-4804-4CC3-FF01
TXMessage M 읽기, 알림 None 읽기에 암호화 필요 프록시를 통해 브로커에 메시지가 포함된 알림을 보내는 데 사용됩니다. A9D7-166A-D72E-40A9-A002-4804-4CC3-FF02
RXMessage M 응답 없이 읽기, 쓰기 None 읽기, 쓰기에 암호화 필요 프록시를 통해 브로커로부터 메시지를 수신하는 데 사용됩니다. A9D7-166A-D72E-40A9-A002-4804-4CC3-FF03
TX LargeMessage M 읽기, 알림 None 읽기에 암호화 필요 프록시를 통해 브로커에 대용량 메시지(메시지 > BLE MTU 크기)를 전송하는 데 사용됩니다. A9D7-166A-D72E-40A9-A002-4804-4CC3-FF04
RX LargeMessage M 응답 없이 읽기, 쓰기 None 읽기, 쓰기에 암호화 필요 프록시를 통해 브로커로부터 대용량 메시지(메시지 > BLE MTU 크기)를 수신하는 데 사용됩니다. A9D7-166A-D72E-40A9-A002-4804-4CC3-FF05
GATT 절차 요구 사항
특성 값 읽기 필수
긴 특성 값 읽기 필수
특성 값 쓰기 필수
긴 특성 값 쓰기 필수
특성 설명자 읽기 필수
특성 설명자 쓰기 필수
알림 필수
표시 필수
메시지 유형

다음 메시지 유형이 교환됩니다.

메시지 유형 메시지 다음 키/값 페어를 사용하여 매핑
0x01 CONNECT
  • 키 = 'w', 값 = 유형 0 정수, 메시지 유형 (1)

  • 키 = 'd', 값 = 유형 3, 텍스트 문자열, 세션의 클라이언트 식별자

  • 키 = 'a', 값 = 유형 3, 텍스트 문자열, 세션의 브로커 엔드포인트

  • 키 = 'c', 값 = 단순 값 유형 True/False

0x02 CONNACK
  • 키 = 'w', 값 = 유형 0 정수, 메시지 유형 (2)

  • 키 = 's', 값 = 유형 0 정수, 상태 코드

0x03 PUBLISH
  • 키 = 'w', 값 = 유형 0 정수, 메시지 유형 (3)

  • 키 = 'u', 값 = 유형 3, 텍스트 문자열, 게시 주제

  • 키 = 'n', 값 = 유형 0, 정수, 게시용 QoS

  • 키 = 'i', 값 = 유형 0, 정수, 메시지 식별자, QoS 1 게시에만 해당

  • 키 = 'k', 값 = 유형 2, 바이트 문자열, 게시 페이로드

0x04 PUBACK
  • QoS 1 메시지에만 전송되었습니다.

  • 키 = 'w', 값 = 유형 0 정수, 메시지 유형 (4)

  • 키 = 'i', 값 = 유형 0, 정수, 메시지 식별자

0x08 SUBSCRIBE
  • 키 = '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, 정수, 상태 코드 UnSubscription

0X0C PINGREQ
  • 키 = 'w', 값 = 유형 0 정수, 메시지 유형 (12)

0x0D PINGRESP
  • 키 = 'w', 값 = 유형 0 정수, 메시지 유형 (13)

0x0E DISCONNNECT
  • 키 = 'w', 값 = 유형 0 정수, 메시지 유형 (14)

대용량 페이로드 전송 특성
TX LargeMessage

LargeMessage TX는 디바이스에서 BLE 연결에 대해 협상된 MTU 크기보다 큰 대용량 페이로드를 전송하는 데 사용됩니다.

  • 디바이스는 특성을 통해 페이로드의 첫 번째 MTU 바이트를 알림으로 전송합니다.

  • 프록시는 이 특성의 나머지 바이트에 대한 읽기 요청을 전송합니다.

  • 디바이스는 최대 MTU 크기 또는 페이로드의 나머지 바이트 중 더 작은 값까지 전송합니다. 매번 전송된 페이로드 크기만큼 읽은 오프셋이 증가합니다.

  • 프록시는 길이가 0인 페이로드 또는 MTU 크기보다 작은 페이로드가 될 때까지 계속해서 특성을 읽습니다.

  • 디바이스가 지정된 제한 시간 내에 읽기 요청을 수신하지 못하면 전송이 실패하고 프록시 및 게이트웨이가 버퍼를 해제합니다.

  • 프록시가 지정된 제한 시간 내에 읽기 응답을 수신하지 못하면 전송이 실패하고 프록시가 버퍼를 해제합니다.

RX LargeMessage

LargeMessage RX는 기기에서 BLE 연결에 대해 협상된 MTU 크기보다 큰 대용량 페이로드를 수신하는 데 사용됩니다.

  • 프록시는 이 특성에 대한 응답과 함께 쓰기를 사용하여 메시지를 최대 MTU 크기까지 하나씩 씁니다.

  • 디바이스는 길이가 0이거나 MTU 크기보다 작은 쓰기 요청을 수신할 때까지 메시지를 버퍼링합니다.

  • 디바이스가 지정된 제한 시간 내에 쓰기 요청을 수신하지 못하면 전송이 실패하고 디바이스가 버퍼를 해제합니다.

  • 프록시가 지정된 제한 시간 내에 쓰기 응답을 수신하지 못하면 전송이 실패하고 프록시가 버퍼를 해제합니다.