- LVGL 8.3 round-screen UI (replaces the LovyanGFX direct-draw functional UI): master volume arc, per-channel connection dots, SPEAKERS list, per-channel DETAIL (volume arc + delay -/+ + scan), SCAN list. Rendered through LovyanGFX; configured via build flags (LV_CONF_SKIP); tick via lv_tick_inc in loop. - Third channel "Guest" @ I2C 0x12 (the onboard-antenna ESP32 — the long-range link to an occasional passenger speaker). New [env:source_guest]. - Channels are now brand-agnostic, in order: index0 "Headset" (0x11), index1 "Speaker 1" (0x10), index2 "Guest" (0x12). Discovery picks the real device per channel, so labels stay generic. - hub_proto.h: HUB_I2C_ADDR_GUEST 0x12. Built clean: hub_s3 (LVGL, 3 channels) + source_guest. LVGL render verified on hardware (basic); guest board needs flashing + wiring into the I2S/I2C buses. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
78 lines
3.1 KiB
INI
78 lines
3.1 KiB
INI
; BikeAudio — 3-board relay (iPhone -> Board A sink -> I2S -> Boards B/C sources -> JBL + Cardo)
|
|
;
|
|
; One ESP32 cannot be an A2DP sink and source at once, and an A2DP source can
|
|
; reach only one speaker — so the work is split across three boards that share
|
|
; an I2S bus. See README.md for wiring and the flash order.
|
|
;
|
|
; Build all: pio run
|
|
; Build one board: pio run -e sink | -e source_jbl | -e source_cardo
|
|
;
|
|
; Common specs preserved from the original sketch: ESP32 Arduino core 2.0.x via
|
|
; espressif32 ~6.6.0, esp32dev, huge_app partition (BT stack), 115200 monitor.
|
|
|
|
[platformio]
|
|
default_envs = sink, source_jbl, source_cardo
|
|
|
|
[env]
|
|
platform = espressif32 @ ~6.6.0
|
|
board = esp32dev
|
|
framework = arduino
|
|
board_build.partitions = huge_app.csv
|
|
monitor_speed = 115200
|
|
; pschatzmann libs pinned to exact commits (ESP32-A2DP 1.8.11, audio-tools 1.2.4)
|
|
lib_deps =
|
|
https://github.com/pschatzmann/ESP32-A2DP#42601717cd70d5300c9b519f3c2bf1d64d77ea2b
|
|
https://github.com/pschatzmann/arduino-audio-tools#64b64dcb9bde18a0a17766eeb6529c3a53d920a8
|
|
|
|
; --- Board A: A2DP sink (iPhone) -> I2S master --------------------------------
|
|
[env:sink]
|
|
build_src_filter = +<board_sink.cpp>
|
|
|
|
; --- Board B: I2S slave -> A2DP source -> JBL Charge 5 ------------------------
|
|
[env:source_jbl]
|
|
build_src_filter = +<board_source.cpp>
|
|
build_flags = '-DTARGET_SPEAKER="JBL Charge 5"' -DHUB_I2C_ADDR=0x10
|
|
|
|
; --- Board C: I2S slave -> A2DP source -> Cardo (Tangerine EDGE) --------------
|
|
[env:source_cardo]
|
|
build_src_filter = +<board_source.cpp>
|
|
build_flags = '-DTARGET_SPEAKER="Tangerine EDGE"' -DHUB_I2C_ADDR=0x11
|
|
|
|
; --- Board D: I2S slave -> A2DP source -> GUEST speaker (antenna board) -------
|
|
; Occasional passenger speaker, furthest away (hence the onboard antenna).
|
|
; No hardcoded name — pick the speaker via the hub's scan UI (Phase 3).
|
|
[env:source_guest]
|
|
build_src_filter = +<board_source.cpp>
|
|
build_flags = '-DTARGET_SPEAKER="Guest"' -DHUB_I2C_ADDR=0x12
|
|
|
|
; --- Hub: ESP32-S3-Touch-LCD-1.28 (round GC9A01 LCD + CST816S touch) ----------
|
|
; Different chip (esp32s3) from the relay boards. Drives the UI; later the
|
|
; wired control bus to Boards B/C. NOT in default_envs — build with -e hub_s3.
|
|
[env:hub_s3]
|
|
platform = espressif32 @ ~6.6.0
|
|
board = esp32-s3-devkitc-1
|
|
framework = arduino
|
|
board_upload.flash_size = 4MB
|
|
board_build.partitions = default.csv
|
|
monitor_speed = 115200
|
|
build_src_filter = +<hub_s3.cpp>
|
|
lib_deps =
|
|
lovyan03/LovyanGFX@^1.1.16
|
|
lvgl/lvgl@^8.3.11
|
|
; LVGL configured via build flags (LV_CONF_SKIP -> defaults + overrides), so
|
|
; there is no separate lv_conf.h to maintain. 16-bit colour, byte-swapped for
|
|
; the SPI panel; millis() tick; the big Montserrat fonts for glanceable text.
|
|
; NOTE: keep flag values free of shell-special chars (parens/spaces) — they go
|
|
; through a shell. LV_MEM_SIZE as a plain int; tick driven via lv_tick_inc() in
|
|
; loop() (no LV_TICK_CUSTOM, which needs a parenthesised millis() expr).
|
|
build_flags =
|
|
-DLV_CONF_SKIP=1
|
|
-DLV_COLOR_DEPTH=16
|
|
-DLV_COLOR_16_SWAP=1
|
|
-DLV_MEM_SIZE=49152
|
|
-DLV_FONT_MONTSERRAT_14=1
|
|
-DLV_FONT_MONTSERRAT_20=1
|
|
-DLV_FONT_MONTSERRAT_28=1
|
|
-DLV_FONT_MONTSERRAT_48=1
|
|
-DLV_USE_LOG=0
|