nRF52

nRF52 BLE Peripheral에서 Advertising Service Data 활용하기

임베디드 친구 2024. 9. 12. 13:34
반응형

Bluetooth Low Energy (BLE)는 저전력 통신을 효율적으로 제공하기 때문에 다양한 IoT(사물인터넷) 디바이스에서 널리 사용되고 있습니다. nRF52840과 같은 디바이스에서 BLE 애플리케이션을 개발할 때 중요한 부분 중 하나는 Advertising입니다. Advertising은 Peripheral 디바이스가 연결을 맺지 않고 근처의 Central 디바이스에 데이터를 방송하는 과정입니다. 이 데이터 중에서 중요한 요소 중 하나가 바로 Advertising Service Data입니다. 이 데이터는 Peripheral 디바이스가 제공하는 서비스에 대한 추가적인 정보를 포함합니다.

이 글에서는 BLE에서 Advertising Service Data가 어떤 역할을 하는지, 이를 nRF52840 플랫폼에서 설정하고 업데이트하는 방법을 설명합니다. 또한 UUID의 중요성과 nRF5 SDK를 이용한 Advertising Service Data 설정 방법에 대해서도 알아볼 것입니다.

1. BLE Advertising 개요

BLE에서 Advertising은 Peripheral 디바이스가 중앙(Central) 디바이스에게 자신의 존재를 알리고, 간단한 정보를 전송할 수 있는 방식입니다. 이 과정은 연결이 필요 없기 때문에 저전력에서 효율적으로 동작하며, 비컨(Beacon)처럼 단순한 데이터 전송에 유용합니다.

Advertising 패킷에는 기본적인 디바이스 정보 외에도 디바이스가 제공하는 서비스에 대한 세부 정보를 담을 수 있습니다. 이때, Service Data가 중요한 역할을 합니다. Service Data는 Peripheral 디바이스가 제공하는 서비스에 대한 추가 정보를 담아 Central 디바이스에게 전달합니다.

2. Service Data란?

Service Data는 BLE Advertising 패킷의 일부분으로, 특정 서비스에 대한 정보를 포함하고 있습니다. 이것은 주변 디바이스에게 해당 Peripheral 디바이스가 제공하는 서비스에 대한 추가적인 정보를 제공합니다. 이를 통해 중앙 디바이스는 해당 서비스와의 상호작용을 위해 필요한 데이터를 얻을 수 있습니다.

예를 들어, 온도 센서 서비스를 제공하는 디바이스는 Service Data를 통해 현재 온도 정보를 포함시켜 주변 디바이스가 이를 실시간으로 수신할 수 있게 합니다.

3. Service Data의 구성

Service Data는 일반적으로 UUID(Universally Unique Identifier)와 해당 서비스에 대한 데이터를 포함합니다. BLE에서는 두 가지 유형의 UUID가 사용됩니다.

  • 16-bit UUID: 표준 BLE 서비스에 할당된 UUID로, 짧은 형식입니다. 예를 들어, 건강 온도계 서비스는 0x1809의 16-bit UUID를 사용합니다.
  • 128-bit UUID: 특정 벤더가 정의한 고유한 서비스에 사용되며, 각 서비스에 대해 고유하게 할당됩니다. nRF52 시리즈에서는 주로 128-bit UUID를 사용합니다.

3.1 UUID와 Service Data

UUID는 Peripheral 디바이스가 어떤 서비스를 제공하는지를 구분하는 데 사용됩니다. Central 디바이스는 이 UUID를 통해 제공되는 서비스의 종류를 식별할 수 있으며, 추가 데이터는 Service Data 필드에 포함됩니다.

예를 들어, 건강 온도계 서비스의 경우 16-bit UUID는 0x1809로, Service Data에는 현재 온도 정보가 포함됩니다.

4. Service Data의 역할과 활용

Service Data는 주로 다음과 같은 목적으로 활용됩니다.

  • 서비스 홍보: 특정 BLE 서비스를 제공하는 디바이스는 Advertising 패킷을 통해 자신의 서비스를 주변에 알릴 수 있습니다. 예를 들어, 온도 센서가 현재 온도를 Advertising Service Data에 포함시키면, 주변의 Central 디바이스는 이를 통해 온도 정보를 실시간으로 수신할 수 있습니다.
  • 상태 전달: Advertising Service Data를 사용하여 디바이스의 상태 정보를 실시간으로 주변 디바이스에 전송할 수 있습니다. 예를 들어, 배터리 상태나 센서 데이터 등을 포함시켜 사용할 수 있습니다.

4.1 온도 센서 예시

온도 센서를 예로 들어보겠습니다. 온도 센서는 Advertising 데이터에 현재 온도를 포함시켜 주기적으로 중앙 디바이스에 온도를 전달할 수 있습니다. 이때 Service Data를 통해 해당 정보가 전송됩니다. 이 방식은 연결이 필요 없으므로 매우 효율적입니다.

5. nRF52840에서 Advertising Service Data 설정

