Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
71 changes: 71 additions & 0 deletions .github/workflows/build_platformio.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,71 @@
name: build_platformio

on: [push, pull_request]

jobs:
# ── Step 1: parse platformio.ini and produce the matrix list ──────────────
discover:
runs-on: ubuntu-latest
outputs:
envs: ${{ steps.get-envs.outputs.envs }}
steps:
- uses: actions/checkout@v4

- name: Discover buildable PlatformIO environments
id: get-envs
run: |
python3 - <<'EOF'
import re, json, os
with open("platformio.ini") as f:
content = f.read()
envs = re.findall(r"^\[env:([^\]]+)\]", content, re.MULTILINE)
# Skip abstract base templates and debug-only variants
envs = [e for e in envs if not e.startswith("base-") and not e.endswith("-debug")]
output = json.dumps(envs)
print(f"Discovered environments: {output}")
with open(os.environ["GITHUB_OUTPUT"], "a") as gh_out:
gh_out.write(f"envs={output}\n")
EOF

# ── Step 2: build each environment in parallel ────────────────────────────
build:
needs: discover
strategy:
fail-fast: false # let other envs finish even if one fails
matrix:
environment: ${{ fromJson(needs.discover.outputs.envs) }}

runs-on: ubuntu-latest
name: build / ${{ matrix.environment }}

steps:
- uses: actions/checkout@v4
with:
submodules: recursive

- uses: actions/setup-python@v5
with:
python-version: "3.x"

# Cache the PlatformIO home directory (toolchains, platform packages)
# and the per-env build output so incremental builds are faster.
- uses: actions/cache@v4
with:
path: |
~/.platformio
.pio/build/${{ matrix.environment }}
key: pio-${{ matrix.environment }}-${{ hashFiles('platformio.ini', 'sdkconfig.defaults', 'sdkconfig.defaults.*') }}
restore-keys: |
pio-${{ matrix.environment }}-

- name: Install PlatformIO Core
run: pip install --quiet platformio

- name: Build ${{ matrix.environment }}
run: |
# On the first completely clean build, cmake configure runs *after*
# extra_scripts are evaluated, so pre_build.py finds no build.ninja
# and skips ESP-IDF embed-file stub generation → ninja fails.
# The second attempt finds the freshly created build.ninja and succeeds.
platformio run --environment ${{ matrix.environment }} \
|| platformio run --environment ${{ matrix.environment }}
5 changes: 4 additions & 1 deletion .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,8 @@ build
libopus
managed_components
sdkconfig
sdkconfig.old
sdkconfig.*
!sdkconfig.defaults.*
dependencies.lock

# Created by https://www.toptal.com/developers/gitignore/api/c,c++,eclipse
Expand Down Expand Up @@ -149,3 +150,5 @@ local.properties

