iOS Core Bluetooth (1)

Hoontopia
hoontopia
Published in
9 min readMay 1, 2019

자! 이번에 공부해 볼 주제는 Core Bluetooooooooooooth 이다!

이 Bluetooth 란 놈은 사내 프로젝트의 메인 도메인 중 하나인데, 입사 1년이 지난 뒤에야 공부를 시작하는 나도 정상은 아니다.. (이제라도 공부한다니 다행)

1. Bluetooth ?

Bluetooth 는 휴대폰, 노트북, 이어폰·헤드폰 등의 휴대기기를 서로 연결해 정보를 교환하는 근거리 무선 기술 표준을 뜻한다.

Bluetooth 의 구성 요소

블루투스는 Master — Slave 모델을 사용한다.

Master (Client / Scanner / Centeral)

  • Slave 들의 Advertisement 를 스캔하며 적절한 Slave 에 연결 요청 (Ex. 스마트폰 — 무선이어폰 연결에서 스마트폰)
  • 다수의 Slave 와의 연결이 가능하다.

Slave (Server / Advertiser / Peripheral)

  • Advertising 패킷을 브로드캐스트하며 Master 로부터 연결 요청이 들어오면 수락 (Ex. 스마트폰 — 무선이어폰 연결에서 무선이어폰)
  • 단 하나의 Master 에게만 연결 가능하며 Slave 간 연결은 불가능하다.

Master 와 Slave 의 역할은 상황에 따라 변경 가능하다!

둘이 어떻게 정보를 교환하는데?

블루투스는 2402~2480MHz 의 주파수 대역 (총 79개 채널)을 사용, 전송 데이터를 패킷으로 분할하여 79개의 블루투스 채널들 중 하나에 전송한다. (BLE 는 채널당 2 MHz 씩 총 40 채널 / 이 중 3 개의 채널을 Advertising 채널로 사용)

채널을 고정으로 사용하면.. 다른 신호로부터 간섭이 일어나면 어떡하지?

이 문제를 회피하기 위해 블루투스는 주파수 호핑 (Frequency Hopping) 방식을 사용한다! 주파수 호핑이란 많은 수의 채널을 특정 패턴에 따라 빠르게 이동하며 패킷을 조금씩 전송하는 기법이다. 블루투스는 할당된 79개 채널을 1초당 1600번 채널을 바꾸면서 동작한다. (하지만.. 모든 채널이 포화상태라면.. 채널바꾸다가 끝날수도..) Master 와 Slave 간 같은 시간에 같은 채널에 위치하도록 동기화되어야 통신이 이루어진다!

2. BLE (Bluetooth Low Energy) ?

블루투스 4.0 버전부터 지원하는 저전력 무선 통신 방식이다. (iOS 는 5 부터 지원한다)

첫번째는 Classic 블루투스, 두번째는 Classic / LE 모두 지원하는 블루투스 (듀얼 모드), 세번째는 BLE 블루투스 (싱글 모드) 의 프로토콜 스택을 나타낸다.

3. Bluetooth Protocol

3–1. Host Controller Layer

하드웨어 + 소프트웨어로 구성된 저수준 계층

Physical Layer (PHY)

아날로그 신호 통신, 디지털 — 아날로그 신호 간의 변환을 담당한다.

Link Layer

Physical Layer 와 상호작용하는 Layer 로 하드웨어와 소프트웨어로 구성되어있다.

소프트웨어 단에서는 Bluetooth 기기간의 통신 및 연결 상태를 관리하는데, 이 때 통신에 참여하는 두 Bluetooth 기기는 다음과 같은 Role 을 맡게 된다.

연결 전 (Before Connection)

Bluetooth 기기들은 연결 이전에 서로의 존재를 인식하기 위해 각자 다음과 같은 Role을 가지고 정보를 교환한다.

Role

  • Advertiser : Advertising Packet 을 Broadcast 한다.
  • Scanner : Advertiser 가 Broadcast 하는 Advertising Packet 을 수신한다.

Advertising Packet 에 포함되는 Advertiser 의 세 가지 상태

  • Connectable / Non-Connectable : Connect Request Packet 수신 가능 여부
  • Scannable / Non-Scannable : Scan Request Packet 수신 가능 여부
  • Directed / Undirected : Advertising Packet 내 사용자 데이터 포함 유무 (Direct의 경우, 자신과 타겟 Bluetooth Device 의 Mac address 만 포함)

