Files
espresso_frame/docs/hardware.md
T
tfaour 7013311249
Build and push server image / build-and-push (push) Successful in 32s
Add READMEs, docs, and LICENSE for publishing
- LICENSE: MIT, with attribution notes for the vendored qrcode/epaper_fonts/
  dns_server code and the epd7in3e driver's transcription of Waveshare's
  register sequence.
- Top-level README.md: project overview, hardware list, quick-start
  pointing at firmware/ and server/, repo layout, license, Claude Code
  attribution.
- firmware/README.md: full rewrite (was still the stock ESP-IDF captive
  portal example's README) -- build/flash instructions, Kconfig reference
  table, first-boot walkthrough, and how to reset to provisioning mode via
  NVS erase (the only way in right now; a proper reconfigure trigger is a
  future addition).
- docs/hardware.md: wiring table + parts list + strapping-pin/SPI-speed notes.
- docs/architecture.md: sequence diagram and walkthrough of the full
  provision -> connect -> fetch -> display -> sleep cycle, plus the
  reasoning behind doing image processing server-side and reusing Immich's
  face detection instead of bundling a detector.
- server/README.md: fixed stale endpoint docs (missing GET /frame/config,
  POST /api/config still describing removed immich_url/api_key fields).
2026-07-18 16:47:30 -04:00

2.4 KiB

Hardware

Parts

Wiring

The panel connects over SPI plus three control lines (data/command, reset, busy). Defaults below match the reference build and are set in firmware/components/epd7in3e/Kconfig -- override via idf.py menuconfig under E-Paper Display (epd7in3e) Configuration if your wiring differs.

Panel pin ESP32-C6 GPIO Kconfig option
CLK 20 EPD_PIN_CLK
DIN 19 EPD_PIN_MOSI
CS 18 EPD_PIN_CS
DC 9 EPD_PIN_DC
RST 10 EPD_PIN_RST
BUSY 11 EPD_PIN_BUSY
VCC 3.3V --
GND GND --

A couple of things worth knowing if you pick different pins:

  • Avoid the ESP32-C6's strapping pins (GPIO 4, 5, 8, 9, 15) and the USB-JTAG pins (12, 13) where possible -- strapping pins are sampled at reset to select boot mode. The reference wiring above already uses GPIO9 for DC, which is a strapping pin; it's only sampled during power-on/reset, so it's safe once the app is running, but if flashing/boot ever misbehaves on your board, check whether the panel is pulling that line low during reset.
  • The panel's SPI interface is rated well above the firmware's default 4MHz clock (EPD_SPI_CLOCK_HZ), but breadboard/dupont-wire connections are often unreliable much past a few MHz. Raise it once your physical wiring is confirmed solid.

Power

The device spends nearly all its time in deep sleep, waking briefly once an hour (configurable, see the server's web UI) to fetch and display a photo. A full-color refresh on this panel takes 15-30+ seconds and draws more current than deep sleep by a wide margin -- expect battery life (if not running from USB power) to be dominated by refresh frequency, not sleep current.