# End of https://www.toptal.com/developers/gitignore/api/c,c++,eclipse
.vscode-ctags
.vscode/c_cpp_properties.json
.vscode/launch.json
10 changes: 10 additions & 0 deletions .vscode/extensions.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
{
// See http://go.microsoft.com/fwlink/?LinkId=827846
// for the documentation about the extensions.json format
"recommendations": [
"platformio.platformio-ide"
],
"unwantedRecommendations": [
"ms-vscode.cpptools-extension-pack"
]
}
2 changes: 1 addition & 1 deletion components/network_interface/Kconfig.projbuild
Original file line number Diff line number Diff line change
Expand Up @@ -252,7 +252,7 @@ endmenu
menu "Wifi Configuration"
config ENABLE_WIFI_PROVISIONING
bool "enable WiFi provisioning"
default n
default y
help
Enable WiFi provisioning through improv WiFi (https://github.com/improv-wifi), try it using https://web.esphome.io/

Expand Down
2 changes: 1 addition & 1 deletion main/Kconfig.projbuild
Original file line number Diff line number Diff line change
Expand Up @@ -40,7 +40,7 @@ menu "Snapclient Configuration"
menu "HTTP Server Setting"
config WEB_PORT
int "User interface HTTP Server Port"
default 8000
default 80
help
HTTP server port to use.
endmenu
Expand Down
274 changes: 274 additions & 0 deletions platformio.ini
Original file line number Diff line number Diff line change
@@ -0,0 +1,274 @@
[platformio]
src_dir = main

; Common settings for all environments
[env]
monitor_speed = 115200
monitor_filters = direct
board_build.partitions = partitions.csv
extra_scripts = pre:pre_build.py

; ─── ESP32 base (40MHz/QIO/4MB) ─────────────────────────────────────────────
[env:base-esp32]
platform = platformio/espressif32 @ 6.12.0
framework = espidf
board = esp-wrover-kit
board_build.mcu = esp32
board_build.f_cpu = 240000000L
board_build.f_flash = 40000000L
board_build.flash_mode = qio
board_build.flash_size = 4MB
board_upload.flash_size = 4MB
monitor_rts = 0
monitor_dtr = 0

; ─── ESP32-S2 base (80MHz/QIO/4MB) ──────────────────────────────────────────
[env:base-esp32s2]
platform = platformio/espressif32 @ 6.12.0
framework = espidf
board = esp32-s2-saola-1
board_build.mcu = esp32s2
board_build.f_cpu = 240000000L
board_build.f_flash = 80000000L
board_build.flash_mode = dio
board_build.flash_size = 4MB
board_upload.flash_size = 4MB

; ─── ESP32-S3 base (80MHz/QIO/4MB) ──────────────────────────────────────────
[env:base-esp32s3]
platform = platformio/espressif32 @ 6.12.0
framework = espidf
board = esp32-s3-devkitc-1
board_build.mcu = esp32s3
board_build.f_cpu = 240000000L
board_build.f_flash = 80000000L
board_build.flash_mode = qio
board_build.flash_size = 4MB
board_upload.flash_size = 4MB

; ─── ADAU1961 board (ESP32, ADAU1961) ───────────────────────────────────────────
[env:adau1961-esp32]
extends = env:base-esp32
board_build.cmake_extra_args =
"-DSDKCONFIG_DEFAULTS=sdkconfig.defaults;sdkconfig.defaults_psram;sdkconfig.defaults.adau1961"

; ─── PCM5102A board (ESP32, PCM5102A) ───────────────────────────────────────────
[env:pcm5102a-esp32]
extends = env:base-esp32
board_build.cmake_extra_args =
"-DSDKCONFIG_DEFAULTS=sdkconfig.defaults;sdkconfig.defaults_psram;sdkconfig.defaults.pcm5102a"

; ─── WT32-ETH01 board (ESP32, PCM5102A, Ethernet) ───────────────────────────────────────────
[env:pcm5102a-wt32-eth01]
extends = env:base-esp32
board_build.cmake_extra_args =
"-DSDKCONFIG_DEFAULTS=sdkconfig.defaults;sdkconfig.defaults_psram;sdkconfig.defaults.pcm5102a-wt32-eth01"

; ─── Olimex ESP32-POE board (ESP32, PCM5102A, Ethernet) ───────────────────────────────────────────
[env:pcm5102a-olimex-esp32-poe]
extends = env:base-esp32
board_build.cmake_extra_args =
"-DSDKCONFIG_DEFAULTS=sdkconfig.defaults;sdkconfig.defaults_psram;sdkconfig.defaults.pcm5102a-olimex-esp32-poe"

[env:max98357a-esp32-s2]
extends = env:base-esp32s2
board_build.cmake_extra_args =
"-DSDKCONFIG_DEFAULTS=sdkconfig.defaults;sdkconfig.defaults.max98357a-esp32-s2"

; ─── HiFi-ESP32 (ESP32, PCM5100) ───────────────────────────────────────────
[env:sonocotta-hifi-esp32]
extends = env:base-esp32
board_build.cmake_extra_args =
"-DSDKCONFIG_DEFAULTS=sdkconfig.defaults;sdkconfig.defaults_psram;sdkconfig.defaults.hifi-esp32"

; ─── HiFi-ESP32-S3 (ESP32-S3, PCM5100) ───────────────────────────────────────────
[env:sonocotta-hifi-esp32s3]
extends = env:base-esp32s3
board_build.cmake_extra_args =
"-DSDKCONFIG_DEFAULTS=sdkconfig.defaults;sdkconfig.defaults.hifi-esp32s3"

; ─── HiFi-Esparagus (ESP32, PCM5100) ───────────────────────────────────────────
[env:sonocotta-hifi-esparagus]
extends = env:base-esp32
board_build.cmake_extra_args =
"-DSDKCONFIG_DEFAULTS=sdkconfig.defaults;sdkconfig.defaults_psram;sdkconfig.defaults.hifi-esparagus"

; ─── HiFi-Esparagus-S3 (ESP32-S3, PCM5100) ───────────────────────────────────────────
[env:sonocotta-hifi-esparagus-s3]
extends = env:base-esp32s3
board_build.cmake_extra_args =
"-DSDKCONFIG_DEFAULTS=sdkconfig.defaults;sdkconfig.defaults.hifi-esparagus-s3"

; ─── HiFi-ESP32-Plus (ESP32, PCM5122) ───────────────────────────────────────────
[env:sonocotta-hifi-esp32-plus]
extends = env:base-esp32
board_build.cmake_extra_args =
"-DSDKCONFIG_DEFAULTS=sdkconfig.defaults;sdkconfig.defaults_psram;sdkconfig.defaults.hifi-esp32-plus"

[env:sonocotta-hifi-esp32-plus-debug]
extends = env:base-esp32
board_build.cmake_extra_args =
"-DSDKCONFIG_DEFAULTS=sdkconfig.defaults;sdkconfig.defaults_psram;sdkconfig.defaults.hifi-esp32-plus;sdkconfig.defaults.debug"
monitor_filters = esp32_exception_decoder

; ─── HiFi-ESP32-S3-Plus (ESP32-S3, PCM5122) ───────────────────────────────────────────
[env:sonocotta-hifi-esp32s3-plus]
extends = env:base-esp32s3
board_build.cmake_extra_args =
"-DSDKCONFIG_DEFAULTS=sdkconfig.defaults;sdkconfig.defaults.hifi-esp32s3-plus"

; ─── Loud-ESP32 (ESP32, MAX98357A) ───────────────────────────────────────────
[env:sonocotta-loud-esp32]
extends = env:base-esp32
board_build.cmake_extra_args =
"-DSDKCONFIG_DEFAULTS=sdkconfig.defaults;sdkconfig.defaults_psram;sdkconfig.defaults.loud-esp32"

; ─── Loud-ESP32-S3 (ESP32-S3, MAX98357A) ───────────────────────────────────────────
[env:sonocotta-loud-esp32s3]
extends = env:base-esp32s3
board_build.cmake_extra_args =
"-DSDKCONFIG_DEFAULTS=sdkconfig.defaults;sdkconfig.defaults.loud-esp32s3"

; ─── Loud-Esparagus (ESP32, MAX98357A) ───────────────────────────────────────────
[env:sonocotta-loud-esparagus]
extends = env:base-esp32
board_build.cmake_extra_args =
"-DSDKCONFIG_DEFAULTS=sdkconfig.defaults;sdkconfig.defaults_psram;sdkconfig.defaults.loud-esparagus"

; ─── Esparagus-Echo (ESP32-S3, MAX98357A) ───────────────────────────────────────────
[env:sonocotta-esparagus-echo]
extends = env:base-esp32s3
board_build.cmake_extra_args =
"-DSDKCONFIG_DEFAULTS=sdkconfig.defaults;sdkconfig.defaults.esparagus-echo-s3"

; ─── Loud-ESP32-Plus (ESP32, MA12070P) ───────────────────────────────────────────
[env:sonocotta-loud-esp32-plus]
extends = env:base-esp32
board_build.cmake_extra_args =
"-DSDKCONFIG_DEFAULTS=sdkconfig.defaults;sdkconfig.defaults_psram;sdkconfig.defaults.loud-esp32-plus"

; ─── Loud-ESP32-S3-Plus (ESP32-S3, MA12070P) ───────────────────────────────────────────
[env:sonocotta-loud-esp32-s3-plus]
extends = env:base-esp32s3
board_build.cmake_extra_args =
"-DSDKCONFIG_DEFAULTS=sdkconfig.defaults;sdkconfig.defaults.loud-esp32s3-plus"

; ─── Louder-ESP32 (ESP32, TAS5805M) ────────────────────────────────────────────────
[env:sonocotta-louder-esp32]
extends = env:base-esp32
board_build.cmake_extra_args =
"-DSDKCONFIG_DEFAULTS=sdkconfig.defaults;sdkconfig.defaults_psram;sdkconfig.defaults.louder-esp32"

; ─── Louder-ESP32-S3 (ESP32-S3, TAS5805M) ────────────────────────────────────────────────
[env:sonocotta-louder-esp32-s3]
extends = env:base-esp32s3
board_build.cmake_extra_args =
"-DSDKCONFIG_DEFAULTS=sdkconfig.defaults;sdkconfig.defaults.louder-esp32s3"

[env:sonocotta-louder-esp32-s3-debug]
extends = env:base-esp32s3
board_build.cmake_extra_args =
"-DSDKCONFIG_DEFAULTS=sdkconfig.defaults;sdkconfig.defaults.louder-esp32s3;sdkconfig.defaults.debug"
monitor_filters = esp32_exception_decoder

; ─── Louder-Esparagus (ESP32, TAS5805M) ────────────────────────────────────────────────
[env:sonocotta-louder-esparagus]
extends = env:base-esp32
board_build.cmake_extra_args =
"-DSDKCONFIG_DEFAULTS=sdkconfig.defaults;sdkconfig.defaults_psram;sdkconfig.defaults.louder-esparagus"

[env:sonocotta-louder-esparagus-debug]
extends = env:base-esp32
board_build.cmake_extra_args =
"-DSDKCONFIG_DEFAULTS=sdkconfig.defaults;sdkconfig.defaults_psram;sdkconfig.defaults.louder-esparagus;sdkconfig.defaults.debug"
monitor_filters = esp32_exception_decoder

; ─── Louder-ESP32-Plus (ESP32, TAS5825M) ────────────────────────────────────────────────
[env:sonocotta-louder-esp32-plus]
extends = env:base-esp32
board_build.cmake_extra_args =
"-DSDKCONFIG_DEFAULTS=sdkconfig.defaults;sdkconfig.defaults_psram;sdkconfig.defaults.louder-esp32-plus"

; ─── Louder-ESP32-S3-Plus (ESP32-S3, TAS5825M) ────────────────────────────────────────────────
[env:sonocotta-louder-esp32-s3-plus]
extends = env:base-esp32s3
board_build.cmake_extra_args =
"-DSDKCONFIG_DEFAULTS=sdkconfig.defaults;sdkconfig.defaults.louder-esp32s3-plus"

; ─── Esparagus Audio Brick (ESP32, TAS5825M) ───────────────────────────────────────────
[env:sonocotta-esparagus-audio-brick]
extends = env:base-esp32
board_build.cmake_extra_args =
"-DSDKCONFIG_DEFAULTS=sdkconfig.defaults;sdkconfig.defaults_psram;sdkconfig.defaults.audio-brick-esp32"

[env:sonocotta-esparagus-audio-brick-debug]
extends = env:sonocotta-esparagus-audio-brick
board_build.cmake_extra_args =
"-DSDKCONFIG_DEFAULTS=sdkconfig.defaults;sdkconfig.defaults_psram;sdkconfig.defaults.audio-brick-esp32;sdkconfig.defaults.debug"
monitor_filters = esp32_exception_decoder

; ─── Esparagus Audio Brick (ESP32-S3, TAS5825M) ────────────────────────────────────────
[env:sonocotta-esparagus-audio-brick-s3]
extends = env:base-esp32s3
board_build.cmake_extra_args =
"-DSDKCONFIG_DEFAULTS=sdkconfig.defaults;sdkconfig.defaults.audio-brick-esp32s3"

[env:sonocotta-esparagus-audio-brick-s3-debug]
extends = env:sonocotta-esparagus-audio-brick-s3
board_build.cmake_extra_args =
"-DSDKCONFIG_DEFAULTS=sdkconfig.defaults;sdkconfig.defaults.audio-brick-esp32s3;sdkconfig.defaults.debug"
monitor_filters = esp32_exception_decoder

; ─── Amped-ESP32 (ESP32, PCM5100, TPA31XX amp) ───────────────────────────────────────────
[env:sonocotta-amped-esp32]
extends = env:base-esp32
board_build.cmake_extra_args =
"-DSDKCONFIG_DEFAULTS=sdkconfig.defaults;sdkconfig.defaults_psram;sdkconfig.defaults.amped-esp32"

; ─── Amped-ESP32-S3 (ESP32-S3, PCM510, TPA31XX amp) ───────────────────────────────────────────
[env:sonocotta-amped-esp32s3]
extends = env:base-esp32s3
board_build.cmake_extra_args =
"-DSDKCONFIG_DEFAULTS=sdkconfig.defaults;sdkconfig.defaults.amped-esp32s3"

; ─── Amped-Esparagus (ESP32, PCM5100, TPA31XX amp) ───────────────────────────────────────────
[env:sonocotta-amped-esparagus]
extends = env:base-esp32
board_build.cmake_extra_args =
"-DSDKCONFIG_DEFAULTS=sdkconfig.defaults;sdkconfig.defaults_psram;sdkconfig.defaults.amped-esparagus"

; ─── Amped-ESP32-Plus (ESP32, PCM5122, TPA31XX amp) ───────────────────────────────────────────
[env:sonocotta-amped-esp32-plus]
extends = env:base-esp32
board_build.cmake_extra_args =
"-DSDKCONFIG_DEFAULTS=sdkconfig.defaults;sdkconfig.defaults_psram;sdkconfig.defaults.amped-esp32-plus"

; ─── Amped-ESP32-S3-Plus (ESP32-S3, PCM5122, TPA31XX amp) ───────────────────────────────────────────
[env:sonocotta-amped-esp32s3-plus]
extends = env:base-esp32s3
board_build.cmake_extra_args =
"-DSDKCONFIG_DEFAULTS=sdkconfig.defaults;sdkconfig.defaults.amped-esp32s3-plus"

; ─── AI-Thinker ESP32-A1S-AudioKit (ESP32, ES8388) ───────────────────────────────────────────
[env:ai-thinker-esp32-a1s-audiokit]
extends = env:base-esp32
board_build.cmake_extra_args =
"-DSDKCONFIG_DEFAULTS=sdkconfig.defaults;sdkconfig.defaults_psram;sdkconfig.defaults.ai-thinker-esp32-a1s-audiokit"

; ─── Espressif Lyra T 4.2 (ESP32, ES8388) ───────────────────────────────────────────
[env:espressif-lyra-t-42]
extends = env:base-esp32
board_build.cmake_extra_args =
"-DSDKCONFIG_DEFAULTS=sdkconfig.defaults;sdkconfig.defaults_psram;sdkconfig.defaults.espressif-lyra-t-42"

; ─── Espressif Lyra T 4.3 (ESP32, ES8388) ───────────────────────────────────────────
[env:espressif-lyra-t-43]
extends = env:base-esp32
board_build.cmake_extra_args =
"-DSDKCONFIG_DEFAULTS=sdkconfig.defaults;sdkconfig.defaults_psram;sdkconfig.defaults.espressif-lyra-t-43"

; ─── Espressif Lyra T Mini (ESP32, ES8311) ───────────────────────────────────────────
[env:espressif-lyra-t-mini]
extends = env:base-esp32
board_build.cmake_extra_args =
"-DSDKCONFIG_DEFAULTS=sdkconfig.defaults;sdkconfig.defaults_psram;sdkconfig.defaults.espressif-lyra-t-mini"
Loading
Loading