2f827c168d682835fd29b5c32efc6a2e0bf1a7bc
Party Cam: Instant Thermal Camera & Digital Gallery
A DIY point-and-shoot camera that prints dithered lo-fi photos on thermal receipts and instantly uploads high-res copies to a local Rust server.
Hardware BOM
- ESP32-CAM
- Thermal Printer (TTL Serial, 5V-9V)
- Batteries (Recommended: 2x 18650 Li-Ion in series = 7.4V, powering printer directly + buck converter to 5V for ESP32)
- Button (Tactile switch)
- Programmer: FTDI Adapter or Arduino Uno (for flashing)
Wiring
1. Camera & Printer
| ESP32-CAM Pin | Component | Function |
|---|---|---|
| 5V | PSU 5V | Power In |
| GND | PSU GND | Common Ground |
| GPIO 12 | Button | Trigger (Connect other leg to GND) |
| GPIO 14 (U1T) | Printer RX | Data TO Printer |
| GPIO 15 (U1R) | Printer TX | Data FROM Printer |
| GPIO 4 | Flash LED | (Optional) Built-in Flash |
2. Flashing (Using Arduino Uno as Bridge)
See "How to Flash" section below.
Setup Guide
A. The Server (Rust)
The server receives images and hosts the gallery for guests.
- Install Rust:
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh - Configure:
Create a
.envfile in theserverfolder:SERVER_HOST=0.0.0.0 SERVER_PORT=3000 GALLERY_PASSWORD=partytime UPLOAD_DIR=./uploads - Run:
Server will listen on port 3000.
cd server cargo run --release
B. The Camera (Firmware)
- Open Project: Open this folder in VS Code with the PlatformIO extension.
- Flash Mode Wiring (Arduino Uno Method):
- Arduino RESET -> Arduino GND (Bypasses Arduino chip).
- Arduino Pin 0 (RX) -> ESP32 U0R (Direct passthrough).
- Arduino Pin 1 (TX) -> ESP32 U0T (Direct passthrough).
- ESP32 IO0 -> ESP32 GND (Enables Download Mode).
- Upload:
- Connect via USB.
- Click "Upload".
- Press the RST button on ESP32 when "Connecting..." appears.
- Run Mode:
- Disconnect IO0 from GND.
- Press RST to boot.
Configuration (First Boot)
- Power on the camera.
- Connect your phone to the WiFi network:
PartyCam-Setup. - A captive portal should open (or go to
192.168.4.1). - WiFi: Select the venue's WiFi (or your phone hotspot).
- Server URL: Enter your laptop's IP (e.g.,
http://192.168.1.15:3000/upload). - Settings: Adjust Contrast/Heat if the print is too faint or dark.
- Save & Reboot.
The camera is now live!
Description
Languages
C++
65%
Rust
21.5%
HTML
9.7%
Dockerfile
3.8%