Nordic Bluetooth 일인 스타트업 딥네트워크 - Nordic Bluetooth 5.1 SDK 을 적용해서 송신 및 수신시 멀티페어링된 장치들과 데이터 전송 기술력 소개 ...
딥네트워크 CEO / 장석원 / 010 3350 6509 / sayhi7@daum.net
Nordic Bluetooth 5.1 SDK는 주로 nRF52 시리즈 및 nRF53 시리즈의 SoC (System-on-Chip)를 사용하여 구현됩니다. 이러한 칩셋은 Bluetooth 5.1 스펙을 지원하며, 특히 Bluetooth 방향 탐지(Direction Finding) 및 AOA (Angle of Arrival), AOD (Angle of Departure) 기능을 활용한 고정밀 위치 추적 기능을 제공합니다. Nordic의 SDK는 이러한 기능을 활용하여 Bluetooth 5.1의 향상된 페어링, 접속 관리, 저전력 기능 등을 지원합니다.
주요 칩셋
Nordic Bluetooth 5.1 SDK에서 지원하는 주요 칩셋은 다음과 같습니다:
- nRF52811: Bluetooth 5.1의 핵심 기능을 지원하는 SoC로, 위치 기반 서비스에 적합합니다.
- nRF52840: 강력한 멀티 프로토콜 지원과 Bluetooth 5.1 기능을 제공하며, 고성능 및 저전력 운영을 특징으로 합니다.
- nRF5340: 듀얼 코어 SoC로 Bluetooth 5.1 기능 외에도 강력한 성능과 확장성을 지원합니다.
Bluetooth 5.1 Stack 세부 구현
Nordic Bluetooth 5.1 SDK는 SoftDevice라는 독점 Bluetooth 스택을 포함하고 있으며, 이를 통해 다양한 Bluetooth 기능을 제공합니다. SoftDevice는 안정적이고 검증된 스택으로, 페어링, 접속 관리, 저전력 제어, 광고 및 스캐닝 등을 포함한 Bluetooth 기능을 구현할 수 있습니다.
1. 페어링 처리 부분
페어링 처리는 보안 연결을 설정하는 중요한 부분입니다. Nordic SDK는 다음과 같은 API를 통해 페어링을 관리합니다:
- pm_conn_sec_params_set(): 보안 매개변수를 설정합니다. 이 함수의 인자는 ble_gap_sec_params_t 구조체로, 보안 수준, 암호화 여부, 키 분배 정책 등을 설정합니다.
- pm_conn_secure(): 설정된 보안 매개변수를 기반으로 페어링을 시작합니다.
2. 접속 관리 부분
Bluetooth 5.1에서는 여러 장치와의 연결을 안정적으로 관리하는 것이 중요합니다. Nordic SDK는 연결 설정, 유지 및 해제를 위해 다음 API를 사용합니다:
- sd_ble_gap_connect(): 장치가 중앙 역할을 할 때, 지정된 주소로 연결을 시도합니다. 이 함수의 인자는 연결할 장치의 주소 및 연결 매개변수를 설정합니다.
- sd_ble_gap_disconnect(): 연결을 종료합니다.
3. Notification 처리 부분
Notification은 서버 장치에서 클라이언트로 데이터를 전송하는 데 사용됩니다. Nordic SDK에서는 다음 API를 사용하여 Notification을 설정하고 전송할 수 있습니다:
- sd_ble_gatts_hvx(): Notification을 전송합니다. 이 함수의 인자는 핸들(handle), 데이터 길이, 그리고 전송할 데이터를 포함합니다.
- sd_ble_gatts_value_set(): Notification 전송 전, 전송할 값을 설정합니다.
4. 저전력 제어 처리 부분
Bluetooth 5.1의 저전력 기능은 배터리 수명을 연장하는 데 중요한 역할을 합니다. Nordic SDK는 저전력 모드를 효과적으로 관리하기 위해 다음 API를 사용합니다:
- sd_app_evt_wait(): CPU를 저전력 모드로 전환합니다.
- nrf_pwr_mgmt_run(): 시스템이 저전력 상태로 전환될 수 있도록 전력 관리 루틴을 실행합니다.
5. Advertising 처리 부분
광고는 Bluetooth 장치가 주기적으로 신호를 브로드캐스트하는 역할을 합니다. Nordic SDK에서는 다음 API를 통해 광고를 설정하고 관리합니다:
- sd_ble_gap_adv_start(): 광고를 시작합니다. 이 함수의 인자로는 광고 설정 매개변수가 들어가며, 이를 통해 광고 인터벌, 광고 데이터 등을 지정할 수 있습니다.
- sd_ble_gap_adv_stop(): 광고를 중지합니다.
6. Scanning 처리 부분
스캔은 주로 주변 Bluetooth 장치를 검색할 때 사용됩니다. Nordic SDK에서는 다음 API를 사용하여 스캔을 관리합니다:
- sd_ble_gap_scan_start(): 스캔을 시작합니다. 이 함수의 인자로는 스캔 매개변수(ble_gap_scan_params_t)가 포함됩니다.
- sd_ble_gap_scan_stop(): 스캔을 중지합니다.
7. 1멀티 페어링 처리
Bluetooth 5.1에서는 다중 장치와의 페어링이 가능하며, 이를 위해 Nordic SDK에서는 다중 장치 연결을 관리하는 기능을 제공합니다.
멀티 페어링 처리의 핵심 API는 다음과 같습니다:
- pm_peers_delete(): 모든 저장된 페어링 정보를 삭제합니다.
- pm_peer_new(): 새로운 페어링 정보를 저장합니다.
- pm_conn_sec_start(): 각 연결에 대해 보안 설정을 시작합니다.
송신과 수신 구현 예시
송신 및 수신은 멀티페어링된 장치들과 데이터 전송을 할 때 유용합니다. 이를 구현하기 위해서 다음과 같은 흐름을 사용할 수 있습니다:
- 각 연결에 대해 sd_ble_gatts_hvx() 함수를 호출하여 데이터를 전송합니다. 각 장치에 대한 핸들을 유지하면서 동시에 송신 작업을 수행할 수 있습니다.
- 수신 측에서는 ble_evt_handler() 콜백 함수를 통해 수신된 데이터를 처리합니다. 이때 각 연결에 대해 핸들 및 데이터 상태를 유지합니다.
예를 들어, 다중 장치에 Notification을 보내려면 다음과 같이 구현할 수 있습니다:
uint16_t conn_handle = connections[i].conn_handle;
ble_gatts_hvx_params_t hvx_params;
memset(&hvx_params, 0, sizeof(hvx_params));
hvx_params.handle = char_handle;
hvx_params.type = BLE_GATT_HVX_NOTIFICATION;
hvx_params.p_data = p_data;
hvx_params.p_len = &data_len;
sd_ble_gatts_hvx(conn_handle, &hvx_params);
}
위의 코드에서 다중 연결에 대해 각각 Notification을 보내고 있으며, 각 연결에 대한 핸들을 기반으로 데이터를 전송합니다.
이와 같이 Nordic Bluetooth 5.1 SDK는 다양한 API와 설정을 통해 페어링, 접속 관리, 저전력 모드,
멀티 페어링 등 Bluetooth 5.1의 고급 기능을 구현할 수 있습니다.