Raspberry Pi field rig for Pinchard's Island — captures photos from a GoPro HERO3/HERO4 or Pi camera module, uploads to S3, and powers down. Designed for WittyPi boot-once deployments.
- WittyPi powers the Pi on at the scheduled time
scripts/systemd/cloudberry.servicerunscloudberryonce at boot- Capture from GoPro or Pi camera, upload to S3
- Optional
shutdown_afterhalts the Pi until the next wake-up
camera_type |
Hardware |
|---|---|
H4 |
GoPro HERO4 over Wi‑Fi (default for Pinchard's Island) |
H3 |
GoPro HERO3 over Wi‑Fi |
picamera |
Official Raspberry Pi camera module (picamera2) |
git clone https://github.com/adamsimms/cloudberry.git
cd cloudberry
cp .env.example secrets.env
cp config.ini.example config.ini
chmod 600 secrets.env config.ini
# Edit secrets.env and config.ini
./setup.sh
cloudberry --check-config
cloudberryNever commit credentials. Copy .env.example → secrets.env:
AWS_ACCESS_KEY_ID,AWS_SECRET_ACCESS_KEY,AWS_S3_BUCKETGOPRO_WIFI_PASSWORD(required for H3/H4)GOPRO_MAC_ADDRESS(for H4 wake-on-LAN)
Also supported: ~/.cloudberry/secrets.env or CLOUDBERRY_SECRETS_FILE.
Island Wi‑Fi and GoPro field notes are in docs/field/secrets-reference.md but are not loaded by the app.
| Key | Description |
|---|---|
general.camera_type |
H3, H4, or picamera |
general.take_photo |
GoPro: shoot before downloading (true/false) |
general.delay |
Minutes to wait before capture |
general.shutdown_after |
Halt Pi after success |
gopro.ip |
GoPro IP (default 10.5.5.9) |
See config.ini.example for Pi camera settings (awb_mode, exposure_mode, meter_mode, iso, and image tuning).
cloudberry --check-config
cloudberry --dry-run
cloudberry --retry-failed
cloudberry --shutdown| Step | Resource |
|---|---|
| Install Python deps + optional systemd | ./setup.sh |
| WittyPi + optional shutdown sudoers | ./scripts/wittypi-setup.sh |
| Boot-once schedule | Copy a .wpi from scripts/wittypi/ into WittyPi |
| Systemd service | scripts/systemd/cloudberry.service (installed by setup.sh) |
| GoPro CSI firmware | firmware/ |
| Hardware PDFs and setup logs | docs/field/ |
| Path | Purpose |
|---|---|
cloudberry/ |
Python package (CLI, GoPro, Pi camera, S3) |
docs/ |
Contributor docs, IAM policy, field guides |
firmware/ |
GoPro HERO4 official + CamDo CSI firmware |
scripts/wittypi/ |
WittyPi schedule scripts (.wpi) |
scripts/wittypi-setup.sh |
WittyPi installer + optional shutdown sudoers |
scripts/systemd/ |
Boot-once user service template |
assets/audio/ |
Static audio assets |
We welcome bug fixes, docs improvements, and rig-hardening changes. Start with CONTRIBUTING.md, then open a PR against master.
| Document | Purpose |
|---|---|
| CONTRIBUTING.md | Dev setup, checks, PR expectations |
| SECURITY.md | Vulnerability reporting |
| CHANGELOG.md | Release history |
pip install -e ".[dev]"
python3 -m ruff check .
python3 -m pytest
pre-commit run --all-filesOn a Pi: pip install -e ".[pi]".
MIT — see LICENSE.
Security: see SECURITY.md