Files
klubhaus-doorbell/mise.toml

255 lines
7.9 KiB
TOML

# ═══════════════════════════════════════════════════════════
# Klubhaus Doorbell — Multi-Target Build Harness
# ═══════════════════════════════════════════════════════════
# Required tools
[tools]
hk = "latest"
pkl = "latest"
# Usage:
# BOARD=esp32-32e-4 mise run compile # compile for esp32-32e-4
# BOARD=esp32-32e-4 mise run upload # upload to esp32-32e-4
# BOARD=esp32-32e-4 mise run monitor # monitor esp32-32e-4
#
# Valid BOARD values: esp32-32e, esp32-32e-4, esp32-s3-43
[tasks.compile]
description = "Compile (uses BOARD env var)"
run = """
case "$BOARD" in
esp32-32e) mise run compile-32e ;;
esp32-32e-4) mise run compile-32e-4 ;;
esp32-s3-43) mise run compile-s3-43 ;;
*) echo "Unknown BOARD: $BOARD" && exit 1 ;;
esac
"""
[tasks.upload]
description = "Upload (uses BOARD env var)"
run = """
case "$BOARD" in
esp32-32e) mise run upload-32e ;;
esp32-32e-4) mise run upload-32e-4 ;;
esp32-s3-43) mise run upload-s3-43 ;;
*) echo "Unknown BOARD: $BOARD" && exit 1 ;;
esac
"""
[tasks.monitor]
description = "Monitor (uses BOARD env var)"
run = """
case "$BOARD" in
esp32-32e) mise run monitor-32e ;;
esp32-32e-4) mise run monitor-32e-4 ;;
esp32-s3-43) mise run monitor-s3-43 ;;
*) echo "Unknown BOARD: $BOARD" && exit 1 ;;
esac
"""
[tasks.install-libs-shared]
description = "Install shared (platform-independent) libraries"
run = """
arduino-cli lib install "ArduinoJson@7.4.1"
arduino-cli lib install "NTPClient@3.2.1"
echo "[OK] Shared libraries installed"
"""
[tasks.install-libs-32e]
description = "Vendor TFT_eSPI into vendor/esp32-32e"
run = """
#!/usr/bin/env bash
set -euo pipefail
if [ ! -d "vendor/esp32-32e/TFT_eSPI" ]; then
echo "Cloning TFT_eSPI..."
git clone --depth 1 --branch V2.5.43 \
https://github.com/Bodmer/TFT_eSPI.git \
vendor/esp32-32e/TFT_eSPI
fi
echo "Copying board-specific User_Setup.h..."
cp boards/esp32-32e/tft_user_setup.h vendor/esp32-32e/TFT_eSPI/User_Setup.h
echo "[OK] TFT_eSPI 2.5.43 vendored + configured"
"""
[tasks.install-libs-32e-4]
description = "Vendor TFT_eSPI into vendor/esp32-32e-4 (ST7796 320x480)"
run = """
#!/usr/bin/env bash
set -euo pipefail
if [ ! -d "vendor/esp32-32e-4/TFT_eSPI" ]; then
echo "Cloning TFT_eSPI..."
git clone --depth 1 --branch V2.5.43 \
https://github.com/Bodmer/TFT_eSPI.git \
vendor/esp32-32e-4/TFT_eSPI
fi
echo "Copying board-specific User_Setup.h..."
cp boards/esp32-32e-4/tft_user_setup.h vendor/esp32-32e-4/TFT_eSPI/User_Setup.h
echo "[OK] TFT_eSPI 2.5.43 vendored + configured for 4 inch"
"""
[tasks.install-libs-s3-43]
description = "Vendor LovyanGFX into vendor/esp32-s3-lcd-43"
run = """
#!/usr/bin/env bash
set -euo pipefail
LOVyanGFX_DIR="vendor/esp32-s3-lcd-43/LovyanGFX"
# Clone LovyanGFX (latest)
if [ ! -d "$LOVyanGFX_DIR" ]; then
echo "Cloning LovyanGFX..."
git clone --depth 1 \
https://github.com/lovyan03/LovyanGFX.git \
"$LOVyanGFX_DIR"
else
echo "LovyanGFX already exists, skipping"
fi
# Create library.properties that correctly points to source
cat > "$LOVyanGFX_DIR/library.properties" << 'EOF'
name=LovyanGFX
version=1.2.0
author=lovyan03
maintainer=lovyan03
sentence=Display and touch driver library for ESP32
paragraph=Universal graphics library for ESP32 with support for various displays and touch controllers
category=Display
url=https://github.com/lovyan03/LovyanGFX
architectures=esp32
includes=LovyanGFX.hpp
# This tells Arduino to build from src/
# Arduino will look in src/ for .cpp files
EOF
# Create a empty src to ensure sources are found
mkdir -p "$LOVyanGFX_DIR/src"
echo "[OK] LovyanGFX vendored"
"""
[tasks.install-libs]
description = "Install all libraries (shared + vendored)"
depends = ["install-libs-shared", "install-libs-32e", "install-libs-32e-4", "install-libs-s3-43"]
# ── ESP32-32E ────────────────────────────────────────────
[tasks.compile-32e]
description = "Compile ESP32-32E sketch"
depends = ["install-libs"]
run = """
arduino-cli compile \
--fqbn "esp32:esp32:esp32:FlashSize=4M,PartitionScheme=default" \
--libraries ./libraries \
--libraries ./vendor/esp32-32e/TFT_eSPI \
--build-property "compiler.cpp.extra_flags=-DDEBUG_MODE -DBOARD_HAS_PSRAM" \
--warnings default \
./boards/esp32-32e
"""
[tasks.upload-32e]
description = "Upload to ESP32-32E"
run = """
arduino-cli upload \
--fqbn "esp32:esp32:esp32:FlashSize=4M,PartitionScheme=default" \
--port "${PORT:-/dev/ttyUSB0}" \
./boards/esp32-32e
"""
[tasks.monitor-32e]
description = "Serial monitor for ESP32-32E"
run = """
arduino-cli monitor --port "${PORT:-/dev/ttyUSB0}" --config baudrate=115200
"""
# ── ESP32-32E-4 inch ─────────────────────────────────────────
[tasks.compile-32e-4]
description = "Compile ESP32-32E-4 inch sketch (ST7796 320x480)"
depends = ["install-libs-32e-4"]
run = """
arduino-cli compile \
--fqbn "esp32:esp32:esp32:FlashSize=4M,PartitionScheme=default" \
--libraries ./libraries \
--libraries ./vendor/esp32-32e-4/TFT_eSPI \
--build-property "compiler.cpp.extra_flags=-DDEBUG_MODE -DBOARD_HAS_PSRAM" \
--warnings default \
./boards/esp32-32e-4
"""
[tasks.upload-32e-4]
description = "Upload to ESP32-32E-4\""
run = """
arduino-cli upload \
--fqbn "esp32:esp32:esp32:FlashSize=4M,PartitionScheme=default" \
--port "${PORT:-/dev/ttyUSB0}" \
./boards/esp32-32e-4
"""
[tasks.monitor-32e-4]
description = "Serial monitor for ESP32-32E 4 inch"
run = """
arduino-cli monitor -p "${PORT:-/dev/ttyUSB0}" --config 115200
"""
# ── ESP32-S3-LCD-4.3 ────────────────────────────────────
[tasks.compile-s3-43]
description = "Compile ESP32-S3-LCD-4.3 sketch (Core 2.x)"
depends = ["install-libs"]
run = """
arduino-cli compile \
--fqbn "esp32:esp32:waveshare_esp32_s3_touch_lcd_43:PSRAM=enabled,FlashSize=16M,USBMode=hwcdc,PartitionScheme=app3M_fat9M_16MB" \
--libraries ./libraries \
--library ./vendor/esp32-s3-lcd-43/LovyanGFX \
--build-property "compiler.cpp.extra_flags=-DDEBUG_MODE -DBOARD_HAS_PSRAM -DLGFX_USE_V1" \
--warnings default \
./boards/esp32-s3-lcd-43
"""
[tasks.upload-s3-43]
description = "Upload to ESP32-S3-LCD-4.3"
run = """
arduino-cli upload \
--fqbn "esp32:esp32:waveshare_esp32_s3_touch_lcd_43:PSRAM=enabled,FlashSize=16M,USBMode=hwcdc,PartitionScheme=app3M_fat9M_16MB" \
--port "${PORT:-/dev/ttyACM0}" \
./boards/esp32-s3-lcd-43
"""
[tasks.monitor-s3-43]
description = "Serial monitor for ESP32-S3-LCD-4.3"
run = """
arduino-cli monitor --port "${PORT:-/dev/ttyACM0}" --config baudrate=115200
"""
# ── Convenience ──────────────────────────────────────────
[tasks.clean]
description = "Remove build artifacts"
run = """
rm -rf vendor/
rm -rf boards/esp32-32e/build
rm -rf boards/esp32-32e-4/build
rm -rf boards/esp32-s3-lcd-43/build
echo "[OK] Build artifacts cleaned"
"""
[tasks.format]
run = """
clang-format -i --style=file \
boards/esp32-32e/*.cpp \
boards/esp32-32e/*.h \
boards/esp32-32e/*.ino \
boards/esp32-32e-4/*.cpp \
boards/esp32-32e-4/*.h \
boards/esp32-32e-4/*.ino \
boards/esp32-s3-lcd-43/*.cpp \
boards/esp32-s3-lcd-43/*.h \
boards/esp32-s3-lcd-43/*.ino \
libraries/KlubhausCore/src/*.cpp \
libraries/KlubhausCore/src/*.h \
libraries/KlubhausCore/*.properties
"""
[env]
BOARD = "esp32-32e-4"