#!/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 ""