134 lines
5.9 KiB
Bash
Executable File
134 lines
5.9 KiB
Bash
Executable File
#!/bin/bash
|
|
# Build and Deploy Script for ESP32-C5-EVB
|
|
# Usage: ./build_and_deploy.sh [--flash-only]
|
|
|
|
set -e
|
|
|
|
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
SKETCH_DIR="$SCRIPT_DIR/esp32_arduino"
|
|
SKETCH_FILE="$SKETCH_DIR/esp32_arduino.ino"
|
|
DEVICE_PORT="${DEVICE_PORT:-/dev/ttyACM0}"
|
|
DEVICE_BAUD="${DEVICE_BAUD:-921600}"
|
|
DEVICE_IP="${DEVICE_IP:-192.168.0.241}"
|
|
|
|
# ─ Colors ─────────────────────────────────────────────────────────────────────
|
|
RED='\033[0;31m'
|
|
GREEN='\033[0;32m'
|
|
YELLOW='\033[1;33m'
|
|
BLUE='\033[0;34m'
|
|
NC='\033[0m' # No Color
|
|
|
|
# ─ Functions ──────────────────────────────────────────────────────────────────
|
|
log_info() { echo -e "${BLUE}[INFO]${NC} $1"; }
|
|
log_success() { echo -e "${GREEN}[✓]${NC} $1"; }
|
|
log_warn() { echo -e "${YELLOW}[⚠]${NC} $1"; }
|
|
log_error() { echo -e "${RED}[✗]${NC} $1"; }
|
|
|
|
# ─ Check Prerequisites ────────────────────────────────────────────────────────
|
|
log_info "Checking prerequisites..."
|
|
|
|
if [ ! -f "$SKETCH_FILE" ]; then
|
|
log_error "Sketch not found: $SKETCH_FILE"
|
|
exit 1
|
|
fi
|
|
|
|
if ! command -v esptool.py &> /dev/null; then
|
|
log_error "esptool.py not found. Install: pip install esptool"
|
|
exit 1
|
|
fi
|
|
|
|
if [ ! -e "$DEVICE_PORT" ]; then
|
|
log_error "Device port not found: $DEVICE_PORT"
|
|
log_info "Available ports:"
|
|
ls -la /dev/ttyUSB* /dev/ttyACM* 2>/dev/null || echo " (none found)"
|
|
exit 1
|
|
fi
|
|
|
|
log_success "Prerequisites OK"
|
|
|
|
# ─ Skip compilation if --flash-only ───────────────────────────────────────────
|
|
if [ "$1" == "--flash-only" ]; then
|
|
log_warn "Skipping compilation (--flash-only)"
|
|
LATEST_BUILD=$(find /tmp -name "arduino_build_*" -type d 2>/dev/null | sort -V | tail -1)
|
|
else
|
|
# ─ Build ──────────────────────────────────────────────────────────────────
|
|
log_info "Compiling sketch (this may take 30-60 seconds)..."
|
|
log_warn "Please click 'Sketch → Verify' in Arduino IDE or use: arduino --verify --board esp32:esp32:esp32c5 '$SKETCH_FILE'"
|
|
log_info ""
|
|
log_info "Waiting for build to complete..."
|
|
|
|
# Find the latest build directory created
|
|
BUILD_BEFORE=$(find /tmp -name "arduino_build_*" -type d 2>/dev/null | sort -V | tail -1)
|
|
START_TIME=$(date +%s)
|
|
|
|
# Wait for new build or changes to existing build (max 120 seconds)
|
|
while true; do
|
|
LATEST_BUILD=$(find /tmp -name "arduino_build_*" -type d 2>/dev/null | sort -V | tail -1)
|
|
|
|
if [ -n "$LATEST_BUILD" ] && [ -f "$LATEST_BUILD/esp32_arduino.ino.merged.bin" ]; then
|
|
MODIFIED=$(stat -f%m "$LATEST_BUILD/esp32_arduino.ino.merged.bin" 2>/dev/null || stat -c%Y "$LATEST_BUILD/esp32_arduino.ino.merged.bin")
|
|
CURRENT_TIME=$(date +%s)
|
|
|
|
if [ $((CURRENT_TIME - MODIFIED)) -lt 10 ]; then
|
|
log_success "Build found and appears recent"
|
|
break
|
|
fi
|
|
fi
|
|
|
|
CURRENT_TIME=$(date +%s)
|
|
if [ $((CURRENT_TIME - START_TIME)) -gt 120 ]; then
|
|
log_error "Timeout waiting for build. Please compile in Arduino IDE manually."
|
|
exit 1
|
|
fi
|
|
|
|
sleep 2
|
|
done
|
|
fi
|
|
|
|
# ─ Verify binary exists ───────────────────────────────────────────────────────
|
|
if [ -z "$LATEST_BUILD" ] || [ ! -f "$LATEST_BUILD/esp32_arduino.ino.merged.bin" ]; then
|
|
log_error "Compiled binary not found"
|
|
exit 1
|
|
fi
|
|
|
|
BINARY_PATH="$LATEST_BUILD/esp32_arduino.ino.merged.bin"
|
|
BINARY_SIZE=$(ls -lh "$BINARY_PATH" | awk '{print $5}')
|
|
log_success "Binary found: $BINARY_PATH ($BINARY_SIZE)"
|
|
|
|
# ─ Flash ──────────────────────────────────────────────────────────────────────
|
|
log_info "Erasing flash on $DEVICE_PORT..."
|
|
esptool.py --chip esp32c5 --port "$DEVICE_PORT" --baud "$DEVICE_BAUD" erase-flash
|
|
|
|
log_info "Flashing firmware..."
|
|
cd "$LATEST_BUILD"
|
|
esptool.py --chip esp32c5 --port "$DEVICE_PORT" --baud "$DEVICE_BAUD" write-flash 0x0 esp32_arduino.ino.merged.bin
|
|
|
|
log_success "Firmware flashed successfully!"
|
|
|
|
# ─ Verify ─────────────────────────────────────────────────────────────────────
|
|
log_info "Waiting for device to boot (10 seconds)..."
|
|
sleep 10
|
|
|
|
log_info "Testing connectivity to $DEVICE_IP..."
|
|
if curl -s -f -u Ske087:Matei@123 "http://$DEVICE_IP/relay/status?relay=1" &> /dev/null; then
|
|
log_success "Device is online and responding!"
|
|
|
|
# Test all endpoints
|
|
log_info "Testing API endpoints..."
|
|
echo -n " Relay 1: "
|
|
curl -s -u Ske087:Matei@123 "http://$DEVICE_IP/relay/status?relay=1"
|
|
echo -n " Relay 2: "
|
|
curl -s -u Ske087:Matei@123 "http://$DEVICE_IP/relay/status?relay=2"
|
|
echo -n " Input 1: "
|
|
curl -s -u Ske087:Matei@123 "http://$DEVICE_IP/input/status?input=1"
|
|
echo -n " Input 2: "
|
|
curl -s -u Ske087:Matei@123 "http://$DEVICE_IP/input/status?input=2"
|
|
|
|
log_success "All tests passed!"
|
|
else
|
|
log_warn "Device not yet responding. This is normal if WiFi connection is in progress."
|
|
log_info "Check with: curl -u Ske087:Matei@123 http://$DEVICE_IP/relay/status?relay=1"
|
|
fi
|
|
|
|
log_success "Deployment complete!"
|