nRF52840에서 Advertising Service Data를 설정하는 과정은 BLE Peripheral 초기화 단계에서 이루어집니다. 일반적으로 nRF5 SDK에서 제공하는 함수를 사용하여 설정을 진행할 수 있습니다.

아래는 nRF52840에서 온도 정보를 포함하는 Service Data를 설정하는 예시입니다.

void advertising_update(uint8_t* adv_data, uint16_t adv_data_size) {
    ret_code_t ret = NRF_SUCCESS;
    int i = 0;
    ble_advdata_service_data_t adv_service_data[1];

    adv_service_data[0].service_uuid = BLE_UUID_HEALTH_THERMOMETER_SERVICE;
    adv_service_data[0].data.p_data = adv_data;
    adv_service_data[0].data.size = adv_data_size;
    m_advdata.p_service_data_array = adv_service_data;

    ret = ble_advertising_advdata_update(&m_advertising, &m_advdata, NULL);
    APP_ERROR_CHECK(ret);
}

위 코드는 온도 데이터를 광고하는 서비스 데이터를 설정하는 간단한 예시입니다. adv_data 배열에는 현재 온도 데이터가 포함되며, 이를 Advertising 데이터에 포함시켜 방송합니다.

5.1 광고 데이터 업데이트

nRF SDK v16.0.0 이전에는 Advertising 데이터를 변경하려면 광고를 중지한 후 다시 시작해야 했습니다. 하지만 v16.0.0 이후부터는 두 개의 버퍼가 필요하지 않으며, 하나의 Advertising 데이터 버퍼로도 업데이트가 가능합니다. 이를 통해 Advertising 중에도 데이터를 갱신할 수 있게 되어 훨씬 편리해졌습니다.

5.2 ble_advertising_advdata_update 함수

위 예시에서 ble_advertising_advdata_update 함수는 Advertising 데이터를 업데이트하는 역할을 합니다. 이 함수는 현재 실행 중인 광고를 중지하지 않고도 데이터를 변경할 수 있도록 합니다. 온도 센서와 같은 디바이스에서는 온도가 실시간으로 변동하므로, 이러한 데이터 업데이트가 자주 필요할 수 있습니다.

6. Advertising Data 업데이트 방법

nRF52840 디바이스에서 Advertising Data를 설정하고 업데이트하는 방법은 BLE Peripheral 초기화 과정에서 매우 중요한 부분입니다. 앞서 설명한 것처럼, nRF5 SDK v16.0.0 이후로는 Advertising 중간에 데이터를 손쉽게 업데이트할 수 있습니다. 다음은 이를 위한 간단한 절차입니다.

  • Advertising 시작: 초기화된 Advertising 데이터를 사용하여 BLE Advertising을 시작합니다.
  • 데이터 갱신: 새로운 데이터가 있을 때, ble_advertising_advdata_update 함수를 호출하여 데이터만 갱신합니다. 광고는 중단되지 않고 계속 유지됩니다.
  • 오류 처리: 데이터를 업데이트하는 중간에 오류가 발생할 수 있으므로, 항상 APP_ERROR_CHECK와 같은 오류 처리를 적절히 포함하는 것이 좋습니다.

7. 주의사항 및 모범 사례

  • 광고 간격: 너무 짧은 광고 간격은 전력 소모를 증가시킬 수 있습니다. 반면, 너무 긴 간격은 중앙 디바이스가 데이터를 놓칠 수 있습니다. 디바이스의 전력 소비와 응답성을 고려하여 적절한 광고 간격을 설정하는 것이 중요합니다.
  • UUID 관리: UUID는 BLE 서비스 식별의 핵심입니다. 16-bit UUID는 BLE 표준 서비스에 사용되고, 128-bit UUID는 사용자 정의 서비스에 사용됩니다. 서비스 간 혼동을 방지하기 위해 UUID를 체계적으로 관리해야 합니다.
  • 보안: 일부 서비스 데이터는 민감한 정보를 포함할 수 있습니다. 이러한 데이터를 보호하기 위해 BLE 연결 시 암호화 또는 인증을 고려해야 합니다.

8. 결론

nRF52840과 같은 BLE Peripheral 디바이스에서 Advertising Service Data는 주변 디바이스에게 서비스에 대한 추가 정보를 제공하는 중요한 역할을 합니다. 특히, 센서 데이터를 광고하는 디바이스에서는 실시간 데이터를 효과적으로 전송할 수 있는 방법입니다.

nRF5 SDK v16.0.0 이후로 Advertising 데이터를 실시간으로 업데이트하는 방식이 개선되어 더욱 편리하게 사용할 수 있게 되었습니다. 이 글에서는 온도 센서를 예시로 들어 Advertising Service Data를 설정하고 업데이트하는 방법을 살펴보았습니다. 개발 시 UUID의 중요성, 광고 데이터의 구성, 전력 관리 등을 함께 고려하면 BLE 디바이스 간 효율적인 통신을 구현할 수 있을 것입니다.

반응형