Skip to the content
4 layers63.8 × 50.8 mmV2 reference, the printed circuit board in 3D

A small black-and-white camera that posts to its own tiny blog, and everything around it.

Size
63.8 × 50.8 mm
Copper layers
4
Thickness
1.6 mm
Parts
85
Nets
60
Pads
310
Tracks, vias
787, 159
Pours
4
Routed
Yes
KiCad
KiCad 10.0 (file 20260206)
Created
13 Sep 2026
Updated
7 Nov 2026

Overview

V2 reference is an open-source printed circuit board by ameesme, from the ameesme/little-camera repository on GitHub, published under the MIT licence. It is a 4-layer board of 63.8 × 50.8 mm with 85 parts on 60 nets, routed with 787 tracks and 159 vias.

It is built around the ESP32-S3-WROOM-1-N16R8, TPS61222DCK and AP2112K-3.3, with the 74LVC1G14Z, ME6211C12M5G-N and ME6211C28M5G-N among its other parts. Its parts include 34 resistors, 23 capacitors, 8 ICs, 5 connectors and 4 diodes. It belongs with the ESP32 boards of this library.

Main components

12

README

README.md

Little Camera

A small black-and-white camera that posts to its own tiny blog, and everything around it.

text
firmware/    ESP32-S3 firmware (PlatformIO). Viewfinder, gallery, flash storage, BLE sync and update.
hardware/    The board it runs on: KiCad schematic + PCB, written by Python.
app/ios/     Bridge app (SwiftUI + CoreBluetooth). Carries photos off the camera and firmware back to it.
server/      Micro-blog + API (TypeScript, Hono, SQLite). One subdomain per owner.
  deploy/    Docker Compose + Caddy (wildcard TLS) for a VPS.
site/        The lttl.cam teaser, static on Vercel.
packages/    Shared TypeScript: PBM parsing, PNG encoding, short codes.
docs/        protocol.md (the contract), flows.md (who does what), mood.md (the camera as a small creature).

The service is lttl.cam, and a blog is one label under it (mees.lttl.cam). The landing page owns lttl.cam/, and everything the server answers on that domain sits under /api for machines or /app for people, so a proxy can tell the two apart.

Everything is black and white. Where a grey is unavoidable it is a 2 px checker.

Step 0: back up the photos on your camera

Do this before you flash anything from here. It reads the flash and writes nothing:

text
cd firmware/tools/export
python3 -m venv .venv && .venv/bin/pip install -r requirements.txt
.venv/bin/python dump_flash.py --port /dev/cu.usbmodem*      # backup/<timestamp>/NNNN.pbm + .png

The partition table and file format are unchanged, so flashing keeps the photos on the device too, and the first sync uploads them all.

Firmware

text
cd firmware
pio run -e v3q -t upload -t monitor
cd tools/preview && make scenes     # the UI without hardware, BMPs in out/

Read firmware/AGENTS.md before anything hardware-facing.

Press = shoot. Hold 0.7 s in the viewfinder = gallery (press = next, hold = back). On the review screen press = save, hold 1.5 s = trash. Asleep: hold 1 s to wake, a tap only chirps.

The camera has a mood (docs/mood.md): it sleeps with a smile after a photo, loses it over a week, and chirps for attention. The sounds are composed, not recorded, and cd firmware/tools/chirp && make bands renders them to WAV.

New firmware can also come over Bluetooth from the app (docs/protocol.md §3.7). It is written to the slot the camera is not running from, and the bootloader only points at it once every byte has arrived and the SHA-256 matches, so a failed update costs time and nothing else. ota revert on the USB console is the way back after you flash over the wire.

Hardware

v3q, 62.8 × 42.82 mm, four layers, 80 parts, KiCad 10. Schematic hardware/pcb/little_camera.kicad_sch, board hardware/pcb/little_camera.kicad_pcb, and little_camera_2d_view.svg next to them if you have no KiCad. Neither is drawn by hand: hardware/pcb/gen/design.py holds every part and connection and the rest of gen/ builds, places and routes from it. See hardware/README.md.

Pins are shared with the firmware and written down in firmware/AGENTS.md. Change them in both places.

Server

