Web interface for managing Ghost Hands arms over USB serial. Connect, calibrate, monitor, and control both arms from one place. Works with any board the firmware supports (ESP32-WROOM-32, XIAO ESP32-C3, XIAO ESP32-S3).
Browser (React + Tailwind)
↕ River WebSocket (ws://localhost:3001)
Node Server (River services + SerialManager)
↕ USB Serial (115200 baud)
ESP32 (Leader / Follower)
cd web
pnpm install
pnpm dev # runs the River server + Vite dev server together (UI on :5173)Or run them separately:
pnpm dev:server # River server only
pnpm dev:vite # Vite dev server only- Connection — Scan for ESP32 USB ports, connect as leader/follower
- Monitor — Live 10Hz position/load/temp gauges for all 6 joints
- Calibrate — Interactive calibration wizard (center → sweep → save)
- Controls — Gain slider, servo ping, show/clear calibration
listPorts— List ESP32 USB serial portsconnect/disconnect— Manage serial connectionsconnections— Get current connection statesconnectionStatus— Subscription for connect/disconnect events
getStatus— Parsed status fromsserial commandsetGain— Set bilateral gain (0.0–2.0)ping— Check all 6 servos respondgetCalibration/clearCalibration— Manage calibration dataarmState— 10Hz subscription streaming position/load/tempcalibrate— Bidirectional stream for interactive calibration wizard