Scanning 의 두 가지 종류

  • Passive Scanning : Advertising Packet 을 수신하되, Advertiser 로 추가적인 응답을 송신하지는 않는다.
  • Active Scanning : Advertising Packet 을 수신 후, Advertiser 로 Scan Request Packet 을 송신한다. Advertiser 가 이를 수신 시, Advertiser 는 Scan Response Packet 을 Scanner 로 송신한다. ( Scan Response Packet 에는 장치 이름 등, Advertising Packet 에 포함하지 못했던 추가적인 정보를 포함 할 수 있다.)

연결 후 (After Connection)

연결은 Master 와 Slave 간 같은 시간에 같은 채널에 위치하여 데이터 교환이 가능하도록하는 과정이다. 다음과 같은 Role 을 수행한다.

Role

  • Master : 연결을 시작하고 관리한다.
  • Slave : Master 의 연결 요청을 수락, Master 와의 호핑 규칙을 따른다.

연결 과정을 도식화하면 다음과 같다.

3–2. Host Layer

L2CAP (Logical Link Control And Adaptation Protocol)

상위 계층으로부터 수신한 데이터를 하위 계층이 기대하는 형태(반대의 경우도)로 변환한다.

GAP (Generic Access Profile)

Bluetooth 기기의 발견 (Discovery), 연결 (Connection) 을 제어한다.

Role

  • Central : Link Layer 의 Master 와 대응된다. 스마트폰이나, 태블릿과 같이 충분한 전원과 메모리 등의 리소스를 갖춘 장치이다.
  • Peripheral : Link Layer 의 Slave 와 대응된다. 센서와 같이 제한된 리소스를 가진 장치 들로, Central 과 장치와 연결되어 동작한다.

GATT (Generic Attribute Profile)

두 Bluetooth 기기가 연결 된 후, 두 기기 간의 데이터를 주고 받는 방법을 정의

Role

  • Client : Server 가 제공하는 Service 를 파악 (Service Discovery) 한 후, Server 로 Data Request를 보내고 Server 로부터 해당하는 Response 를 받는다.
  • Server : Client 의 Data Request 에 따라 동작 수행 후 Client로 Response 를 전송한다.

GATT 에서 정의하는 데이터의 구조

  • Profile : 블루투스 표준에 기초해서 블루투스 모듈이 어떤 종류의 데이터를 전송하는지에 대한 정의. 두 Bluetooth 기기가 호환 가능하려면 동일한 Profile 을 지원해야 한다!
  • Service : 특정한 기능과 관련이 있는 데이터 (Characteristic)의 집합이다. Service 각각 고유한 UUID 값을 가진다. Bluetooth 표준에 정의된 Service 의 경우 16 bit, 사용자 정의 Service 의 경우 128 bit UUID 를 사용한다.
  • Characteristic : Peripheral 장치가 제공하는 실제 데이터가 담긴 그릇이다. 오직 하나의 데이터만 포함한다. (ex. 심박 측정기의 경우 측정 값)

데이터 교환의 경우에는 Client 의 주도 하에 수행된다. 그런데 Server 가 자신의 상태 변경을 알리고 싶을 때는 어떻게 해야할까?

  • Client 는 Characteristic 에 notify /indicate 을 설정할 수 있다. 따라서 Server 는 해당 Characteristic 에 변화가 있는 때, notify 의 경우 단순히 변화가 있음을 알리고, indicate 는 변화를 알린 후 이를 수신 했는지 확인하는 과정이 추가된다.

참고 링크

https://www.bluetooth.com/ko-kr/specifications/profiles-overview/

https://developer.apple.com/library/archive/documentation/DeviceDrivers/Conceptual/Bluetooth/BT_Bluetooth_Basics/BT_Bluetooth_Basics.html#//apple_ref/doc/uid/TP30000997-CH214-CHDJGCEG

https://developer.apple.com/library/archive/documentation/NetworkingInternetWeb/Conceptual/CoreBluetooth_concepts/CoreBluetoothOverview/CoreBluetoothOverview.html#//apple_ref/doc/uid/TP40013257-CH2-SW17

https://blog-kr.zoyi.co/bluetooth-low-energy-ble/

http://www.hardcopyworld.com/gnuboard5/bbs/board.php?bo_table=lecture_iot&wr_id=15

https://akinokaze.tistory.com/63

--

--