117 lines
2.6 KiB
Markdown
117 lines
2.6 KiB
Markdown
---
|
|
name: pi
|
|
description: Interact with the raspberry pi sandbox - capture images, analyze scenes, transfer files, run commands. Use when working with the pi, camera, or servos.
|
|
user_invocable: true
|
|
arg_hint: "capture | analyze | look | send <file> | get <file> | exec <cmd>"
|
|
---
|
|
|
|
# /pi
|
|
|
|
Raspberry Pi 3B+ sandbox toolkit. The pi is at 10.0.0.11 (user: pi).
|
|
SSH key auth is set up - use regular ssh/scp/rsync via Bash, no need for ssh-mcp.
|
|
|
|
## connection
|
|
|
|
```bash
|
|
PI="pi@10.0.0.11"
|
|
ssh $PI '<command>'
|
|
scp $PI:<remote> <local>
|
|
scp <local> $PI:<remote>
|
|
rsync -avz $PI:<remote_dir>/ <local_dir>/
|
|
```
|
|
|
|
## hardware
|
|
|
|
- USB camera at /dev/video0
|
|
- Pan servo: GPIO 17, Tilt servo: GPIO 18, Trigger: GPIO 27
|
|
- Servos NOT currently wired up
|
|
- pigpiod must be started before servo use: `sudo systemctl start pigpiod`
|
|
|
|
## commands
|
|
|
|
### /pi capture [width] [height]
|
|
|
|
Take a photo and save locally.
|
|
|
|
```bash
|
|
ssh pi@10.0.0.11 'python3 ~/pi-sandbox/tools/capture.py 640 480' | base64 -d > ~/pi-sandbox/latest.jpg
|
|
```
|
|
|
|
Or for full resolution, capture on pi then scp:
|
|
|
|
```bash
|
|
ssh pi@10.0.0.11 'python3 -c "
|
|
import cv2
|
|
cap = cv2.VideoCapture(0)
|
|
cap.set(3, 640); cap.set(4, 480)
|
|
_, f = cap.read()
|
|
cap.release()
|
|
cv2.imwrite(\"/tmp/cap.jpg\", f)
|
|
"'
|
|
scp pi@10.0.0.11:/tmp/cap.jpg ~/pi-sandbox/latest.jpg
|
|
```
|
|
|
|
Then use Read tool on ~/pi-sandbox/latest.jpg to view it.
|
|
|
|
### /pi analyze
|
|
|
|
Quick scene analysis - brightness, contrast, edge density, saturation.
|
|
|
|
```bash
|
|
ssh pi@10.0.0.11 'python3 ~/pi-sandbox/tools/analyze.py 640'
|
|
```
|
|
|
|
### /pi look
|
|
|
|
Capture + analyze + view. Combines capture and analyze.
|
|
|
|
### /pi send <local_file> <remote_dest>
|
|
|
|
Send a file TO the pi:
|
|
|
|
```bash
|
|
scp <local_file> pi@10.0.0.11:<remote_dest>
|
|
```
|
|
|
|
Or for directories:
|
|
|
|
```bash
|
|
rsync -avz <local_dir>/ pi@10.0.0.11:<remote_dir>/
|
|
```
|
|
|
|
### /pi get <remote_file> [local_dest]
|
|
|
|
Get a file FROM the pi:
|
|
|
|
```bash
|
|
scp pi@10.0.0.11:<remote_file> <local_dest>
|
|
```
|
|
|
|
### /pi exec <command>
|
|
|
|
Run something on the pi:
|
|
|
|
```bash
|
|
ssh pi@10.0.0.11 '<command>'
|
|
```
|
|
|
|
## helper scripts on pi
|
|
|
|
- `~/pi-sandbox/tools/capture.py [w] [h]` - capture photo, output base64
|
|
- `~/pi-sandbox/tools/analyze.py [w]` - capture + opencv stats (text output)
|
|
- `~/pi-sandbox/sentry.py` - motion detection, saves to ~/pi-sandbox/captures/
|
|
|
|
## constraints
|
|
|
|
- camera runs ~4fps at 640x480 on the pi 3b+
|
|
- opencv 3.2 (uses 3-value findContours return)
|
|
- tflite-runtime 2.5.0 available
|
|
|
|
## project files
|
|
|
|
- pi: `~/pi-sandbox/` - main workspace
|
|
- pi: `~/pi-sandbox/tools/` - helper scripts
|
|
- pi: `~/pi-sandbox/captures/` - motion detection captures
|
|
- pi: `~/cat-deterrent/` - old cat deterrent code (has detector.py, servo.py)
|
|
- local: `~/pi-sandbox/` - local workspace + received files
|