117 lines
3.4 KiB
Bash
Executable File

#!/bin/bash
# ──────────────────────────────────────────────
# Ti-Pote Robot Client — Installation Script
# For Raspberry Pi Zero 2W running Raspberry Pi OS Lite (64-bit)
# ──────────────────────────────────────────────
set -euo pipefail
echo "╔══════════════════════════════════════╗"
echo "║ Ti-Pote Robot Client Installer ║"
echo "╚══════════════════════════════════════╝"
# ── System packages ──
echo ""
echo "→ Updating system packages..."
sudo apt update && sudo apt upgrade -y
echo "→ Installing system dependencies..."
sudo apt install -y \
git \
curl \
alsa-utils \
python3 \
python3-pip \
python3-venv \
portaudio19-dev \
libatlas-base-dev
# ── Node.js (LTS via nvm) ──
echo ""
echo "→ Installing Node.js LTS..."
if ! command -v node &> /dev/null; then
curl -fsSL https://deb.nodesource.com/setup_22.x | sudo -E bash -
sudo apt install -y nodejs
echo "Node.js $(node -v) installed"
else
echo "Node.js $(node -v) already installed"
fi
# ── pnpm ──
echo ""
echo "→ Installing pnpm..."
if ! command -v pnpm &> /dev/null; then
npm install -g pnpm
echo "pnpm installed"
else
echo "pnpm already installed"
fi
# ── Python dependencies (wake word) ──
echo ""
echo "→ Setting up Python virtual environment for wake word..."
VENV_DIR="$HOME/.tipote-venv"
if [ ! -d "$VENV_DIR" ]; then
python3 -m venv "$VENV_DIR"
fi
source "$VENV_DIR/bin/activate"
pip install --upgrade pip
pip install openwakeword pyaudio numpy
deactivate
echo "Python dependencies installed in $VENV_DIR"
# ── I2S Audio setup (for INMP441 + MAX98357) ──
echo ""
echo "→ Checking I2S audio configuration..."
CONFIG_FILE="/boot/firmware/config.txt"
if [ ! -f "$CONFIG_FILE" ]; then
CONFIG_FILE="/boot/config.txt"
fi
if ! grep -q "dtoverlay=googlevoicehat-soundcard" "$CONFIG_FILE" 2>/dev/null; then
echo ""
echo "⚠ I2S audio overlay not configured."
echo " To enable I2S audio (INMP441 mic + MAX98357 amp), add to $CONFIG_FILE:"
echo ""
echo " # I2S audio for Ti-Pote"
echo " dtparam=i2s=on"
echo " dtoverlay=googlevoicehat-soundcard"
echo ""
echo " Then reboot the Pi."
echo ""
echo " Alternatively, if using USB audio, no changes are needed."
else
echo "I2S audio overlay already configured"
fi
# ── Verify audio devices ──
echo ""
echo "→ Available audio capture devices:"
arecord -l 2>/dev/null || echo " (no capture devices found — connect a microphone)"
echo ""
echo "→ Available audio playback devices:"
aplay -l 2>/dev/null || echo " (no playback devices found — connect a speaker)"
# ── Summary ──
echo ""
echo "╔══════════════════════════════════════╗"
echo "║ Installation complete! ║"
echo "╚══════════════════════════════════════╝"
echo ""
echo "Next steps:"
echo " 1. Configure audio (see above)"
echo " 2. Copy .env.example to .env and fill in your device credentials"
echo " 3. Run: pnpm install"
echo " 4. Run: pnpm dev"
echo ""