본문 바로가기

유니티

[ 유니티 ] Bluetooth LE (1) - BLE에 관하여

[ BLE ]

[ BLE (Bluetooth Low Energy) ]

블루투스는 3.0까지는 Classic / 4.0부터 저전력 (Low Energy , LE ) 프로토콜을 지원하는 BLE 로 구분된다.

이전까지는 쌍방향 통신을 지원해 기기 간 데이터를 주고 받았다면 , BLE는 단방향 통신 또한 가능하게 되었다.

이러한 단방향 수신으로 이전의 블루투스 기기와 같이 페어링 연결을 필요로 하지 않아 새로운 활용법을 가지게 되었다.

 

개발에 보면 좋은 글

 

개발에 보면 좋은 글

 

유니티 , VR , BLE

 

[ 연결 ]

[ 연결모드 ]

BLE의 연결모드는 Advertising Mode / Connection Mode 두가지로 나뉜다.

 

Advertising Mode

=>Advertiser는 자신의 존재에 대해서 알리는 신호 Advertising Packet을 보내고 , Observer가 그걸 찾아 연결하는 시도가 이루어지는 모드이다 .

 

BLE에서 Advertising Packet은 데이터가 매우 작다 . 이 신호를 지속적으로 쏘는 것이 Beacon (비콘) 이다 .

2.4 GHz 주파수 대역에서 Advertising Channel ( 37,38,39 채널)에서만 동작한다.신호를 일방적으로 보내기에 보안이 취약하다는 단점이 있다.

 

해당 모드에서 블루투스 연결간의 역할은 다음의 두가지로 나뉜다 .

Advertiser : Signal을 주기적으로 보내는 디바이스 

Observer : Signal을 주기적으로 Scan 하는 디바이스

 

Advertising Signal(Advertising Packet)의 종류

 

Connection Mode

=>Advertising Mode로 알게된 기기중 하나와 1:1로 연결하는 모드이다 . 연결후 서로 타이밍을 맞춰 데이터를 주고 받으며,

이전 모드 Advertising/Scan은 하지 않는다 (블루투스 클래식의 페어링 개념)

 

양방향으로 데이터를 주고 받거나 , advertising만으로는 주고 받을 데이터의 양이 많을 경우 Connection Mode로 통신한다

연결이 되면 Advertier와 Observer는 서로 1:1 동작으로 주파수 도약 (Frequency Hopping)방식으로 동작한다 .

 

Central(Master) : 다른 디바이스와 Connection을 맺기 위해 , Connectable Advertising Signal을 주기적으로 Scan 하다,

적절한 디바이스에 연결요청을 한다 . 연결 요청이 되면 Central은 timing을 설정 , 주기적인 데이터 교환을 주도한다.

 

 Peripheral(Slave) : 다른 디바이스와 Connection을 맺기 위해 , Connectable Advertising Signal을 주기적으로 보낸다.

이를 수신한 Central 디바이스가 Connection Request를 보내면 이를 수락 , Connection을 맺는다.

 

참고)

=>timing : 두 디바이스가 매번 같은 Channel에서 데이터를 주고받기 위해 정하는 hopping 규칙

=>블루투스는 주파수 대역인 2402 ~ 2480MHZ, 총 79 개의 채널을 사용, 이때 여러 시스템간 전파 간섭을 방지하기 위해
주파수 호핑 방식을 사용한다 . 
=>주파스 호핑 : 많은 수의 채널을 특정 패턴을 따라 빠르게 이동하며,패킷을 조금씩 전송하는 기법.블루투스는 79개의 채널1초당 1600번 호핑한다 : 이 패턴이 동기화 되어야 통신이 이루어짐

 

근거리에서 높은 속도로 지속적인 데이터 전송 (소량의 정보 주기적으로 보냄에 적합) /모든 운영체제 및 플랫폼 지원등의 장점이 있지만 연결범위는 한정적이라는 단점이 있다.

 

