# Hardware ## Parts - An ESP32-C6 dev board (e.g. ESP32-C6-DevKitC-1). Needs 8MB flash -- see [`firmware/sdkconfig.defaults`](../firmware/sdkconfig.defaults) and [`firmware/partitions.csv`](../firmware/partitions.csv) if yours differs. - [Waveshare 7.3" E Ink Spectra 6 (E6) panel](https://www.waveshare.com/7.3inch-e-paper-hat-e.htm) -- 800x480, 6-color, SPI. - A USB cable for flashing/power. ## 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`](../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 | -- | Optionally, two buttons, both wired the same way -- momentary push button between the GPIO and GND, no external resistor needed (the firmware enables each pin's internal pull-up, so it idles high and reads low when pressed): - **Factory-reset (GPIO3)**: held for 10 seconds, clears the stored WiFi/server config; see [`firmware/README.md`](../firmware/README.md#resetting-to-provisioning-mode). - **Next photo (GPIO2)**: a normal press skips immediately to the next photo; see [`firmware/README.md`](../firmware/README.md#skipping-to-the-next-photo). Both pins were picked because they're within GPIO 0-7 -- the only pins the ESP32-C6 can wake from deep sleep on -- aren't strapping pins, and aren't already used by the panel wiring above. 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.