Files
remote-rig/hardware/README.md
T
Hermes b3d4226b1c
Build (Dev) / build (push) Failing after 1s
CI/CD / lint-and-typecheck (push) Failing after 0s
CI/CD / test (push) Has been skipped
CI/CD / build (push) Has been skipped
CI/CD / deploy (push) Has been skipped
feat: dual-board architecture — ESP8266 camera bridge + ESP32 MQTT bridge
Complete rewrite of firmware into two dedicated boards per camera node:

ESP8266 (Camera Bridge):
- Connects ONLY to GoPro AP — polls status, sends over UART
- Zero network switching, zero MQTT
- HTTP GET /bacpac/SH for status, start/stop
- JSON-per-line UART protocol to ESP32

ESP32 (MQTT Bridge):
- Connects ONLY to travel router — MQTT to Pi hub
- Reads status from ESP8266 over UART2 (RX16/TX17)
- Auto-registration, heartbeat, command forwarding
- Zero camera communication

UART Protocol: JSON-per-line at 115200 8N1
  ESP8266→ESP32: status/ack/pong/error
  ESP32→ESP8266: cmd (start_recording/stop_recording/ping)

Hardware updates:
- BOM now includes both boards (~4/node)
- 3D case has stacked dual-board compartment
- UART wire channel between board recesses
- Shared 3.3V power rail for both boards
2026-05-22 00:49:06 +00:00

145 lines
5.6 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# RemoteRig — Camera Node Hardware Design
> **Version:** 0.1.0 | **Status:** Draft
> **Target:** GoPro Hero 3 Black/Silver + ESP32 D1 Mini + 1000mAh LiPo
## Overview
Each camera node is a self-contained unit clipped onto a GoPro Hero 3. It provides:
- Camera control (start/stop recording) via Wi-Fi
- Status monitoring (battery, storage, recording state)
- MQTT communication to the central Pi Zero 2 W hub
- Battery power for both the ESP32 and GoPro
## Physical Assembly
```
┌─────────────────────────────────┐
│ GoPro Hero 3 │
│ ┌─────────────────────────┐ │
│ │ Lens (front) │ │
│ └─────────────────────────┘ │
│ ┌─────────────────────────┐ │
│ │ Screen │ │
│ └─────────────────────────┘ │
│ ┌──────────┐ │
│ 3D Sleeve ─────→│ ESP8266 │ │ ← Camera bridge (GoPro Wi-Fi)
│ │ D1 Mini │ │
│ ├──────────┤ │
│ │ ESP32 │ │ ← MQTT bridge (travel router)
│ │ Dev │ │
│ ├──────────┤ │
│ │ LiPo │ │ ← Shared power
│ │ 1000mAh │ │
│ └──────────┘ │
└─────────────────────────────────┘
```
## Bill of Materials
| Item | Qty | Cost | Notes |
|------|-----|------|-------|
| GoPro Hero 3 Black/Silver | 1 | Already owned | Target camera |
| ESP32 Dev Board | 1 | ~$5 | MQTT bridge — talks to hub |
| ESP8266 D1 Mini | 1 | ~$3 | Camera bridge — talks to GoPro |
| LiPo 3.7V 1000mAh | 1 | ~$8 | 50x34x8mm typical |
| 3.3V buck converter | 1 | ~$1 | LiPo → both boards (shared VIN) |
| 5V/3A buck converter | 1 | ~$2 | LiPo → GoPro USB (power only) |
| JST-XH 2-pin connectors | 2 | ~$1 | Battery quick-disconnect |
| Micro-USB right-angle cable | 1 | ~$2 | Buck → GoPro |
| Jumper wires (female-female) | 4 | ~$0.50 | UART + GND between boards |
| Velcro strap (20cm) | 1 | ~$0.50 | Secure to GoPro |
| PETG filament | ~35g | ~$0.70 | 3D printed case |
**Total per node:** ~$24
## 3D Printed Case
The case consists of three parts (see `hardware/case/remoterig-case.scad`):
### Part 1: GoPro Sleeve
Wraps around the GoPro body with cutouts for:
- Lens (front)
- Screen/viewfinder (back)
- USB port (side)
- Bottom mounting fingers
- Mounting ears for electronics compartment
### Part 2: Electronics Compartment
Clips onto the sleeve's mounting ears. Holds:
- ESP32 D1 Mini board (recessed fit)
- USB cable routing (in → ESP32, out → GoPro)
- Ventilation slots (top)
- LED visibility window
### Part 3: Battery Compartment
Slides under the GoPro. Contains:
- LiPo battery cavity
- Cable exits (to ESP32, to GoPro buck converter)
- Velcro strap slots
### Print Settings
- **Material:** PETG (outdoor/heat resistant) or PLA+
- **Layer height:** 0.2mm
- **Infill:** 20% gyroid
- **Supports:** Yes (for cable channels)
- **Bed adhesion:** Brim (5mm) for sleeve
- **Orientation:** Print sleeve on its back, compartments flat
## Wiring
```
LiPo 3.7V
├── JST-XH connector
├──→ 3.3V Buck Converter → ESP8266 VIN + GND
│ → ESP32 VIN + GND
│ (both boards share the same 3.3V rail)
└──→ 5V/3A Buck Converter → Micro-USB right-angle → GoPro USB port
(power only — no data over USB)
UART (ESP8266 ↔ ESP32):
ESP8266 TX (GPIO1) ──→ ESP32 RX (GPIO16)
ESP8266 RX (GPIO3) ←── ESP32 TX (GPIO17)
ESP8266 GND ─────────── ESP32 GND
```
## Wi-Fi Topology (No Cables for Camera Control)
```
GoPro Hero 3 ──(Wi-Fi AP @ 10.5.5.1)──→ ESP32 STA #1
Travel Router ──(Wi-Fi AP)─────────────────→ ESP32 STA #2
(192.168.4.1) │
└──→ MQTT → Pi Hub (192.168.4.10)
```
The ESP32 has **no wired data connection** to the GoPro. All camera control is over Wi-Fi. The USB cable is **power only**.
## Enclosure Dimensions
| Component | W × H × D (mm) |
|-----------|-----------------|
| GoPro Hero 3 | 60 × 42 × 30 |
| ESP32 D1 Mini | 34 × 26 × 5 |
| LiPo 1000mAh | 50 × 34 × 8 |
| Full assembly | ~70 × 60 × 55 |
## Usage in the Field
1. **Pre-show:** Charge LiPos, flash ESP32 firmware, verify MQTT connectivity
2. **At venue:** Mount cameras, power on ESP32s (they auto-connect to travel router)
3. **Monitoring:** Open `http://192.168.4.10:8080` on laptop/kiosk
4. **Control:** Start/stop recording from dashboard
5. **Post-show:** Stop recording, power down, swap batteries for next session
## Future Improvements
- **Hot-swap battery:** Quick-release battery tray with spring contacts
- **Weather sealing:** O-ring groove in sleeve for outdoor rain protection
- **Lens hood:** Integrated sun shield for outdoor daytime recording
- **Mount adapter:** 1/4"-20 tripod mount thread on bottom
- **Antenna routing:** External antenna connector for improved Wi-Fi range in stadiums