Skip to the content
2 layers47.2 × 55.5 mmTinta l2, the printed circuit board in 3D

Battery-powered e-paper sign: room signage, sensor graphs, home automation, or anything over Wi-Fi. Wakes by real-time clock, NFC tap, or button. Raspberry Pi Pico W firmware, custom PCB, and 3D-printed case included.

Size
47.2 × 55.5 mm
Copper layers
2
Thickness
1.6 mm
Parts
60
Nets
55
Pads
247
Tracks, vias
490, 66
Routed
Yes
KiCad
KiCad 9.0 (file 20241229)
Created
6 Apr 2025
Updated
27 Oct 2026

Overview

Tinta l2 is an open-source printed circuit board by c0de111, from the c0de111/tinta repository on GitHub, published under the Apache-2.0 licence. It is a 2-layer board of 47.2 × 55.5 mm with 60 parts on 55 nets, routed with 490 tracks and 66 vias.

It is built around the BMP581, RV-3028-C7 and BAT54J, with the JZ400 and SC0918 among its other parts. Its parts include 22 resistors, 13 capacitors, 11 diodes, 5 connectors and 4 transistors. It belongs with the home automation and IoT and radio and wireless boards and the RP2040 boards of this library.

Main components

5

README

hardware/circuit/README.md

Tinta Circuit

This directory contains the schematic and hardware documentation for the Tinta PCB. There is also a former hand-solderable design, see legacy/.


Overview

The Tinta circuit is designed for long-term operation (years) using 3×AAA or 3×AA batteries. It uses a real-time clock for accurate timekeeping and wake-up scheduling — either a DS3231 or RV-3028, detected automatically at runtime — combined with MOSFET-based power switching to fully disconnect the controller between wake cycles. During wake cycles, information is fetched via Wi-Fi and displayed on an ePaper display that retains its content without power.

Key features:

  • MOSFET power switching — Pico W fully disconnected during sleep, drawing only µA from the RTC and passives
  • Dual RTC support — DS3231 or RV-3028, auto-detected at runtime via I2C
  • NFC wake and control — ST25 chip powered by RF field when Pico is off
  • Board identity straps — 4-bit hardware profile (GP0–GP3) selects display type and hardware variant at boot
  • Push button inputs — manual wake, page selection, and on-demand fetches

pcb


Concept, Functional Blocks and Components

The power control concept works as follows: in the default (sleep) state Q1 is off and the Pico W has no supply voltage. Three sources can wake the system: an RTC alarm (DS3231 or RV-3028 via their INT pin), a pushbutton, or an NFC field event from the ST25DV. Once Q1 switches on, the Pico pulls down the gate of Q2 to hold power, executes its program, sets the next RTC alarm, and cuts power by releasing Q1 — returning to the µA idle state.

The ePaper display is controlled via SPI; RTC and NFC communicate via I2C.

Manual user interaction:

  • Pushbuttons #0–3: on current boards the buttons are diode-OR'd into the wake line, so any of the four wakes the device. On earlier boards only #0 wakes it.
  • Pushbuttons #1–3: also read once at startup to select the page — hold them while the device powers on. Page selection works the same on both board generations.
  • ST25 NFC: write an NFC message to the tag to trigger a wake or page selection
Tinta board - for details use KiCADschematic - for details use KiCAD
Tinta board – for details use KiCADschematic – PDF · for details use KiCAD

Board Identity Straps (R8–R11)

Four 10k pull-up resistors on GP0–GP3 encode the board profile as a 4-bit code read at boot to determine display type and hardware configuration.

  • Populated resistor = bit reads 1
  • Empty pad = bit reads 0 (firmware applies internal pull-down)
CodeR8R9R10R11DisplayCoin CellBoard
0x00————?yesLegacy / unstrapped
0x0110k———7.5"yesL1, 7.5"
0x02—10k——4.2"yesL1, 4.2"
0x0310k10k——7.5"yesL2, 7.5"
0x04——10k—4.2"yesL2, 4.2"
0x0510k—10k—7.5"noL2 minimal (no coin cell)
0x06—10k10k—4.2"noL2 minimal 4.2" (no coin cell)
0x07–0x0F——————(reserved)

I2C devices (RTC, NFC) are auto-detected via bus scan — not encoded in straps. Buttons and LED do not require strap encoding.


RTC Backend Selection

The firmware auto-detects the RTC at runtime via I2C bus scan:

  • DS3231 at 0x68 — classic, high-accuracy, moderate power (~200 µA active)
  • RV-3028 at 0x52 — ultra-low power (~45 nA idle), AMBA/Micro Crystal

Both provide alarm-based wake scheduling. The RV-3028 improves idle power budget significantly for high-frequency refresh use cases.


NFC Integration (ST25DV04KC)

The ST25DV NFC tag is powered from the RF field when the Pico is off (0 mA from battery). Its GPIO-controlled VCC line (GP18) is held low during sleep. An NFC write from a phone or reader pulls the ST25 INT line, which feeds into the wake circuit — waking the device without a button press. The firmware reads the NFC payload at startup to determine the requested page or action.


