blue-repeat/platformio.ini
blue 4b432c6123 Phase 2: I2C control bus (S3 hub master <-> B/C slaves)
Wired control path so the S3 hub can set delay/volume on the source boards
and read their status, over an I2C bus (separate from the audio I2S bus).

- src/hub_proto.h: shared protocol — addresses (JBL 0x10, Cardo 0x11),
  commands SET_DELAY (u16), SET_VOLUME (u8), GET_STATUS (4-byte payload:
  connected, delay LE, volume).
- board_source.cpp (B/C): I2C slave on GPIO32/33 (addr via -DHUB_I2C_ADDR).
  Light onReceive/onRequest callbacks stash requests; loop() applies them
  (reuses set_delay; adds current_volume -> source.set_volume, NVS-persisted).
  Relay/FIFO/touch untouched.
- hub_s3.cpp: I2C master on Wire1 (GPIO15/16) — peripheral 1, since the
  CST816S touch owns peripheral 0. Polls both boards ~1Hz; LovyanGFX UI shows
  each speaker's connect/delay/volume with touch +/- zones that send commands.
- platformio.ini: -DHUB_I2C_ADDR per source env.

Written by two parallel sub-agents (one per side) against hub_proto.h; fixed
the Wire->Wire1 peripheral conflict. All three envs build clean.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-11 10:44:45 -04:00

53 lines
2.0 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
; --- 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