Android Bluetooth Low Energy(BLE) communication 4

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

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


저번 시간에 이어서 계속 진행해 보겠습니다.
저번 시간에는 연결까지 진행을 했습니다.
이번에는 연결된 장비로부터 Service와 Characteristic을 알아내는 것부터 시작하겠습니다.


Service UUID와 Characteristic의 UUID를 안다면 바로 사용하면 되고 현재는 모른다는 가정하에 찾아보는 단계입니다.
저번 시간에 만들었던 bluetoothGattCallback 함수에 70 번째 줄을 추가해 줍니다. 연결이 완료되면 discoverServices가 실행됩니다.
그리고 onServicesDiscovered를 override 합니다.
여기에 status가 GATT_SUCCESS 이면 gatt의 services를 모두 찾습니다.





displayGattServices 함수는 다음과 같습니다. 각 Service마다 Characteristic을 찾아서 보여줍니다.




아래는 그 결과입니다.




이번에는 각 Characteristic의 permission과 properties를 확인해 보겠습니다.

displayGattServices 함수에 로그를 추가해 줍니다.





아래는 실행 결과입니다.

writeType, permission, properties 순입니다.





하나만 골라서 해석해 보자면, 00002111-0002-1000-8000-786ab22f6579를 해석해 보겠습니다.

2, 0, 18입니다.

writeType은 2로 기본 설정입니다.





permission은 0입니다.

Permission은 Server만 알 수 있습니다.


Properties는 18입니다.

Notify와 Read를 더하면 18입니다. 두 개의 Properties가 설정된 것을 알 수 있습니다.





Permission의 경우는 서버가 설정한 것이고, 서버가 Client 측에 Characteristic의 권한을 알려주기 위해 사용하는 것이 Properties입니다. 그래서 보통은 Properties와 Permission이 같습니다.



다시 진행해 나갑니다.

제가 만든 GATT 서버이기 때문에 사용해야 할 것이 무엇인지 알고 있습니다.

Service 0xfd31와 0xfd32 에 포함된 Characteristic을 사용하면 됩니다.



데이터 읽기부터 해보겠습니다.

service, service2와 readCharacteristic, readCharacteristic2 변수를 만들어줍니다.





그리고 bluetoothGattCallback에 onCharacteristicRead()를 override 합니다.





그리고 상태를 확인해서 GATT_SUCCESS 성공이면 값을 표현하도록 만듭니다.





자, 이제 어떤 값이 들어있는지 확인해 볼까요?

읽는 방법은 readCharacteristic을 사용합니다.

버튼을 두 개 만들어서 읽어보도록 하겠습니다.





로그를 보면, 기존에 들어있던 값은 '안녕', '친구야'네요.






자 그러면, 데이터를 써봅시다.

bluetoothGattCallback에 onCharacteristicWrite를 override 합니다.





데이터를 쓰는 방법은 writeCharacteristic을 사용합니다.

앗, 참고로 해당 블루투스 GATT 서버에는 Write와 Read를 둘 다 가지고 있는 Characteristic이 없어서 Write를 직접적으로 확인할 수는 없습니다. 읽기 권한이 없어서요. 다른 방식으로 확인할 건데, 특정 글자를 넣으면 위에 봤던 안녕, 친구야가 변하도록 만들었습니다.






푸른과 따뜻한을 보내보도록 하겠습니다.



아래는 결과입니다.






GATT 서버에 푸른을 보내니, 안녕이 별로 바뀌었습니다.

GATT 서버에 따뜻한을 보내니, 친구야가 사람으로 바뀌었습니다.



여기까지 BLE 통신 Read와 Write를 해보았습니다.

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



끝.


카테고리: Android

댓글

이 블로그의 인기 게시물

Python urllib.parse.quote()

Python OpenCV 빈 화면 만들기

tensorflow tf.random.uniform()

Android Notification with Full Screen

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

Android Minimum touch target size

Python bs4.SoupStrainer()

KiCad 시작하기 4 (기존 회로도 수정 및 추가)

음악 총보(Score), 파트보(Part)

tensorflow tf.expand_dims()