Camera, GPIO, and hardware integration for Raspberry Pi 5. Use for camera testing, hardware diagnostics, GPIO troubleshooting, and sensor issues.
Scanned 2/12/2026
Install via CLI
openskills install majiayu000/claude-skill-registry---
description: Camera, GPIO, and hardware integration for Raspberry Pi 5. Use for camera testing, hardware diagnostics, GPIO troubleshooting, and sensor issues.
auto-activation-keywords:
- camera
- gpio
- hardware
- sensor
- raspberry
- pi5
- capture
- diagnostic
- usb
- device
- peripheral
---
# Hardware Integration Skill
Complete reference for camera, GPIO, USB, and hardware integration on Raspberry Pi 5 for the PhotoBooth application.
## Quick Reference
- **Camera**: iPad via getUserMedia (browser-based capture)
- **Printer**: Canon Selphy CP1500 via USB/CUPS
- **Network**: Wi-Fi AP mode (hostapd)
- **Storage**: 256GB microSD
## Raspberry Pi 5 Specifications
| Component | Specification |
|-----------|---------------|
| CPU | Broadcom BCM2712, Quad-core Cortex-A76 @ 2.4GHz |
| RAM | 8GB LPDDR4X |
| USB | 2x USB 3.0, 2x USB 2.0 |
| GPIO | 40-pin header, 26 GPIO pins |
| Network | Gigabit Ethernet, Wi-Fi 5 (802.11ac), Bluetooth 5.0 |
## Camera Integration
The PhotoBooth uses iPad Air as the camera device via browser's getUserMedia API.
### Camera Constraints (Frontend)
```typescript
const constraints: MediaStreamConstraints = {
video: {
facingMode: 'user', // Front camera for selfies
width: { ideal: 1920 }, // Full HD
height: { ideal: 1080 },
frameRate: { ideal: 30 }
},
audio: false
};
```
### Camera Testing
```bash
# On iPad (Safari DevTools):
# Check getUserMedia support
navigator.mediaDevices.getUserMedia({ video: true })
.then(stream => console.log('Camera OK'))
.catch(err => console.error('Camera Error:', err));
```
## USB Device Management
### List USB Devices
```bash
# List all USB devices
lsusb
# Detailed info
lsusb -v | grep -A 10 "Canon"
# Check USB device tree
lsusb -t
```
### USB Troubleshooting
```bash
# Check kernel messages for USB
dmesg | grep -i usb | tail -20
# Reset USB bus (if device not responding)
sudo usbreset /dev/bus/usb/001/002 # Replace with actual device
```
## Network (Wi-Fi AP Mode)
### Configuration Files
- `/etc/hostapd/hostapd.conf` - AP configuration
- `/etc/dnsmasq.conf` - DHCP configuration
- `/etc/dhcpcd.conf` - Static IP for wlan0
### hostapd Configuration
```conf
interface=wlan0
driver=nl80211
ssid=photobooth
hw_mode=g
channel=7
wmm_enabled=0
macaddr_acl=0
auth_algs=1
ignore_broadcast_ssid=0
wpa=2
wpa_passphrase=photobooth-1998
wpa_key_mgmt=WPA-PSK
rsn_pairwise=CCMP
```
### Network Testing
```bash
# Check Wi-Fi AP status
sudo systemctl status hostapd
# List connected clients
iw dev wlan0 station dump
# Check IP assignments
cat /var/lib/misc/dnsmasq.leases
```
## System Diagnostics
### Temperature Monitoring
```bash
# CPU temperature
vcgencmd measure_temp
# Continuous monitoring
watch -n 1 vcgencmd measure_temp
```
### Memory and CPU
```bash
# Memory usage
free -h
# CPU usage
top -bn1 | head -20
# Disk usage
df -h
```
### Service Status
```bash
# Check all PhotoBooth services
sudo systemctl status hostapd
sudo systemctl status dnsmasq
sudo systemctl status cups
sudo systemctl status photobooth-backend
sudo systemctl status photobooth-frontend
```
## Common Issues & Solutions
### Issue: Camera not accessible from browser
**Cause**: HTTPS required for getUserMedia on non-localhost
**Solution**:
1. Use self-signed certificate for HTTPS
2. Or add exception in Safari settings
3. Or use localhost with port forwarding
### Issue: USB device not detected
**Cause**: Power issues or driver problems
**Solution**:
```bash
# Check USB power
vcgencmd get_throttled
# Reload USB driver
sudo modprobe -r usb_storage && sudo modprobe usb_storage
# Check dmesg for errors
dmesg | tail -50
```
### Issue: Wi-Fi AP not starting
**Cause**: Interface conflict or config error
**Solution**:
```bash
# Check for conflicts
sudo rfkill list
# Unblock if blocked
sudo rfkill unblock wifi
# Restart hostapd
sudo systemctl restart hostapd
```
### Issue: High CPU temperature
**Cause**: Inadequate cooling or high load
**Solution**:
```bash
# Check temperature
vcgencmd measure_temp
# If > 80°C, reduce CPU frequency temporarily
echo 1500000 | sudo tee /sys/devices/system/cpu/cpu0/cpufreq/scaling_max_freq
```
## Hardware Test Script
Create `/home/pi/scripts/test-hardware.sh`:
```bash
#!/bin/bash
echo "=== PhotoBooth Hardware Diagnostics ==="
echo ""
echo "CPU Temperature: $(vcgencmd measure_temp)"
echo "Memory: $(free -h | grep Mem | awk '{print $3"/"$2}')"
echo "Disk: $(df -h / | tail -1 | awk '{print $3"/"$2" ("$5" used)"}')"
echo ""
echo "=== USB Devices ==="
lsusb | grep -v "hub" || echo "No non-hub USB devices"
echo ""
echo "=== Network ==="
echo "Wi-Fi AP: $(systemctl is-active hostapd)"
echo "DHCP: $(systemctl is-active dnsmasq)"
echo "Connected clients: $(iw dev wlan0 station dump 2>/dev/null | grep Station | wc -l)"
echo ""
echo "=== Services ==="
echo "CUPS: $(systemctl is-active cups)"
echo "Backend: $(systemctl is-active photobooth-backend 2>/dev/null || echo 'not configured')"
echo ""
echo "=== Diagnostics Complete ==="
```
## Related Documentation
- `docs/DEPLOYMENT.md` - Full deployment guide
- `docs/ERROR_CODES.md` - Hardware error codes (PRINTER_*, STORAGE_*)
- `docs/use-cases/UC-205-health-check.md` - Health monitoring
No comments yet. Be the first to comment!