[ BLE ]
[ BLE (Bluetooth Low Energy) ]
블루투스는 3.0까지는 Classic / 4.0부터 저전력 (Low Energy , LE ) 프로토콜을 지원하는 BLE 로 구분된다.
이전까지는 쌍방향 통신을 지원해 기기 간 데이터를 주고 받았다면 , 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 하는 디바이스
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번 호핑한다 : 이 패턴이 동기화 되어야 통신이 이루어짐
근거리에서 높은 속도로 지속적인 데이터 전송 (소량의 정보 주기적으로 보냄에 적합) /모든 운영체제 및 플랫폼 지원등의 장점이 있지만 연결범위는 한정적이라는 단점이 있다.
[ 연결과정 ]
- 디바이스가 Advertising Channel을 Hopping 하며 Advertising Packet을 보낸다.
- 핸드폰은 Advertising Channel을 Hopping 하며 Advertising Packet을 Scan 한다.
- 디바이스를 찾았다면 , 그 디바이스에 대한 추가 정보를 얻기 위해 Scan Request를 보낸다
- Scan Request를 받은 디바이스가 Scan Respone을 보낸다
- 핸드폰은 그 Scan Response를 파싱 , 그 데이터를 봤을때 연결하고자 한다면 Connect Request를 보낸다
- 서로 Acknowledging을 시작 , timing 정보등을 동기화 한다
- Connect 완료
- 데이터 교한 시작
이후 디바이스는 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는 동일, 이는 특성도 동일하다
출처
- https://steemit.com/kr-dev/@etainclub/unity-vr-android-ble-9-unity-ble
- https://velog.io/@embeddedjune/BLE-%EA%B0%9C%EB%B0%9C-%EA%B4%80%EB%A0%A8-%EB%82%B4%EC%9A%A9-%EC%A0%95%EB%A6%AC
- https://postpop.tistory.com/16
- http://wearedev.net/?m=bbs&bid=lecture&uid=206&PHPSESSID=4b8c3227f76081a73d47ad3a5728f5fb
- https://blog.naver.com/ycpiglet/222630970457
- https://yonghyunlee.gitlab.io/temp_post/BLE/
'유니티' 카테고리의 다른 글
[Behavior Designer] 04 . Behavior Manager (0) | 2023.01.18 |
---|---|
[Behavior Designer] 03 . Behavior Tree Component (0) | 2023.01.18 |
[Behavior Desinger] 02 . Overview (0) | 2023.01.17 |
[Behavior Designer] 01 . Behavior Tree (0) | 2023.01.17 |
[BLE] Bluetooth LE (2) - 유니티에서 에셋을 활용하여 BLE 구현 (0) | 2022.12.15 |