JellyboxJellybox/Docs
← Self-hosting guide

Components & wiring

Everything you need to build a Jellybox device from scratch. The Classic build is intentionally simple: an ESP32, an NFC reader, an eInk screen, and a NeoPixel ring.

Jellybox Classic (jb-eink-v1). These instructions apply to this hardware variant only — other Jellybox SKUs use different displays, pinouts, and peripherals.
Wiring overview — ESP32 to PN532, eInk display, and NeoPixel ring.

Bill of materials

All components are available on Amazon, AliExpress, or Adafruit.

ComponentNotesQty
ESP32 dev boardAny 38-pin ESP32 DevKit works. The BOOT button (GPIO0) is used for factory reset.1
PN532 NFC/RFID moduleMust support I²C mode. Most breakout boards (Elechouse, AZDelivery) include mode-select DIP switches.1
Waveshare 2.9" V2 B/W eInk displayPart number: 2.9inch e-Paper Module (B). 296×128 pixels, SPI interface. Make sure it is V2.1
NeoPixel 16-LED ring (WS2812B)Any WS2812B 16-LED ring. Unbranded ones from Amazon/AliExpress work fine.1
LiPo battery + TP4056 charger boardA 1000–2000 mAh single-cell LiPo with a TP4056 (micro-USB or USB-C) charging board.1
SPDT power switchFitted in line between the TP4056 output and the ESP32 so the device can be turned off completely.1
Breadboard or perfboard + jumper wiresFor prototyping.1
RFID/NFC tags (NTAG213 or NTAG215)Standard ISO 14443A tags. CR80 PVC stickers (85.6 × 53.98 mm) pair with the dashboard's sticker sheet designer.10+

Custom PCB

Skip the breadboard — a drop-in PCB that routes every connection above onto a single board.

Top side — module headers, NFC, eInk, NeoPixel, charger footprints.
Bottom side — routing and battery pads.
Schematic — exported from the KiCad source.

Want to fabricate your own? The Download gerbers button above gives you the manufacturing files as a single ZIP. Upload it directly to a fab house like JLCPCB, PCBWay, or OSH Park.

Board dimensions & mounting holes

For anyone designing their own enclosure or 3D-printed shell around the PCB.

The PCB is 77.14 × 33.01 mm, two-layer FR4, 1.6 mm thick. Four 2.0 mm mounting holes (M2 clearance) sit near the corners — positions are measured from the bottom-left corner of the board outline.

HoleX (mm)Y (mm)Ø (mm)
M1 (bottom-left)1.271.472.0
M2 (bottom-right)75.701.672.0
M3 (top-left)1.4731.652.0
M4 (top-right)75.7031.552.0

For the full, dimensioned reference — including every via and component hole — see the drill map:

This PCB fits the Jellybox Classic (jb-eink-v1) build only — other Jellybox SKUs use different displays and peripherals and will need their own boards.

No PCB? See the hand-wired pinout below.

Wiring

All components run on 3.3 V logic and are directly compatible with the ESP32. The NeoPixel ring can be powered from 5 V for full brightness, or 3.3 V for dimmer but safer operation.

Make sure the PN532 module's mode-select switches are set to I²C before wiring — most boards ship in UART mode. The switch position is printed on the PCB silkscreen (usually SEL0 = ON, SEL1 = OFF).

PN532 NFC reader (I²C)

IRQ and RST are not used by the firmware yet — leave those pins on the PN532 disconnected.

Component pinESP32 pinNotes
VCC3.3V3.3 V only — do not use 5 V
GNDGND
SDAGPIO 21I²C data — add 4.7 kΩ pull-up to 3.3 V if signal is unstable
SCLGPIO 22I²C clock

Waveshare 2.9″ V2 eInk display (SPI)

The display uses the ESP32's default VSPI bus (MOSI=23, CLK=18). Other pins are defined in Config.h.

Component pinESP32 pinNotes
VCC3.3V
GNDGND
DIN (MOSI)GPIO 23SPI MOSI — shared VSPI bus
CLK (SCK)GPIO 18SPI clock — shared VSPI bus
CSGPIO 5Chip select — active low
DCGPIO 17Data / command select
RSTGPIO 16Reset
BUSYGPIO 4Busy signal — wait for LOW before sending commands

NeoPixel 16-LED ring (WS2812B)

Component pinESP32 pinNotes
VCC / +5V5V (VIN)Use 5 V from the ESP32 VIN pin for full brightness. 3.3 V also works at lower brightness.
GNDGND
DINGPIO 27Data signal — a 300–500 Ω series resistor on this line is recommended to prevent ringing
Keep wires short and tidy. SPI buses are particularly sensitive to long wires at high clock speeds — if you see corrupted display output, try reducing the SPI clock or shortening the wires.

Power

Jellybox is designed as a portable, battery-powered device — not a tethered USB gadget.

The assembly draws around 200–300 mA at 5 V when active (mostly the NeoPixel ring). A single-cell LiPo (1000–2000 mAh) wired through a TP4056 charger board gives a good balance of runtime and size, and lets you recharge over USB without removing the cell.

Battery wiring (TP4056 → ESP32)

Fit a power switch in line between the TP4056 output and the ESP32 so the device can be fully turned off when not in use.

Component pinESP32 pinNotes
LiPo +TP4056 B+Battery positive into the charger board
LiPo −TP4056 B−Battery negative into the charger board
TP4056 OUT+Switch → ESP32 5V / VINRun the positive output through an SPDT switch, then into the ESP32 5 V rail
TP4056 OUT−ESP32 GNDCommon ground
Always wire the switch on the TP4056 output (not between the battery and the charger). This way the cell can still charge over USB while the device is switched off.

The firmware does not use the ESP32's deep-sleep mode yet, so the device stays active while switched on. Expect a few hours of runtime from a 2000 mAh cell — flip the switch off between uses to extend battery life.

Tag stickers

Credit-card-format NFC stickers are the easiest tag form factor — slim, cheap, and printable.

Jellybox is built around standard ISO 14443A tags, but the recommended form factor is a CR80 credit-card-sized PVC sticker (85.6 × 53.98 mm) with an embedded NTAG213 or NTAG215 chip. They're the same shape as a bank card, so they sit neatly in a wallet, a binder pocket, or a display rack next to the device — and the rigid white face takes printed artwork well.

The dashboard includes a built-in sticker sheet designer at Tags → Create sticker sheet. It:

  • Pre-fills one sticker per registered RFID tag, pulling the poster or album artwork from the linked Jellyfin (or extension) item.
  • Lays stickers out on A4 at exact CR80 dimensions, with cut marks and a safe-print border so they trim cleanly with a guillotine or scissors.
  • Lets you tweak title text, swap artwork, choose landscape or portrait, and set text colour per card before printing.
Printed CR80 sticker cards stored in a ring-binder folio — one per tag, ready to scan.
Print at 100% scale— disable any “fit to page” or “shrink to fit” option in your browser's print dialog, or the stickers won't line up with the cut marks.

Look for “NTAG213 PVC card” or “NTAG215 NFC card” on Amazon or AliExpress, sold in packs of 10–50. NTAG215 has more user memory (504 bytes) but Jellybox only stores the UID, so NTAG213 (144 bytes) is plenty.

Hardware assembled? Flash the firmware →