text
pnpm install
pnpm dev      # http://localhost:3000/app, blogs at http://<handle>.localhost:3000
pnpm test
pnpm seed     # demo blog at http://mees.localhost:3000

Without SMTP settings every email lands in /app/dev/mailbox. server/README.md has the environment variables and the fake camera; server/deploy/ has production, including how a firmware release is published.

iOS app

text
cd app/ios && xcodegen generate && open LittleCamera.xcodeproj

Needs a real device, because Bluetooth. Set the server URL on first launch. The app never signs in: it identifies as the camera it is paired with.

The whole flow

Make the blog in the app, confirm the address from the link it emails you, then photograph the QR the app draws and press send: the app uploads it, the server binds the camera to your blog, and every photo you send from then on lands on https://<handle>.lttl.cam. Friends join with their email and get one link per batch of new pictures. The web only ever shows pictures — everything else is the app. Step by step in docs/flows.md.

Parts

85
QtyValueFootprintReferences
6100kResistor_SMD:R_0402_1005MetricR3, R8, R12, R18, R28, R31
6100nFCapacitor_SMD:C_0402_1005MetricC6, C7, C14, C19, C20, C24
61uFCapacitor_SMD:C_0402_1005MetricC4, C8, C10, C12, C22, C23
510kResistor_SMD:R_0402_1005MetricR13, R14, R20, R21, R26
41MResistor_SMD:R_0402_1005MetricR4, R19, R34, R35
4330RResistor_SMD:R_0402_1005MetricR22, R23, R24, R25
44.7kResistor_SMD:R_0402_1005MetricR10, R11, R15, R16
4MountingHole_1.8mmlc:MountingHole_1.8mmMH1, MH2, MH3, MH4
310uFCapacitor_SMD:C_0603_1608MetricC16, C17, C21
32.2uFCapacitor_SMD:C_0603_1608MetricC9, C11, C13
21kResistor_SMD:R_0402_1005MetricR6, R27
2200kResistor_SMD:R_0402_1005MetricR9, R33
24.7uFCapacitor_SMD:C_0603_1608MetricC1, C2
25.1kResistor_SMD:R_0402_1005MetricR1, R2
2AP2112K-3.3Package_TO_SOT_SMD:SOT-23-5U4, U10
10RResistor_SMD:R_0402_1005MetricR29
110uFCapacitor_SMD:C_0805_2012MetricC5
11N4148WDiode_SMD:D_SOD-123D4
11uFCapacitor_SMD:C_0603_1608MetricC18
12.2kResistor_SMD:R_0402_1005MetricR17
122uFCapacitor_SMD:C_0805_2012MetricC3
12N7002Package_TO_SOT_SMD:SOT-23Q2
13.3kResistor_SMD:R_0402_1005MetricR5
14.7uHInductor_SMD:L_0805_2012MetricL1
147kResistor_SMD:R_0402_1005MetricR7
174LVC1G14Package_TO_SOT_SMD:SOT-23-5U8
1AO3401APackage_TO_SOT_SMD:SOT-23Q1
1B5819WDiode_SMD:D_SOD-123D1
1BATlc:BAT_Pads_1x02J5
1BOOTButton_Switch_SMD:SW_SPST_TS-1088-xR020SW2
1CAM ONLED_SMD:LED_0603_1608MetricD3
1CHGLED_SMD:LED_0603_1608MetricD2
1D2F-01-Alc:SW_Omron_D2F-A_RightAngleSW1
1DNPResistor_SMD:R_0402_1005MetricR30
1ESP32-S3-WROOM-1-N16R8lc:ESP32-S3-WROOM-1U1
1LS027B7DH01lc:FPC_BXCONN_FC-05B10P21H20J3
1ME6211C12M5GPackage_TO_SOT_SMD:SOT-23-5U6
1ME6211C28M5GPackage_TO_SOT_SMD:SOT-23-5U5
1MLT-5020lc:Buzzer_SMD_MLT5020BZ1
1OV2640 DVPlc:FPC_BXCONN_FC-05B24P21H20J2
1RESETButton_Switch_SMD:SW_SPST_TS-1088-xR020SW3
1SPARE IOlc:IO_Breakout_1x06J4
1TP4054Package_TO_SOT_SMD:SOT-23-5U2
1TPS61222Package_TO_SOT_SMD:SOT-363_SC-70-6U7
1USB-Clc:USB_C_Kinghelm_KH-TYPE-C-W-SMT-16PJ1

