Files
kidsbox/install.sh
T
Claude 76b02b840c Add install.sh, setup.sh, and update README
install.sh: install ESP-IDF v5.2 + ESP-ADF v2.7, detect existing env,
  write .env file with IDF_PATH/ADF_PATH
setup.sh: prompt for WiFi creds, write sdkconfig.defaults, build,
  optionally flash and prepare SD card
README: rewrite to reflect current architecture (NFC URL streaming,
  web UI, no arduino-esp32), add roadmap and quick start

https://claude.ai/code/session_01MhAnh68DPNnTjcKqjNYDmk
2026-06-13 07:10:28 +00:00

105 lines
4.3 KiB
Bash
Executable File

#!/usr/bin/env bash
# install.sh — set up the Kidsbox development environment
# Installs ESP-IDF v5.2 + ESP-ADF v2.7, or validates an existing installation.
set -euo pipefail
BOLD='\033[1m'; GREEN='\033[0;32m'; YELLOW='\033[0;33m'; RED='\033[0;31m'; NC='\033[0m'
info() { echo -e "${GREEN}[install]${NC} $*"; }
warn() { echo -e "${YELLOW}[warn]${NC} $*"; }
die() { echo -e "${RED}[error]${NC} $*" >&2; exit 1; }
heading() { echo -e "\n${BOLD}$*${NC}"; }
IDF_VERSION="v5.2.3"
ADF_VERSION="v2.7"
IDF_DEFAULT="$HOME/esp/esp-idf"
ADF_DEFAULT="$HOME/esp/esp-adf"
# ── prerequisites ──────────────────────────────────────────────────────────────
heading "Checking prerequisites"
for cmd in git python3 pip3 cmake ninja; do
if command -v "$cmd" &>/dev/null; then
info "$cmd: $(command -v $cmd)"
else
die "$cmd not found. Please install it and re-run."
fi
done
PYTHON_VERSION=$(python3 -c 'import sys; print(f"{sys.version_info.major}.{sys.version_info.minor}")')
python3 -c 'import sys; sys.exit(0 if sys.version_info >= (3,8) else 1)' \
|| die "Python >= 3.8 required (found $PYTHON_VERSION)"
info "Python $PYTHON_VERSION: OK"
# ── ESP-IDF ────────────────────────────────────────────────────────────────────
heading "ESP-IDF ($IDF_VERSION)"
if [[ -n "${IDF_PATH:-}" && -f "$IDF_PATH/export.sh" ]]; then
INSTALLED_TAG=$(git -C "$IDF_PATH" describe --tags 2>/dev/null || echo "unknown")
info "Found existing ESP-IDF at \$IDF_PATH=$IDF_PATH (tag: $INSTALLED_TAG)"
warn "Skipping IDF install. To use a fresh install, unset \$IDF_PATH."
else
IDF_PATH="${IDF_DEFAULT}"
info "Installing ESP-IDF $IDF_VERSION to $IDF_PATH"
mkdir -p "$(dirname "$IDF_PATH")"
if [[ -d "$IDF_PATH/.git" ]]; then
git -C "$IDF_PATH" fetch --tags
git -C "$IDF_PATH" checkout "$IDF_VERSION"
else
git clone --depth 1 --branch "$IDF_VERSION" \
https://github.com/espressif/esp-idf.git "$IDF_PATH"
fi
git -C "$IDF_PATH" submodule update --init --recursive
info "Running ESP-IDF install script"
"$IDF_PATH/install.sh" esp32
info "ESP-IDF installed."
fi
# ── ESP-ADF ────────────────────────────────────────────────────────────────────
heading "ESP-ADF ($ADF_VERSION)"
if [[ -n "${ADF_PATH:-}" && -d "$ADF_PATH" ]]; then
INSTALLED_TAG=$(git -C "$ADF_PATH" describe --tags 2>/dev/null || echo "unknown")
info "Found existing ESP-ADF at \$ADF_PATH=$ADF_PATH (tag: $INSTALLED_TAG)"
warn "Skipping ADF install. To use a fresh install, unset \$ADF_PATH."
else
ADF_PATH="${ADF_DEFAULT}"
info "Installing ESP-ADF $ADF_VERSION to $ADF_PATH"
mkdir -p "$(dirname "$ADF_PATH")"
if [[ -d "$ADF_PATH/.git" ]]; then
git -C "$ADF_PATH" fetch --tags
git -C "$ADF_PATH" checkout "$ADF_VERSION"
else
git clone --depth 1 --branch "$ADF_VERSION" \
https://github.com/espressif/esp-adf.git "$ADF_PATH"
fi
git -C "$ADF_PATH" submodule update --init --recursive
info "ESP-ADF installed."
fi
# ── env file ───────────────────────────────────────────────────────────────────
heading "Writing .env"
ENV_FILE="$(dirname "$0")/.env"
cat > "$ENV_FILE" <<EOF
# Generated by install.sh — source this before building:
# source .env
export IDF_PATH="${IDF_PATH:-$IDF_DEFAULT}"
export ADF_PATH="${ADF_PATH:-$ADF_DEFAULT}"
EOF
info "Wrote $ENV_FILE"
# ── done ───────────────────────────────────────────────────────────────────────
heading "Done!"
echo ""
echo " Next steps:"
echo " 1. Source the environment:"
echo " source .env && source \$IDF_PATH/export.sh"
echo " 2. Configure WiFi and build:"
echo " ./setup.sh"
echo ""