Android Bluetooth Low Energy(BLE) communication 3

사용 언어: Kotlin 1.6.0
사용 버전: Android Studio 2020.3.1 Patch 3

안드로이드 Bluetooth Low Energy(BLE) communication 3을 알아보겠습니다.


저번 시간에 이어서 계속 진행해 보겠습니다.
BluetoothManager를 불러오고, 이 BluetoothManager로 Bluetooth Adapter를 불러왔습니다. Bluetooth Adapter로 Bluetooth 기능이 활성화되어있는지 확인하였고, Bluetooth Adapter에 있는 bluetoothLeScanner를 불러와 여기에 필터, 스캔 설정, Callback 함수를 장착하고 스캔을 했습니다.


UUID 0xFD31 서비스를 제공하는 서버에 연결해 보겠습니다.
UUID는 128 bit로 구성되어 있는데 왜 0xFD31로만 표기한 것일까요? 그것은 짧게 적는 방식(16 bit)으로 적었기 때문입니다. 





위의 사이트에 Service Discovery 문서를 보면 BASE_UUID라는 말이 있습니다.

BASE_UUID에서 다른 부분은 변경하지 않고 맨 처음 앞에 00000000부분의 값이 0000FD31이면 0xFD31로 줄여서 부를 수 있습니다.

즉, 전체 UUID는 0000FD31-0000-1000-8000-00805F9B34FB라는 뜻입니다.





여기서 서비스 UUID가 0xFD31인 Service를 제공하는 Server에 연결해 보겠습니다.





그래서 필터를 ServiceUUID로 걸어주고 검색합니다.

검색 결과입니다.




연결을 위해서는 MAC 주소가 필요합니다.

위에 device를 활용해서 MAC 주소를 받습니다.





위의 MAC 주소를 활용해서 연결을 시도합니다.

Bluetooth Adapter를 사용하여 getRemoteDevice 함수를 불러옵니다.

우리는 위에서 받은 MAC 주소를 사용하지만, 수동으로 여기에 MAC 주소를 넣는다면, 반드시 대문자로 입력해야 합니다.




이제 Callback 함수를 만듭니다.

BluetoothGattCallback에는 연결 상태 등을 확인할 수 있는 함수가 존재합니다.





연결을 하기 위해 connectGatt() 함수를 사용합니다. 함수에는 Context, autoConnect, BluetoothGattCallback 이렇게 3 가지 인자가 필요합니다.

함수는 GATT Client 기능을 수행할 수 있는 객체를 반환합니다.






bluetoothGatt에 이제 연결된 정보가 저장됩니다.


연결을 끊는 방법은 다음과 같습니다.




연결하는 것까지 해보았습니다.

다음 시간에 이어서 계속 BLE 통신을 알아보겠습니다.


끝.



카테고리: Android

댓글

이 블로그의 인기 게시물

Python OpenCV 빈 화면 만들기

Python urllib.parse.quote()

Python bytes.fromhex()

Android AVD Ram size change

Forensics .pyc 파일 .py로 복구하기

Android Minimum touch target size

KiCad 시작하기 7 (FreeRoute 사용하기 2)

Android Notification with Full Screen

C++ OpenCV 모폴로지 침식, 팽창

KiCad 시작하기 2 (PCB 만들기)