More from ameesme/little-camera

3
  • 4 layers62.8 × 42 mmV3 placed, the printed circuit board in 3D

    V3 placed

    ameesme/little-camera

    A small black-and-white camera that posts to its own tiny blog, and everything around it.

    84 partsMIT
  • 4 layers65.8 × 42 mmV3l final, the printed circuit board in 3D

    V3l final

    ameesme/little-camera

    A small black-and-white camera that posts to its own tiny blog, and everything around it.

    83 partsMIT
  • 4 layers65.8 × 44.1 mmV3q routed raw, the printed circuit board in 3D

    V3q routed raw

    ameesme/little-camera

    A small black-and-white camera that posts to its own tiny blog, and everything around it.

    83 partsMIT

Similar boards

  • 6 layers68.8 × 74.6 mmFurbyBoard, the printed circuit board in 3D

    FurbyBoard

    Guilleloma/Furby-GPT

    This project transforms a 1998 Furby into an interactive and advanced desktop assistant using a Raspberry Pi W. It incorporates OpenAI and Whisper for natural language processing, primarily relying on Google Cloud Text…

    158 parts26
  • 4 layers80 × 40 mmIris cortex, the printed circuit board in 3D

    Iris cortex

    HeyPCB/iris-cortex

    Iris Cortex: head controller of the Iris robot head. ESP32-S3 (16 MB flash, 8 MB PSRAM), OV2640 eye-camera FPC, iris-ring LED drivers, harness hub.

    77 partsCERN-OHL-S-2.0
  • 4 layers32 × 46 mmFalcon core, the printed circuit board in 3D

    Falcon core

    PHS-SMCS/falcon-core

    Lightest ESP32-based blimp controller with the works; 9-DoF, ToF altimetry, motor drivers, and Wi-Fi enabled camera streaming, all on a single 300mAh LiPo. >1hr of battery life.

    94 partsAGPL-3.0
  • 4 layers74 × 104 mmBeepy, the printed circuit board in 3D

    Beepy

    sqfmi/beepy-hardware

    Beepy Hardware

    160 parts348MIT
  • 4 layers48 × 87 mmWallet, the printed circuit board in 3D

    Wallet

    AmbireTech/ice

    Ambire Ice: secure Safe-focused hardware wallet

    157 parts4
  • 4 layers65 × 56.5 mmTangnano9k kr260-hat, the printed circuit board in 3D

    Tangnano9k kr260-hat

    calperxd/tangnano9k-kr260-hat

    FPGA HAT for the AMD Kria KR260 based on the Tang Nano 9K (Gowin GW1NR-9, FT2232H, 16-bit parallel link on J21): KiCad 10 schematic, 4-layer PCB and JLCPCB production files

    181 parts1
  • 4 layers130 × 64.3 mmMegabank, the printed circuit board in 3D

    Megabank

    timex-sinclair-projects/TS-2068-Megabank

    Battery-backed 4 MB expansion-bank RAM board for the Timex Sinclair 2068 (TS-Pico v3)

    97 partsMIT

Questions

How big is the V2 reference PCB?

It measures 63.8 × 50.8 mm and has 4 copper layers, 1.6 mm thick.

What parts does the V2 reference use?

85 parts, built around the ESP32-S3-WROOM-1-N16R8, TPS61222DCK, AP2112K-3.3 and 74LVC1G14Z. The full list of its parts is on this page, with links to each part's symbol and footprint where PCBKit's library has them.

Where can I download the V2 reference KiCad files?

From the ameesme/little-camera repository on GitHub, at the commit this page was made from: the board is hardware/pcb/gen/v2_reference.kicad_pcb and its schematic hardware/pcb/gen/v3q_pre_dock.kicad_sch. PCBKit opens the board in the browser, with nothing to install.

Can I use the V2 reference design in my own project?

Its repository publishes it under the MIT licence: you may reuse it on that licence's terms (keep the author's notice, and for a copyleft licence share your changes alike).