Power Consumption and Estimations

Typical battery life can be estimated with power_consumption_estimate.py. Edit the parameters at the top of the script and run it; the two examples below are its output.

Power Consumption Estimate for 4.2"

Parameters taken from a real deployment — the field unit whose discharge curve is shown below.

Used Parameters

  • Idle current: 5 µA (RTC consumption, residual current via pullups and others)
  • Activation consumption: 0.250 mAh per wake-up (same for 4.2" and 7.5", measured — the ePaper refresh is not a significant contribution)
  • LED consumption (included above): 0.021 mAh per wake-up
  • Wake-up schedule: 18.3× per day, 5 days per week
  • Battery self-discharge: 2.5 % per year
  • Battery capacity: 1200 mAh (AAA batteries)

Annualized Consumption Rates (approximate)

  • Idle: 43.8 mAh/year
  • Active (wake-ups): 1192.8 mAh/year

⇒ Estimated battery lifetime: 350 days (≈ 0.96 years)

Yearly Breakdown

YearSelf-Discharge (mAh)Fixed Consumption (mAh)
114.321185.75

Measured battery discharge of a 4.2-inch field unit over 393 days

The same unit, measured: 393 days and 5142 wake cycles on one set of AAA cells, logged at every wake. The scheduled interval held a median of exactly 2700.0 s, in each of the 13 months, with a p95 jitter of about 7 s that did not change as the pack drained; the discharge fits a straight line at R² = 0.987. One interruption occurred in the whole period, 66 hours in January 2026, appearing at the same time in the logs of five other units on the same server.


Power Consumption Estimate for 7.5"

Used Parameters

  • Idle current: 5 µA (RTC consumption, residual current via pullups and others)
  • Activation consumption: 0.250 mAh per wake-up (same for 4.2" and 7.5", measured — the ePaper refresh is not a significant contribution)
  • LED consumption (included above): 0.021 mAh per wake-up
  • Wake-up schedule: 12× per day, 5 days per week
  • Battery self-discharge: 2.5 % per year
  • Battery capacity: 2500 mAh (AA batteries)

Annualized Consumption Rates (approximate)

  • Idle: 43.8 mAh/year
  • Active (wake-ups): 782.1 mAh/year

⇒ Estimated battery lifetime: 1065 days (≈ 2.92 years)

Yearly Breakdown

YearSelf-Discharge (mAh)Fixed Consumption (mAh)
151.48826.80
229.82826.80
38.76757.20

RTC Backup Supply

Some boards carry a coin cell (BT1, e.g. CR1225) feeding the RTC's VBAT pin through a diode-OR (D1, D2) alongside the main battery. It is optional and no longer fitted: Tinta re-syncs the RTC from the network at every wake cycle, so the RTC only has to hold time between cycles, which the main cells do. The board identity straps record which variant a given board is.


Key Components

  • Q1: P-channel MOSFET — main power switch, disconnects Pico during sleep
  • Q2: N-channel MOSFET — power latch (Pico holds itself on)
  • U1: Raspberry Pi Pico W — main controller (Wi-Fi, ePaper, I2C, SPI)
  • U2: DS3231SN or RV-3028 — RTC, alarm wake, I2C (auto-detected)
  • U3: ST25DV04KC — NFC tag, ISO 15693, I2C, RF-powered when Pico off
  • R8–R11: Board identity straps (10k pull-ups on GP0–GP3)
  • D1/D2, BT1: optional diode-OR and coin cell for RTC backup (not fitted on current boards)

Files

  • tinta_l2.pdf — schematic PDF (no KiCad required)
  • tinta_l2.kicad_sch — main schematic
  • tinta_l2.kicad_pcb — PCB layout
  • tinta_l2_BOM.csv — bill of materials
  • wake_sources.kicad_sch — wake circuit sub-schematic
  • optional_i2c_device.kicad_sch — optional I2C device sub-schematic
  • power_consumption_estimate.py — battery lifetime model (edit parameters, run)
  • project-libraries/ — custom KiCad symbols and footprints

Legacy Design

A former hand-solderable design is preserved in legacy/. It supports DS3231 only and has no NFC or identity straps, but can be assembled by an experienced solderer without SMD equipment.


License

This hardware is published under the CERN-OHL-S v2 license.

Parts

