왕초보 게임패드 디바이스 드라이버 개발기



세상에나….
제가 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 게임패드 연결하기

[장비]

  1. ESP32-S3, 240MHz, Flash 16MB , PSRAM , 8MB
  2. 3.5″ TFT LCD (320 × 480)
  3. 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시간

[GitHub]
https://github.com/jvisualschool/ESP32_BLE_GamePad

Bookmark the permalink.

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다