117 lines
3.4 KiB
Bash
Executable File
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 ""
|