1. ESP32 Bluetooth 관련정보
- ESP32의 HCI(Host Control Interface)
다른 Bluetooth 처럼 Serial 기반으로 연결되어 HCI가 존재하며, 별도로 VHCI가 존재하고 있음
- ESP32 Bluetooth Control/VHCI Layer 함수
HCI(Host Control Interface) 대신 ESP32 Control 기반에 VHCI(Virtual Host Control Interface) 구현됨
- ESP32 Bluetooth Control 함수
- VHCI(Virtual Host Control Interface) Layer
Bluetooth의 기본동작원리
1.1 ESP32 Bluetooth 의 Host 구조 및 설정
ESP32의 경우 BT(Bluetooth) Controller 연결상태에 따라 VHCI or HCI로 연결되어 동작된다.
- ESP32의 Bluetooth Controller 와 VHCI/HCI 구조
ESP32 Bluetooth Controller 기반으로 VHCI로 연결하여 Bluedroid를 사용하고 있으며, 외부로 UART로 확장가능 (UART로할 경우 HCI로 동작)
ESP32는 VHCI기반으로 동작되어지고 있으며, Nimble도 동일하며, HCI와 동일하다고 생각하면됨
https://www.espressif.com/sites/default/files/documentation/esp32_bluetooth_architecture_en.pdf |
HCI 관련정보
- Bluetooth의 HCI의 ACL과 SCO Link 비교
- SCO(Synchronous Connection-Oriented) Link
- ACL(Asynchronous Connection-Less) Link
세부적인 내용은 아래내용참조
- BT(Bluetooth) 의 HCI Packet 종류
https://www.koreascience.or.kr/article/JAKO200170709939787.pdf |
- ESP32 BT Classic(BR/EDR) 와 BT LE Controller 구조
- SCO(Synchronous Connection-Oriented) Packet: HCI기반으로 동작 (Data)
- ACL(Asynchronous Connection-Less) Packet: HCI기반으로 동작 (Data)
- C/E : (Command/Event) Packet : HCI 기반으로 동작 (Control)
BT BR/EDR 과 BT LE 의 구조
BT의 HCI는 아래와 같이 SCO 와 ACL Link가 존재하며, 이는 데이타를 전달(검정색)
Command/Event의 경우 Command와 Event 로 제어담당 (회색)
https://www.espressif.com/sites/default/files/documentation/esp32_bluetooth_architecture_en.pdf |
ESP32 BT Controller 와 VHCI(Virtual HCI)
H4/HCI Protocol
Bluetooth Controller / Host Stack
- 일반적인 BT Controller 와 Stack 전체구조
HCI(Host Control Interface) 기준으로 일반적인 Host Controller 와 상위 Stack을 보도록하자.
** L2CAP를 걸쳐 RFCOMM 기반으로 PPP기반으로 통신도 가능
https://www.koreascience.or.kr/article/JAKO200170709939787.pdf |
- Bluetooth Version의 변화 (Dual Mode 와 BLE)
- Bluetooth BR/EDR (2.x 기반)
- Bluetooth BLE (4.x 기반)
- Dual Mode (BR/EDR 와 BLE 모두사용)
BR/EDR 와 BLE 와 Dual Mode 차이와 비교
현재는 아래의 사이트로만으로 충분한 이해는 되지 않고 추후 관련부분을 더 조사
Dual Mode의 장점
BT의 Version 별 기능
- ESP32 CONFIG_BT_HOST 설정
- Bluedroid (BT Dual Mode)
- Nimble (BLE Only)
- 상위외 다른 Stack을 사용하고자한다면 이용
ESP32 관련설정 BTDM (Dual Mode)
- Bluetooth Classic (BR/EDR 2.x기반)
- BR : Basic Rate
- EDR : Enhanced Data Rate
- ESP32 Bluetooth Dual Mode
ESP32의 BT Dual Mode 관련설정
1.2 ESP32의 Bluetooth Core 사용
- ESP32의 Bluetooth Core 사용
주의해야할것은 ESP32는 Dual Core이지만, 기본적으로 1개의 Core만 사용하면서 동작되므로, Dual Core는 별도로 설정 및 Task로 분할해서 사용하도록하자.
- PRO_CPU
- APP_CPU
2. Bluetooth Stack 종류 와 구조
- ESP32에서 제공하는 Bluetooth Stack Library
- BlueDroid/Fluoride
- Nimble(Apache Mynewt NimBLE)
현재 ESP32의 Bluetooth는 BlueDroid기반과 Nimble기반으로 구현이되어 두가지 방식으로 구현가능하다.
ESP32의 경우 각 Stack마다 동작되는 BT의 기능이 다르므로 주의하도록하자.
Nimble은 BLE Only
- ESP32의 BT Stack 기본비교
- Bludroid: Android 기반의 BT/BLE로 크고 다양한 기능을 제공하며 Size가 큼
- nimble : BLE만 지원가능하며 작은 Size로 제공가능하며, 아파치 라이센스
Bluedroid/Nibme 비교
내 개인생각으로느 ESP32가 MCU이기때문에 거의 Nimble로 선택되어 구성될 것으로 생각되며, Bludroid는 다양한 기능을 구현할때 사용하면 될 꺼 같다.
2.1 ESP32 BlueDroid 기반구조(Dual Mode, BT/BLE)
BlueDroid는 상위 wiki 설명을 보면, Broadcom에서 만들어졌으며, Android에서 처음 Linux에서 사용하던 Bluez를 사용하다가
BlueDroid로 변경되었다고 하며, 현재 Fluoride라고 이름이 변경되어졌다고 한다.
세부사항은 상위 Wiki 참조
- ESP32 BlueDroid 의 구조
- BTC Task (Bluetooth Control layer) : BTA_API 와 ESP_API 통신하며, SDP/GAP/GATT 외 BLE/BT Profile Control
- BTU Task : BLE & BT Stack 정보를 BTA_API 에게 전달
- GAP(General Access Profile)
- GATT(General Attribute Profile)
- SM(Security Manager)
- ATT(Attribute Protocol)
- L2CAP(Logical Link Control and Adaption Protocol)
- SDP(Service Discovery Protocol)
https://www.espressif.com/sites/default/files/documentation/esp32_bluetooth_architecture_en.pdf |
- Android Bluetooth 구조
Android에서 BlueDroid가 사용되어진다고하니, 관련부분들을 링크
ESP32의 BlueDroid는 아래와 같이 Common/BLE/Classic로 구분되어지는 것 같으며, 각각의 부분을 알아야 할 것 같다.
- ESP32 BlueDroid - BT Common
BlueDroid 기본 Control 부분
- ESP32 BlueDroid - BT Classic
GAP/A2DP/AVRC/SPP/HFP
- ESP32 BlueDroid - BLE
GAP/GATT/BLUFI
2.2 ESP32 Nimble 기반구조 (BLE Only)
ESP-Controller는 공유하지만, Nimble 전용 VHCI 가 별도로 존재하며, Nimble Host가 최종적으로 동작되어 Nimble전체를 동작시키는 구조
- Host 관련부분 설정
ESP32 Host 관련부분설정
- ESP32 Nimble API
세부기본 사용법은 아래의 Link를 참조
- Nimble BLE Host 와 Controller 구성
상위 BlueDroid와 동일하게 Host와 Controller 기본구성 (아래링크참조)
- Nimble 의 reset/sync 함수
nimble은 host 와 controller가 sync가 맞지않는동안 동작되지 않는다고 한다.
그래서 주기적으로 sync callback를 호출하여 sync를 맞추므로 중요
controller가 reset이 되면서 host역시 이를 reset를 해야하므로 중요
- Nimble Host API
Nimble의 ATT(Attribute Protocol)함수 GAP 등
- ESP32 Bluetooth 구조 및 전체설명문서
3. Bluetooth 관련 TEST App
BT TEST를 위해 관련된 TEST Application의 자료수집이며, 현재 Android에서 nRF Connect로 쉽게 GAP/GATT를 테스트 및 디버그가 가능하다.
- Window 11/10
nRF Connect for Desktop
- Android BT/BLE 관련 Tool (Nordic Semiconductor)
nRF Connect for Mobile
가장 많이 사용되어지는 Program
nRF Toolbox for BLE
Android BT GATT 부분 Debug 분석
Android BT Tool