60
QtyValueFootprintReferences
10BAT54JDiode_SMD:D_SOD-323_HandSolderingD1, D2, D3, D4, D5, D6, D7, D8, D10, D11
9100nFCapacitor_SMD:C_0805_2012MetricC2, C3, C4, C5, C6, C7, C8, C10, C13
61kResistor_SMD:R_0805_2012Metric_Pad1.20x1.40mm_HandSolderR2, R13, R14, R15, R16, R21
410kResistor_SMD:R_0805_2012Metric_Pad1.20x1.40mm_HandSolderR8, R9, R10, R11
4200kResistor_SMD:R_0805_2012Metric_Pad1.20x1.40mm_HandSolderR4, R5, R17, R18
22602Package_TO_SOT_SMD:SOT-23_HandsolderingQ1, Q3
23904Package_TO_SOT_SMD:SOT-23Q2, Q4
24k7Resistor_SMD:R_0805_2012Metric_Pad1.20x1.40mm_HandSolderR6, R7
250kResistor_SMD:R_0805_2012Metric_Pad1.20x1.40mm_HandSolderR3, R22
110pFCapacitor_SMD:C_0805_2012MetricC11
11MResistor_SMD:R_0805_2012Metric_Pad1.20x1.40mm_HandSolderR1
11N4148Diode_SMD:D_SOD-323_HandSolderingD12
1220RResistor_SMD:R_0805_2012Metric_Pad1.20x1.40mm_HandSolderR12
122RResistor_SMD:R_0805_2012Metric_Pad1.20x1.40mm_HandSolderR20
122nFCapacitor_SMD:C_0805_2012MetricC1
12M2Resistor_SMD:R_0805_2012Metric_Pad1.20x1.40mm_HandSolderR19
14.7uFCapacitor_SMD:C_1206_3216MetricC9
1BMP581Tinta:BMP581U2
1Battery 3xAA/AAAConnector_PinHeader_2.54mm:PinHeader_1x02_P2.54mm_VerticalJ3
1Coin Cell (RTC Backup)Battery:BatteryHolder_LINX_BAT-HLD-012-SMTBT1
1JZ400JZ400:JZ400C12
1RV-3028Package_SON:MicroCrystal_C7_SON-8_1.5x3.2mm_P0.9mmU4
1SC0918Module_RaspberryPi_Pico:RaspberryPi_Pico_W_SMDpico1
1ST25ST25DV04KC-IE6S3:SOIC127P600X175-8NU5
1antennaConnector_PinHeader_2.54mm:PinHeader_1x02_P2.54mm_VerticalJ2
1connector epaperConnector_PinHeader_2.54mm:PinHeader_1x08_P2.54mm_VerticalJ1
1pushbuttonsConnector_JST:JST_SH_SM05B-SRSS-TB_1x05-1MP_P1.00mm_HorizontalJ6
1status LEDConnector_PinHeader_2.54mm:PinHeader_1x02_P2.54mm_VerticalJ7

More from c0de111/tinta

1
  • 2 layers47.2 × 55.5 mmInki, the printed circuit board in 3D

    Inki

    c0de111/tinta

    Battery-powered e-paper sign: room signage, sensor graphs, home automation, or anything over Wi-Fi. Wakes by real-time clock, NFC tap, or button. Raspberry Pi Pico W firmware, custom PCB, and 3D-printed case included.

    54 parts39Apache-2.0

Similar boards

  • 2 layers52.7 × 39.6 mmNFC harness V0, the printed circuit board in 3D

    NFC harness V0

    c0de111/NFC_exploration

    NFC exploration with st25 and raspberry pico

    22 parts3
  • 4 layers65 × 56 mmKingfisher hat, the printed circuit board in 3D

    Kingfisher hat

    westphae/kingfisher

    Go flight data recorder for a turbonormalized Beech Bonanza V35B, running on a Raspberry Pi 5

    53 parts
  • 4 layers60 × 60 mmRocket payload, the printed circuit board in 3D

    Rocket payload

    Gupatron/Gupsfirstpcb

    This is the first pcb that I will manufacture and intend to use for teleop usecases in my personal projects.

    138 parts
  • 2 layers87.9 × 98.7 mmBitdoglab smd, the printed circuit board in 3D

    Bitdoglab smd

    BitDogLab/BitDogLab

    Open-source educational hardware for embedded systems, programming, electronics, and physical computing.

    138 parts203
  • 2 layers87 × 84.1 mmOpenACE V0.0.2, the printed circuit board in 3D

    OpenACE V0.0.2

    gatasConspicuity/gatas

    eConspicuity with support for ADS-L, OGN, FLARM, FANET for General Aviation

    80 parts26GPL-3.0
  • 2 layers41 × 82.1 mmWater Meter PCB, the printed circuit board in 3D

    Water Meter PCB

    dgomes/pico_w_water_meter

    Water Meter using Raspberry Pico W

    6 parts24
  • 2 layers182 × 105 mmPocketComputerUniversalInterface, the printed circuit board in 3D

    PocketComputerUniversalInterface

    N1UGK/PCUI_Public

    Collection of Programs and Utilities for the Pocket Computer Universal Interface

    161 parts15

Questions

How big is the Tinta l2 PCB?

It measures 47.2 × 55.5 mm and has 2 copper layers, 1.6 mm thick.

What parts does the Tinta l2 use?

60 parts, built around the BMP581, RV-3028-C7, BAT54J and JZ400. 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 Tinta l2 KiCad files?

From the c0de111/tinta repository on GitHub, at the commit this page was made from: the board is hardware/circuit/tinta_l2.kicad_pcb and its schematic hardware/circuit/legacy/inki.kicad_sch. PCBKit opens the board in the browser, with nothing to install.

Can I use the Tinta l2 design in my own project?

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