[ 연결과정 ]

  1. 디바이스가 Advertising Channel을 Hopping 하며 Advertising Packet을 보낸다.
  2. 핸드폰은 Advertising Channel을 Hopping 하며 Advertising Packet을 Scan 한다.
  3. 디바이스를 찾았다면 , 그 디바이스에 대한 추가 정보를 얻기 위해 Scan Request를 보낸다
  4. Scan Request를 받은 디바이스가 Scan Respone을 보낸다
  5. 핸드폰은 그 Scan Response를 파싱 , 그 데이터를 봤을때 연결하고자 한다면 Connect Request를 보낸다
  6. 서로 Acknowledging을 시작 , timing 정보등을 동기화 한다
  7. Connect 완료
  8. 데이터 교한 시작

이후 디바이스는 Advertising Signal을 보내지 않는다.

 

[ 프로토콜 스택 ]

[ 프로토콜 스택 ]

디바이스들이 Bluetooth로 통신하기 위해 통신규약인 프로토콜이 쌓인 Protocol Stack을 가지고 있다. Protocol Stack을 거치며 패킷이 분석된다 .

  • Application : Application Layer (App)
  • Host : GAP (Generic Access Profile) / GATT (Generic Attribute Profile)
  • Controller :  Link Layer (LL) / Physical Layer (PHY)

Controller

Physical Layer

=>Bluetooth Signal과 통신 할 수 있는 회로가 구성되어 있다 . Analog 신호 <-> Digital 신호

2.4GHz 신호를 40개의 channel로 나누어 통신하는데 그 중 3개는 Advertising Channel나머지는 DataChannel이다.

 

Link Layer

=>5가지 상태를 가지고 있다 . 각 디바이스는 서로 연결되는 과정에서 State를 변경시킨다 .

  • Standby : Signal packet을 보내지도 받지도 않는다.
  • Advertising : Advertising packet을 보내고 해당 해킷에 대한 상대 디바이스의 response를 받기도,주기도 하는 상태 .
  • Scanning : Advertising Channel 에서 scanning하고 있는 상태
  • Initial : Advertiser의 Connectable Packet을 받은후 Connection Request를 보낸 상태
  • Connection:연결 이후의 상태

 

Host

GAP (Generic Access Profile)

=> 서로 다른 제조사가 만든 BLE 디바이스끼리 서로 호환되도록 통신 규격을 제공한다.

데이터를 어떻게 보내고,인지하고,연결할지에 대해 규격을 정해놓은 Profile이다.

Central Device (중앙 장치) /Periphel Device(주변 장치)가 핵심이 되는 컨셉이다 .

 

Periphel 장치는 주로 작고,저전력으로 동작 ,제한된 리소스를 가진 장치이다 . 심박 측정기 /BLE 근접센서 태그 등이 해당되는데 센서라 생각하면 된다 .

 

Central 장치는 폰,태블릿등 리소스를 가진 장치이다 .

 

 

GATT (Generic Attribute Profile)  

=>두 BLE 장치간 데이터를 교환할 때, 데이터를 발견하고,읽고 쓰는 것을 규격화 하고 데이터의 구조를 정의한 Profile이다.즉 , 두 BLE 장치간 SErvice / Characteristic을 이용해서 데이터를 주고 받는 방법을 정의한것이다.

 

GATT는 Profile(프로파일) / Service(서비스) / Characteristic(특성)으로 구성되어 있다.

  • Profile : 서비스의 묶음. Bluetooth SIG 나 Peripheral 디자이너에 의해 만들어지는 기본 데이터 표준 집합
  • Service : 데이터를 논리적 단위로 나눠 놓은 그룹.Characteristic(특성)이라 불리는 더 작은 데이터 단위를 하나이상  포함(특성들의 집합).각 서비스는 UUID라 불리는 구분자가 존재한다.
  • Characteristic:GATT에서 가장 작은 데이터 단위. 단 하나의 데이터만 포함되며 UUID를 가지고 있다.

참고) : UUID (Generic Attribute Profile)

UUID 는 6bit(for officially adopted BLE Services) 혹은 128bit(for custom services) 의 서비스 혹은 특성의 구분자이다.

현재 BLE 사이트에서 공적으로 제공되는 서비스의 UUID는 커스텀도 가능하다.

batterySErvice("180F")를 실행한다면 batteyService의 UUID로 0000180f-0000-1000-8000-00805f9b34fb가 게시됨.

빨간 부분외 UUID는 동일, 이는 특성도 동일하다

 

GATT 규격

 

 

출처