안녕하십니까 훙리입니다.
요즘 회사에서 안드로이드와 IOS 를 이용하여 Bluetooth BLE 애플리케이션을 만들고 있습니다.
아직 신입으로 들어온지 반년밖에 되지 않았기 때문에 많이 부족합니다. 피드백 주시면 감사드리겠습니다.
단순한 기능이지만 낯선 기능이기에 제가 공부하면서 알게된 부분에 대해서 작성을 해보도록 하겠습니다.
안드로이드와 IOS가 차이가 나기 때문에 각자 작성을 해보도록 하겠습니다.
일단 필요한 부분을 설명하기전에 블루투스에 대한 이해가 필요합니다. 물론 구글링하면 정말 정말 많기 때문에 약식으로
금방 금방 넘어가겠습니다.
1. BLE 블루투스에 대한 이해
BLE란 저전력 블루투스를 영어로 표현한 것 입니다. Bluetooth Low Energy 의 약자 입니다. 블루투스 4.0 모듈 부터 적용되었고 이후로 IoT기반 장비들이 저전력으로 블루투스를 운용할 수 있게되어 비콘이나 웨어러블 등 다양하게 블루투스를 활용할 수 있게 된것입니다.
물론 현재는 성능이 더 훌륭한 5.0 이상 버전들이 시중에 나와있습니다.
우리가 블루투스를 사용할때 총 3가지 단계를 거치게 됩니다.
A. 스캔
- [스캔]은 말그대로 주변을 검색하는것 입니다. 블루투스 모듈은 일정주기를 가지고 주변에다가 정보를 뿌립니다. 이걸 [Advertise] 라고 합니다. 이 값은 블루투스가 [연결] 되지 않은 상태에서 자기의 존재라던지 정보를 알리기 위해 지속적으로 뿌리는 데이터 입니다. 즉 일반적으로 핸드폰으로 블루투스 설정을 들어가서 장치 검색을 할때 이 스캔을 돌려주는것 입니다.
* 단 스캔에는 배터리 소모가 크므로 무한정 돌려 놓으면 비효율적입니다. 일정시간이 지나도 검색이 안된다면 추후에 검색이 된다 하더라도 원만한 통신이 어렵기 때문에 의미도 없습니다.
그리고 이러한 스캔에 주변의 블루투스 [Advertise]값들을 읽어올 수 있습니다.
이 값에는 다양한 커스텀 값이 있을 수 있겠지만 가장 중요한 녀석들은 UUID, Name, RSSI , TXpower 등이 있습니다.
*UUID 는 장치 고유의 이름입니다. 안드로이드에서는 Address로 표현됩니다. 대부분 앞 두글자는 제조사로 되어있습니다. 안드로이드를 개발하는 입장에서는 UUID라는 것을 자주보시게 되겠지만 IOS에서는 UUID를 CBUUID라고 불리우는것 같습니다.
*Name은 장치의 닉네임입니다. 바꿀수 있는 값이고 우리가 핸드폰으로 블루투스 검색할때 뜨는 " **의 에어팟 프로 " 이부분이 이름입니다.
*RSSI , TxPower 는 장치로 부터 출력되고있는 전파에 대한 값입니다. 얼마나 쌔고 명확한 값이 오고 있는지 알려주는 지표이고 이 값을 이용하여 위치정보를 구하던가 연결의 가능 여부를 판단할 수 있습니다. 예를 들어 3각측량법을 이용하여 현재 사용자의 위치를 알 수 있고 , 이 수치를 이용하여 검색 필터에 넣어 검색이 안되게 할 수 도 있습니다. (이러한 이슈 때문에 위치권한에 대한 문제를 해결해 주어야 합니다) 너무 멀면 연결의 의미가 없기 때문입니다. 실제로 직접 앱을 만들어서 검색해보는것과 핸드폰의 기본 블루투스 검색기능의 결과가 차이가 있는건 이러한 필터에 걸리기 때문입니다. ( 이 두 값은 주변의 환경을 많이 받습니다. 물리적인 장애물 혹은 전자적 장애물에 의하여 값이 굉장히 튀는 성질이 있어서 섬세한 활용은 쉽지 않습니다. )
B.연결
- 읽어온 블루투스 모듈의 정보들 중에 특정장치의 정보를 가지고 [연결]을 합니다. 연결을 하면 본격적으로 통신이 가능합니다.
과거에는 1대1통신만 가능했지만 최근에는 1대N 통신이 가능해졌습니다. 더욱더 활용범위가 넓어졌다고 할 수 있죠.
연결을 할때는 Master 와 Slave가 있습니다. 블루투스에서는 이를 Central, Peripheral 이라고 표현합니다.
한가지 예를 들어서 만약 스마트워치가 있다고 가정해 봅시다. 우리가 생각하기로는 스마트워치가 서버(Central)같고 연결을 시도하는 핸드폰이 주변장치(Peripheral) 같지만 사실은 그 반대입니다. 계속해서 Advertising하는 장비가 주변장치가되고 연결을 시도하는 장치가 Central, 즉 서버가 되는것 입니다.
프로그래밍의 대상이 어떤 장치냐에 따라 코드가 달라지니 주의하시기 바랍니다.
C.등록
- 통신에 필요한 것은 연결이면 족합니다. 하지만 우리가 핸드폰을 열어서 환경설정에 들어가면 등록된 장치라는 리스트가 보일 것 입니다. 여기서 등록된 리스트란 블루투스 장치의 정보를 저장해두고 나중에 Advertise 되어지는 값들이랑 일치를 할 경우 연결이 쉽게 되도록 하는 일종의 아카이브 같은 개념입니다.
이제는 실제 코드와 연결 및 스캔에 대해서 알아보도록 하겠습니다.
'프로그래밍 > Android (Kotlin)' 카테고리의 다른 글
[5가지 사랑의 언어] 연애 심리 테스트 앱 "얼마나 사랑해" 출시했습니다. 사랑에 대한 고뇌로 만들어진 앱 (0) | 2021.06.15 |
---|---|
[Android] BLE 통신 애플리케이션 개발하기 #2 주변 장치 검색 실습 (1) | 2021.05.13 |