

세상에나….
제가 ESP32 S3용 BLE 게임패드용 디바이스 드라이버를 만들었습니다.
[ESP32-S3]
- Wi-Fi + Bluetooth
- 고성능 듀얼 코어 프로세서 240MHz
- 저전력 소모 및 가성비
[BLE]
Bluetooth Low Energy
저전력 블루투스로 2.4GHz 주파수 대역을 사용
아파트 공동 현관, 가전제품, 게임패드에서 사용
[QSPI]
Quad Serial Peripheral Interface
데이터 선을 4개 사용하는 SPI 통신
이론적으로 SPI 대비 4배의 속도(40Mbps)
[ESP-IDF]
Espressif IoT Development Framework
ESP32를 위한 공식 IoT 개발 프레임워크
[원하는 것]
- ESP32의 Quad SPI를 사용하면서 블루투스로 BLE 게임패드 연결하기
[장비]
- ESP32-S3, 240MHz, Flash 16MB , PSRAM , 8MB
- 3.5″ TFT LCD (320 × 480)
- IINE L1161 게임패드
[이슈]
- 최신 Quad SPI 디스플레이 드라이버가 구형 게임패드 라이브러리 API 버전 충돌
[원인]
- ESP32 Arduino Core가 v2.x → v3.x로 업그레이드
- 프레임워크가 ESP-IDF 4.4 → ESP-IDF 5.1로 변경
- Sunton 3.5″ 디스플레이 QSPI (Quad SPI, 4배속도) 지원 : ESP-IDF 5.1 이상
- Core v2.x 으로 작성된 BLE 게임패드 라이브러리가 Core v3.x에서 컴파일 불가
[선택지]
- Core v2.x 유지 : QSPI 드라이버 지원 불가
- Core v3.x 업그레이드 : Bluepad32 사용 불가
- Core v3.x + BLE HID 직접 구현
[Stack]
- ESP32_BLE_GamePad.ino ← Application (LVGL UI + BLE HID Central)
- esp_bsp.c/h ← QSPI display, backlight PWM, I2C touch init
- esp_lcd_axs15231b ← AXS15231B panel driver (67-cmd init sequence)
- lv_port.c/h ← LVGL ↔ FreeRTOS bridge (DMA flush, TE vsync)
- lv_conf.h ← LVGL v8.3.9 config
[특징]
- ESP32 내장 BLE 라이브러리 저수준 API 사용
- BLE Central 스캔: BLEScan으로 주변 기기 탐색
- Security & Bonding: BLESecurity로 HID 필수 암호화 직접 설정
- HID Service 탐색: BLEUUID 서비스 접근
- 자동 재연결: loop 컨텍스트에서 안전한 비동기 재스캔
[결과]
최신 디스플레이 드라이버와 BLE 게임패드 동시 지원 가능
[교훈]
- 모르는 약어는 계속 물어 본다. BLE? IDF? QSPI?
- 애매한 부분을 넘어가지 않는다.
- 어떤 선택을 할 수 있는지 선택지를 제시하라고 한다
- 내가 한 선택이 왜 좋은지 알려달라고 한다.
- 스캔을 하면 우리집에 엄청나게 많은 장비들이 보임
- 제미나이 프로는 해결 못하는 문제는 묻어버림!!!
- Opus는 시간이 걸리지만 결국 성공함
- 작업 시간: 5시간