
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.

NFC exploration with st25 and raspberry pico
NFC harness V0 is an open-source printed circuit board by c0de111, from the c0de111/NFC_exploration repository on GitHub. It is a 2-layer board of 52.7 × 39.6 mm with 22 parts on 41 nets, routed with 108 tracks and 0 vias.
It is built around the ST25DV04KC-IE6S3, JZ400 and MMBT3904, with the TSM260P02CX6 among its other parts. Its parts include 7 resistors, 6 capacitors, 4 connectors, 2 transistors and 1 IC. It belongs with the radio and wireless boards and the RP2040 boards of this library.
Sandbox repo to explore ST25DV04KC (ISO15693 / NFC-V) tap-to-trigger flows for power control and waking circuits such as inki.
Build a small, reproducible test platform (ST25DV04KC + Raspberry Pi Pico/RP2040 + antenna + simple enclosure) to validate:
V_EH wake behavior in the real caseGP20/GP21), with ST25 power switched by GP18.INKI request payloads from the last user-memory slot (0x01F0 on ST25DV04KC).0x11 -> LED1 slow blink0x12 -> LED1 fast blink (same onboard LED)0x01 -> legacy alias mapped to LED1 slow blinkINKI frames are ignored (to avoid partial-write races).RF field goes OFF (reduces interference with phone-side readback).GP28) and auto-released after NFC_AUTO_POWER_OFF_MS (default 10000 ms).A dedicated firmware (nfc_tune, source: firmware/src/tune_main.c) for real-time RF energy-harvesting characterization. It samples the ST25DV V_EH output via Pico ADC and renders a live scrolling bar graph in the terminal showing harvested power delta above baseline.
V_EH pin (default ADC1 = GP27), averaged and EMA-smoothedEH_EN, EH_ON, FIELD_ON, VCC_ON) via I2Cmake firmware-tune # build nfc_tune
# then either:
make firmware-tune-flash # flash via SWD
# or drag-and-drop firmware/build/nfc_tune.uf2 in BOOTSEL modesudo tio /dev/ttyACM0V_EH delta in mV, RF ON/OFF transitions, session peak, and EH register state.NFC_harness_V0) and re-tap to compare coupling.Ctrl+C to stop.All defaults are in firmware/CMakeLists.txt:
NFC_TUNE_ADC_INPUT – ADC channel (default 1 = GP27)NFC_TUNE_FIELD_ON_MV / NFC_TUNE_FIELD_OFF_MV – RF detection hysteresis thresholds (default 9 / 4 mV)NFC_TUNE_GRAPH_WIDTH / NFC_TUNE_GRAPH_HEIGHT – terminal graph dimensions (default 72x20)NFC_TUNE_GRAPH_MAX_MV – vertical scale (default 3000 mV)NFC_TUNE_SAMPLE_COUNT / NFC_TUNE_REPORT_INTERVAL_MS – samples per report and update rateNFC_harness_V0)Q1 (TSM260P02CX, P-MOS) is the high-side power switch:
VbattVSYSGPO_(OPEN_DRAIN) and the Q1 gate share the same control net (wake/power-on net).R4=1M pull-up to VbattC5=22n to GND (pulse shaping / hold)GPIO28 (NFC_POWER_HOLD_PIN) -> R5=100k -> Q2 baseR9=50k pulls base to GNDQ2 collector also sinks the same gate-control netGPIO19 is unconnected.0x11 slow, 0x12 fast) use the firmware power-LED output (onboard Pico/Pico W path).NFC_STATUS_LED_PIN (default GP15) is currently not routed to a dedicated onboard LED footprint here (external LED/wire may be needed).Vbatt connected, no USB, Pico unpowered).INKI payload (including opcode byte) over NFC-V into ST25 EEPROM, while Pico can still be fully off.GPO low on configured wake event (RF_WRITE), pulling Q1 gate low and powering Pico.GPIO28 high to latch power through Q2.GP18NFC_AUTO_POWER_OFF_MS, default 10000 ms; re-armed on accepted commands).Note:
INKI request is found after wake and RF is already OFF, firmware releases the power latch immediately.docs/context.md – running notes, decisions, history, and solved problemsfirmware/ – Pico SDK firmware scaffold (RP2040) for ST25 I²C exploration
src/ app entry (main.c harness, tune_main.c tuning) and bus adapterthird_party/st25dv/ vendored ST25DV driver (git subtree)scripts/ build/flash/reset helperscmake/ Pico SDK import helperpcb/NFC_harness_V0/ – KiCad project (schematic, layout, CAM profile)pcb/tools/run_pcb2gcode.sh – shared pcb2gcode runnerpcb/components/ + pcb/project-libraries/ – KiCad symbols/footprints (includes ST25DV package lib submodule)datasheet/ – ST25DV04KC datasheet + app notesandroid/ – NFC‑V test apps (writer + hello) (not needed for Pico-only workflow)make firmware (uses PICO_SDK_PATH, default $HOME/pico/pico-sdk).firmware/build/nfc_harness.uf2 to Pico in BOOTSEL mode, ormake firmware-flash (OpenOCD + CMSIS-DAP).firmware/src/main.c (and future helpers), rebuild, and re‑flash.pcb/tools/run_pcb2gcode.sh -b NFC_harness_V0 to regenerate toolpaths.# from repo root (recommended)
make firmware
# or inside firmware/
cd firmware
./scripts/build.sh # expects $PICO_SDK_PATH (defaults to $HOME/pico/pico-sdk)More detail (pin overrides, UF2 path, picotool toggles): see firmware/README.md.
Notes:
uf2conv.py (Microsoft UF2 tool) on first run and converts nfc_harness.bin → nfc_harness.uf2.-DPICO_NO_PICOTOOL=OFF in cmake if you prefer the picotool UF2/signing path.Clean build artifacts:
make clean # removes firmware/build onlyFlash options:
firmware/build/nfc_harness.uf2 to the Pico mass‑storage device (BOOTSEL).cd firmware
./scripts/flash.shmake firmware – configure & build firmware into firmware/build/make firmware-tune – build dedicated antenna tuning firmware (nfc_tune)make firmware-flash – flash over SWD (OpenOCD + CMSIS‑DAP)make firmware-tune-flash – flash tuning firmware ELF over SWDmake clean – remove firmware/build/ onlyFrom repo root:
pcb/tools/run_pcb2gcode.sh -b NFC_harness_V0The profile lives at pcb/NFC_harness_V0/cam/pcb2gcode/profiles/default.millprojects and uses repo-relative paths.
J3 (AC0/AC1) on the PCB.make firmwarefirmware/build/nfc_harness.uf2 to Pico in BOOTSEL mode (or use SWD).sudo tio /dev/ttyACM0inki):
LED1 Slow or LED2 FastExpected runtime log pattern:
RF field: ONRequest@0x01F0: ...INKI request: version=... opcode=... duration_min=...Command applied: opcode=... -> ...Queued clear after RF field OFFRF field: OFFCleared request after RF OFF (...)Auto power-off: GP28 -> LOWSample serial log (successful run):
[INFO] RF field: OFF
[INFO] RF field: ON
[INFO] Request@0x01F0: 49 4E 4B 49 01 11 3C 00 ...
[OK] INKI request: version=1 opcode=0x11 duration_min=60 unix=... nonce=...
[OK] Command applied: opcode=0x11 -> LED1 slow blink
[INFO] Queued clear after RF field OFF
[INFO] RF field: OFF
[OK] Cleared request after RF OFF (16 bytes @ 0x01F0, attempts=1, 8ms)
[WARN] Auto power-off: GP28 -> LOW| Qty | Value | Footprint | References |
|---|---|---|---|
| 2 | 0 | Fuse:Fuse_1206_3216Metric_Pad1.42x1.75mm_HandSolder | R3, R6 |
| 2 | 100n | Capacitor_SMD:C_0805_2012Metric | C1, C13 |
| 2 | 4k7 | Fuse:Fuse_1206_3216Metric_Pad1.42x1.75mm_HandSolder | R1, R2 |
| 1 | 100k | Fuse:Fuse_1206_3216Metric_Pad1.42x1.75mm_HandSolder | R5 |
| 1 | 10p | Capacitor_SMD:C_0805_2012Metric | C2 |
| 1 | 1M | Resistor_SMD:R_0805_2012Metric_Pad1.20x1.40mm_HandSolder | R4 |
| 1 | 22n | Capacitor_SMD:C_0805_2012Metric | C5 |
| 1 | 4.7u | Capacitor_SMD:C_1206_3216Metric | C4 |
| 1 | 50k | Fuse:Fuse_1206_3216Metric_Pad1.42x1.75mm_HandSolder | R9 |
| 1 | JZ400 | JZ400:JZ400 | C3 |
| 1 | MMBT3904 | Package_TO_SOT_SMD:SOT-23 | Q2 |
| 1 | RaspberryPi_Pico_W | Module_RaspberryPi_Pico:RaspberryPi_Pico_W_SMD | A1 |
| 1 | ST25DV04KC-IE6S3 | ST25DV04KC-IE6S3:SOIC127P600X175-8N | IC1 |
| 1 | SW_Push | Taster:Taster 9313 | SW1 |
| 1 | TSM260P02CX | Package_TO_SOT_SMD:SOT-23_Handsoldering | Q1 |
| 1 | always on | Connector_PinHeader_2.54mm:PinHeader_1x02_P2.54mm_Vertical | J4 |
| 1 | antenna | Connector_PinHeader_2.54mm:PinHeader_1x02_P2.54mm_Vertical | J3 |
| 1 | battery | Connector_PinHeader_2.54mm:PinHeader_1x02_P2.54mm_Vertical | J2 |
| 1 | energy harvest | Connector_PinHeader_2.54mm:PinHeader_1x02_P2.54mm_Vertical | J1 |
It measures 52.7 × 39.6 mm and has 2 copper layers, 1.6 mm thick.
22 parts, built around the ST25DV04KC-IE6S3, JZ400, MMBT3904 and TSM260P02CX6. 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/NFC_exploration repository on GitHub, at the commit this page was made from: the board is pcb/NFC_harness_V0/NFC_harness_V0.kicad_pcb and its schematic pcb/NFC_harness_V0/NFC_harness_V0.kicad_sch. PCBKit opens the board in the browser, with nothing to install.
Its repository states no licence, so its author keeps all rights: ask c0de111 before reusing the design.

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 ☀️🌱




WOOWTECH/Woow_zigbee_fresh_air_pcb
WO_30109 Zigbee 新風控制器 PCB(KiCad 10,git 版控;V1.3 重繪 + V2.0 安規改版)

TalismanDesign/PocketMage_PDA
An E-Ink PDA device using the ESP32 S3.