
Tinta l2
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.

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.
Inki 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 54 parts on 58 nets, routed with 586 tracks and 53 vias.
It is built around the BMP581, DS3231MZ+ and RV-3028-C7, with the BAT54J, MMBT3904 and TSM260P02CX6 among its other parts. Its parts include 22 resistors, 8 capacitors, 8 diodes, 6 connectors and 4 transistors. It belongs with the home automation and IoT and radio and wireless boards and the RP2040 boards of this library.
This directory contains the schematic and hardware documentation for the Tinta PCB. There is also a former hand-solderable design, see legacy/.
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:

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:
![]() | ![]() |
| Tinta board – for details use KiCAD | schematic – PDF · for details use KiCAD |
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.
10 (firmware applies internal pull-down)| Code | R8 | R9 | R10 | R11 | Display | Coin Cell | Board |
|---|---|---|---|---|---|---|---|
| 0x00 | — | — | — | — | ? | yes | Legacy / unstrapped |
| 0x01 | 10k | — | — | — | 7.5" | yes | L1, 7.5" |
| 0x02 | — | 10k | — | — | 4.2" | yes | L1, 4.2" |
| 0x03 | 10k | 10k | — | — | 7.5" | yes | L2, 7.5" |
| 0x04 | — | — | 10k | — | 4.2" | yes | L2, 4.2" |
| 0x05 | 10k | — | 10k | — | 7.5" | no | L2 minimal (no coin cell) |
| 0x06 | — | 10k | 10k | — | 4.2" | no | L2 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.
The firmware auto-detects the RTC at runtime via I2C bus scan:
Both provide alarm-based wake scheduling. The RV-3028 improves idle power budget significantly for high-frequency refresh use cases.
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.
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.
Parameters taken from a real deployment — the field unit whose discharge curve is shown below.
Used Parameters
Annualized Consumption Rates (approximate)
⇒ Estimated battery lifetime: 350 days (≈ 0.96 years)
Yearly Breakdown
| Year | Self-Discharge (mAh) | Fixed Consumption (mAh) |
|---|---|---|
| 1 | 14.32 | 1185.75 |
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.
Used Parameters
Annualized Consumption Rates (approximate)
⇒ Estimated battery lifetime: 1065 days (≈ 2.92 years)
Yearly Breakdown
| Year | Self-Discharge (mAh) | Fixed Consumption (mAh) |
|---|---|---|
| 1 | 51.48 | 826.80 |
| 2 | 29.82 | 826.80 |
| 3 | 8.76 | 757.20 |
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.
tinta_l2.pdf — schematic PDF (no KiCad required)tinta_l2.kicad_sch — main schematictinta_l2.kicad_pcb — PCB layouttinta_l2_BOM.csv — bill of materialswake_sources.kicad_sch — wake circuit sub-schematicoptional_i2c_device.kicad_sch — optional I2C device sub-schematicpower_consumption_estimate.py — battery lifetime model (edit parameters, run)project-libraries/ — custom KiCad symbols and footprintsA 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.
This hardware is published under the CERN-OHL-S v2 license.
| Qty | Value | Footprint | References |
|---|---|---|---|
| 8 | 100nF | Capacitor_SMD:C_0805_2012Metric | C1, C2, C3, C4, C5, C6, C7, C8 |
| 7 | BAT54J | Diode_SMD:D_SOD-323_HandSoldering | D1, D3, D4, D5, D6, D7, D8 |
| 6 | 1k | Resistor_SMD:R_0805_2012Metric_Pad1.20x1.40mm_HandSolder | R5, R10, R11, R12, R13, R21 |
| 5 | Conn_01x02_Socket | Connector_PinHeader_2.54mm:PinHeader_1x02_P2.54mm_Vertical | J2, J3, J4, J5, J7 |
| 4 | 10k | Resistor_SMD:R_0805_2012Metric_Pad1.20x1.40mm_HandSolder | R17, R18, R19, R20 |
| 4 | 200k | Resistor_SMD:R_0805_2012Metric_Pad1.20x1.40mm_HandSolder | R1, R7, R8, R14 |
| 2 | 4k7 | Resistor_SMD:R_0805_2012Metric_Pad1.20x1.40mm_HandSolder | R3, R4 |
| 2 | 50k | Resistor_SMD:R_0805_2012Metric_Pad1.20x1.40mm_HandSolder | R9, R22 |
| 2 | MMBT3904 | Package_TO_SOT_SMD:SOT-23 | Q2, Q4 |
| 2 | TSM260P02CX | Package_TO_SOT_SMD:SOT-23_Handsoldering | Q1, Q3 |
| 1 | 1M | Resistor_SMD:R_0805_2012Metric_Pad1.20x1.40mm_HandSolder | R2 |
| 1 | 1N4148WS | Diode_SMD:D_SOD-323_HandSoldering | D2 |
| 1 | 220R | Resistor_SMD:R_0805_2012Metric_Pad1.20x1.40mm_HandSolder | R6 |
| 1 | 22R | Resistor_SMD:R_0805_2012Metric_Pad1.20x1.40mm_HandSolder | R16 |
| 1 | 2M2 | Resistor_SMD:R_0805_2012Metric_Pad1.20x1.40mm_HandSolder | R15 |
| 1 | BMP581 | inki:BMP581 | U2 |
| 1 | Battery 3,7V | Battery:BatteryHolder_LINX_BAT-HLD-012-SMT | battery_RTC1 |
| 1 | DS3231M | Package_SO:SOIC-16W_7.5x10.3mm_P1.27mm | U1 |
| 1 | RV-3028-C7 | Package_SON:MicroCrystal_C7_SON-8_1.5x3.2mm_P0.9mm | U3 |
| 1 | SC0918 | PICO:MODULE_SC0918 | pico1 |
| 1 | SW_DIP_x04 | Button_Switch_SMD:SW_DIP_SPSTx04_Slide_9.78x12.34mm_W8.61mm_P2.54mm | SW1 |
| 1 | connector epaper | Connector_PinHeader_2.54mm:PinHeader_1x08_P2.54mm_Vertical | J1 |
It measures 47.2 × 55.5 mm and has 2 copper layers, 1.6 mm thick.
54 parts, built around the BMP581, DS3231MZ+, RV-3028-C7 and BAT54J. 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.
From the c0de111/tinta repository on GitHub, at the commit this page was made from: the board is hardware/circuit/legacy/inki.kicad_pcb and its schematic hardware/circuit/legacy/inki.kicad_sch. PCBKit opens the board in the browser, with nothing to install.
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).

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.


henriheimann/prosper3-monitor
Repository of the Prosper III Environment Monitor project ☀️🌱

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

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

zynthian/zynthian-hw
Zynthian hardware stuff: PCBs, schemes, parts specifications, pin assignment, ...


AFLProjects/DIY-Smart-Watch
DIY Smart Watch with ATMEGA32U4 , ST7789 SPI display and RV3028-C7 Extreme Low Power RTC Module

eshelton328/forge
Hardware design monorepo with software-grade CI/CD. KiCad PCB projects with automated ERC/DRC, multi-fab rule validation, schematic & BOM checks, and auto-generated board documentation.