(참조) flutter_blue_plus: ^1.31.2
(코드) https://github.com/boskokg/flutter_blue_plus
(1)VSC에서 example의 main.dart 우클릭후 실행하거나 (2)터미널 창에서 직접 "flutter run" 실행 둘다 가능합니다.
실행하면에서 (1)버튼은 BT 스킨 기능이며, (2)원하는 OBDII 동글과 연결합니다. (3)MTU 사이즈 변경, (4)서비스 종류 검색 기능입니다.
위의 순서대로 진행해서 (4)Get service 누루면 서비스 UUID가 3개 나옵니다. 각각의 내용을 열어보면,
0x1800과 0x1801은 OBD 통신에 사용할 수 없고(이전글 참조) 0xFFF0에 있는 0xFFF1과 0xFFF2중 0XFFF1만 사용 가능합니다. 기존에 보지 못했던 숫자들이 튀어나와서 몹시 당황했습니다. 구글링해서 찾아보니 표준 규정이 있었습니다.
(참고자료)
BT Service 번호의 의미 → 아래 요약본 참조
(참조) https://www.bluetooth.com/specifications/assigned-numbers/ ← Service 번호 할당
아래 사진처럼 Service 0xFFF0의 하위 메뉴로 진입하면 2개의 Characteristic(0xFFF1, 0xFFF2) 나오고,
0xFFF1 (Characteristic)은 하위 메뉴에 0x2902 : Descriptor (read, write 기능있음)로 나눠지는데 OBD 통신으로 사용 가능한 것은 0xFFF1 : Characteristic입니다.
LightBlue앱에서 확인되었는데, notification에 대한 정보가 표시 안되는 이유는 아직 모릅니다. 아마도 subscribe옵션이 이를 포함하기 때문일것입니다.
Service 0xFFF0 --> Characteristic 0xFFF1 --> Descriptor 0x2902 순으로 정렬되고
각 메뉴를 눌러보면 터미널창에 해당 기능이 어떤 것들인지 정보 확인 가능합니다.
<Subscribe> 버튼을 누루면 "<setNotifyValue> = true로 되는 것이 확인됩니다.
예상했던 것처럼 Subscribe = Notify 기능 이라는 것을 알수 있습니다.
그렇다면, Descriptor의 Read, Write기능은 무엇일까요?
"WriteNoResp"처럼 Write도 동일한 기능으로 추정됩니다. Read의 경우 Notify와는 다르게 원하는 시점에서 값을 읽어 오는것 확인되는데 정확한 용도는 좀더 찾아 봐야 겠습니다.(추후 정리 예정)
앱 실행후 각 메뉴 버튼의 기능을 알았으니, 이제 소스코드가 어떻게 동작하는지 분석합니다.
앱 실행시 메뉴에 나와있는 기능 구성은 아래와 같은 코드들(.dart파일)로 되어 있습니다.
example 내부 소스 코드 구성 → main.dart외 11개 dart 파일로 구성됨
그런데..
이 많은 코드를 정적 분석한다? 또 다시 숨이 턱 막힙니다.(그래도 하나씩 풀어가야 겠지만요....)
(사실 봐도 거의 이해가 안되는 수준이라...)
우선 개념 위주로 학습했고, Flutter_blue_plus API 종류와 기능에 대해 알아봤습니다.
https://pub.dev/packages/flutter_blue_plus#flutterblueplus-api 위의 사이트 정보에 의하면 아래와 같이 59개 API가 있습니다.
(1)FlutterBluePlus API = 15개
(Bluetooth 스캔 및 연결을 위한 기본 API를 제공합니다. 장치의 상태를 추적하는 데 사용할 수 있습니다.)
(2) FlutterBluePlus Events API = 11개
Bluetooth 장치에서 발생하는 이벤트를 수신하는 데 사용할 수 있는 이벤트를 제공합니다.
(3)BluetoothDevice API = 19개
(4)BluetoothCharacteristic API = 8개
(5)BluetoothDescriptor API = 6개
(참조) flutter_blue_plus: ^1.31.2
(코드) https://github.com/boskokg/flutter_blue_plus
flutter_blue_plus API는 수시로 업데이트 되는듯 합니다. 따라서 최신정보는 공식 사이트에서 참조해야 합니다.
이 많은 API를 모두, 그리고 상세하게 공부하는 것은 너무 어렵습니다.
설명자료도 못찾았습니다.(위에서 언급한 표의 내용이 전부인듯 합니다.)
따라서, 필요한 기능을 구현하면서 하나씩 알아 가는 방법으로 학습했습니다.
<다음편에 계속...>
'Peugeot OBD app 만들기 도전' 카테고리의 다른 글
<2단계> Flutter_blue_plus 예제로 OBDII(ELM327) Notify 확인(7) (0) | 2024.01.16 |
---|---|
<2단계> Flutter_blue_plus 예제 코드로 OBDII write 명령 실행(6) (0) | 2024.01.15 |
<2단계> (사전학습) 스마트폰에서 ELM327 명령 송수신 시도(4) (0) | 2024.01.13 |
<2단계> 미리 학습해야 할것 : Bluetooth Low(BLE) spec(3) (0) | 2024.01.12 |
<2단계> Flutter, Dart 예제- dart:ffi 사용한 C 상호 운용 예제(2) (1) | 2024.01.11 |