

Pot pulse
USB-powered ESP32-C3 plant-shelf monitor for home growers to track soil moisture, light, and microclimate trends in a local dashboard without cloud accounts or automatic watering.
- Size
- 70 × 50 mm
- Copper layers
- 4
- Thickness
- 1.6 mm
- Parts
- 60
- Nets
- 27
- Pads
- 224
- Tracks, vias
- 571, 95
- Pours
- 7
- Routed
- Yes
- KiCad
- KiCad 9.0 (file 20241229)
- Created
- 5 Sep 2026
- Updated
- 14 Sep 2026
Overview
Pot pulse is an open-source printed circuit board by rwrife, from the rwrife/pot-pulse repository on GitHub, published under the MIT licence. It is a 4-layer board of 70 × 50 mm with 60 parts on 27 nets, routed with 571 tracks and 95 vias.
It is built around the ESP32-C3-MINI-1 and VEML7700-TT. Its parts include 13 capacitors, 12 resistors, 7 ICs, 6 connectors and 1 diode. It belongs with the home automation and IoT boards and the ESP32 and RISC-V boards of this library.
Main components
2ESP32-C3-MINI-1
--40℃~+81℃ -89dBm 2.4GHz 350mA 3V~3.6V 82mA ESP32-C3 Chip On-board PCB Antenna UART - WiFi Modules ROHSRF CrazyWiFi ModulesVEML7700-TT
SMD-4P-25℃~+85℃ 120klx 16bit 2.35mm 2.5V~3.6V 3mm 6.8mm I2C Light Intensity Low power/sleep mode、Spectral correction/filtering、High dynamic range measurement、Adjustable gain control、Interrupt/event trigger、Built-in temperature compensation SMD-4P Ambient Light Sensors ROHSVishay IntertechnologyAmbient Light Sensors
README
hardware/kicad/README.mdPot Pulse KiCad project
This directory contains the editable KiCad 9 project for the USB-powered Pot Pulse four-zone sensor node: first-pass schematic (issue #3) and first-pass PCB (issue #5).
Files
pot-pulse.kicad_pro— KiCad project settings.pot-pulse.kicad_sch— editable schematic source of truth.pot-pulse.kicad_pcb— editable first-pass PCB (generated bybuild_pcb.py, routed via FreeRouter, DRC-adjudicated).lib/pot-pulse.kicad_sym— project symbols whose pin maps were transcribed from the manufacturer documents cited in../component-selection.md.lib/pot-pulse.pretty/— project land patterns (ESP32-C3-MINI-1, VEML7700) transcribed from the datasheets cited in../component-selection.md; generated bygenerate_footprints.py.fp-lib-table/sym-lib-table— project library registration so the board opens on any machine with KiCad 9.generate_schematic.py— reproducible first-capture generator; the generated schematic remains editable in KiCad.validate_schematic.py— static acceptance checks for required parts, properties, nets, pin mappings, test access, and the native ERC summary.netlist_to_json.py— exportsreports/pcb-input/{netlist,components}.json(placement/routing input data derived from the schematic netlist).build_pcb.py— generatespot-pulse.kicad_pcbthrough the pcbnew API (outline, placement table with courtyard/edge asserts, net classes, RF rule areas, pours, text).generate_footprints.py— generates the project land patterns from datasheet dimensions.route_driver.py— Specctra DSN export / SES import driver (import saves immediately before probing).dsn_strip_inner_layers.py— keeps the autorouter on F.Cu/B.Cu so the inner planes stay solid.rip_up_dangling.py/rip_up_zone.py/rip_up_congested.py— stranded-fragment and surgical rip-up helpers between router passes.close_stubs.py— deterministic final stub closer (collision-capsule tested;--dryreports LEFT pairs verbatim).fill_zones.py— headless "Fill All Zones".silk_hygiene.py— post-route silkscreen cleanup (hides dense-passive refs, shrinks TP/test refs, enforces 0.15 mm text stroke).reload_probe.py/check_placement_vs_table.py/board_inventory.py/list_plane_tracks.py/lane_blockers.py— verification probes (reload integrity, placement-vs-table drift, copper inventory, residual-gap diagnosis).reports/erc.rpt— native KiCad 9 electrical-rules report.reports/schematic-analysis.txt— supplemental static analyzer output.reports/pot-pulse.net— netlist export feedingnetlist_to_json.py.reports/drc-placement.json— placement-stage native DRC (pre-routing).reports/routing/— per-pass DSN/SES/DRC evidence; eachpassN-drc.jsonis thekicad-clitruth for that pass.reports/drc-final.json— committed final DRC state forpot-pulse.kicad_pcb.
Layout intent, keepout strategy, grounding approach, assembly/testability notes, and documented first-pass gaps: ../pcb-design-notes.md.
Reproduce and verify
The host needs KiCad 9 symbol libraries and Python 3.11+:
python3 -m venv /tmp/pot-pulse-kicad-venv
/tmp/pot-pulse-kicad-venv/bin/pip install -r hardware/kicad/requirements.txt
KICAD_SYMBOL_DIR=/usr/share/kicad/symbols \
/tmp/pot-pulse-kicad-venv/bin/python hardware/kicad/generate_schematic.py
kicad-cli sch erc -o hardware/kicad/reports/erc.rpt hardware/kicad/pot-pulse.kicad_sch
KICAD_SYMBOL_DIR=/usr/share/kicad/symbols \
/tmp/pot-pulse-kicad-venv/bin/python hardware/kicad/validate_schematic.py \
--erc hardware/kicad/reports/erc.rptThe PCB steps need the pcbnew Python bindings (KiCad container image); all
scripts run inside hardware/kicad/:
kicad-cli sch export netlist pot-pulse.kicad_sch -o reports/pot-pulse.net
python3 netlist_to_json.py
python3 build_pcb.py # asserts courtyard/edge placement
python3 reload_probe.py # reload integrity + pad-net probe
python3 check_placement_vs_table.py # board vs build_pcb.py table
python3 route_driver.py export reports/routing/passN.dsn
# host: java -Djava.awt.headless=true -jar freerouting-2.4.1.jar \
# -de passN-2l.dsn -do passN.ses -mp 12 -gui.enabled=false (after dsn_strip_inner_layers.py)
python3 route_driver.py import reports/routing/passN.ses
python3 rip_up_dangling.py && python3 fill_zones.py && python3 silk_hygiene.py
python3 close_stubs.py --drc reports/routing/passN-drc.json # deterministic final stubs
kicad-cli pcb drc --severity-error --severity-warning --format json \
--output reports/drc-final.json pot-pulse.kicad_pcbThe repository's headless kicad-cli wrapper runs KiCad 9 in a container. Committed reports are generated from the editable sources, not hand-authored.
Evidence boundary
Schematic files provide static schematic and native ERC evidence. The PCB
provides static layout + native DRC evidence plus autorouter-derived routing
provenance. These files do not provide simulation, assembled-board, EMC,
environmental, field, or calibration evidence. RF keepout geometry is
datasheet-derived; measured RF performance is bench evidence not yet claimed.
USB full-speed impedance is not yet stackup-verified (documented gap in
../pcb-design-notes.md).
Parts
60| Qty | Value | Footprint | References |
|---|---|---|---|
| 16 | TestPoint_Pad_D1.5mm | TestPoint_Pad_D1.5mm | TP1, TP2, TP3, TP4, TP5, TP6, TP7, TP8, TP9, TP10, TP11, TP12, TP13, TP14, TP15, TP16 |
| 12 | R_0603_1608Metric | R_0603_1608Metric | R1, R2, R3, R4, R5, R6, R7, R8, R9, R10, R11, R12 |
| 10 | C_0603_1608Metric | C_0603_1608Metric | C2, C5, C6, C7, C8, C9, C10, C11, C12, C13 |
| 4 | JST_PH_S3B-PH-K_1x03_P2.00mm_Horizontal | JST_PH_S3B-PH-K_1x03_P2.00mm_Horizontal | J2, J3, J4, J5 |
| 3 | C_1206_3216Metric | C_1206_3216Metric | C1, C3, C4 |
| 3 | MountingHole_3.2mm_M3 | MountingHole_3.2mm_M3 | MK1, MK2, MK3 |
| 1 | D_SOD-523 | D_SOD-523 | D1 |
| 1 | ESP32-C3-MINI-1 | ESP32-C3-MINI-1 | U2 |
| 1 | Fuse_1812_4532Metric | Fuse_1812_4532Metric | F1 |
| 1 | L_1008_2520Metric | L_1008_2520Metric | L1 |
| 1 | PinHeader_1x06_P2.54mm_Vertical | PinHeader_1x06_P2.54mm_Vertical | J6 |
| 1 | SOT-23-6 | SOT-23-6 | U7 |
| 1 | Sensirion_DFN-4_1.5x1.5mm_P0.8mm_SHT4x_NoCentralPad | Sensirion_DFN-4_1.5x1.5mm_P0.8mm_SHT4x_NoCentralPad | U5 |
| 1 | USB_C_Receptacle_GCT_USB4105-xx-A_16P_TopMnt_Horizontal | USB_C_Receptacle_GCT_USB4105-xx-A_16P_TopMnt_Horizontal | J1 |
| 1 | USON-10_2.5x1.0mm_P0.5mm | USON-10_2.5x1.0mm_P0.5mm | U3 |
| 1 | VEML7700 | VEML7700 | U6 |
| 1 | VSSOP-10_3x3mm_P0.5mm | VSSOP-10_3x3mm_P0.5mm | U4 |
| 1 | WSON-8-1EP_2x2mm_P0.5mm_EP0.9x1.6mm_ThermalVias | WSON-8-1EP_2x2mm_P0.5mm_EP0.9x1.6mm_ThermalVias | U1 |
Similar boards
- 2 layers60 × 30 mm

- 4 layers81.2 × 81.2 mm

- 4 layers239.5 × 239.5 mm

Broadcast clock
espena/broadcast-clock
Digital precision studio/broadcast masterclock with WiFi configuration, acts as local NTP server with accurate GPS time sync.
440 parts28GPL-3.0 - 2 layers38.3 × 20.8 mm

- 2 layers36.8 × 90.9 mm

Bwlr3d
teapotlaboratories/bwlr3d
Teapot BWLR3D: Asset Tracker and Environmental Sensor with Solar Energy Harvesting
108 parts18MIT - 4 layers100 × 100 mm

Solar panel side Z
proveskit/solar_boards
The solar panel boards for the PROVES Kit
45 parts4CERN-OHL-W-2.0 - 4 layers62.5 × 44.5 mm

Esp32s3-plant monitor
MuffinByteLabs/esp32s3-plant-monitor
Portfolio PCB: ESP32-S3 Wi-Fi plant monitor. 4-layer KiCad 10 design, fabricated and assembled at JLCPCB — schematic, reviews and the frozen manufacturing package all readable in-browser.
70 parts3CERN-OHL-P-2.0 - 2 layers68.8 × 68.1 mm

SmartSensor
AvansETI/SmartSensor
SmartSensor: a sensor to be used as sensor and actuator within existing buildings.
68 parts2GPL-3.0
Questions
How big is the Pot pulse PCB?
It measures 70 × 50 mm and has 4 copper layers, 1.6 mm thick.
What parts does the Pot pulse use?
60 parts, built around the ESP32-C3-MINI-1 and VEML7700-TT. 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 Pot pulse KiCad files?
From the rwrife/pot-pulse repository on GitHub, at the commit this page was made from: the board is hardware/kicad/pot-pulse.kicad_pcb and its schematic hardware/kicad/pot-pulse.kicad_sch. PCBKit opens the board in the browser, with nothing to install.
Can I use the Pot pulse design in my own project?
Its repository publishes it under the MIT licence: you may reuse it on that licence's terms (keep the author's notice, and for a copyleft licence share your changes alike).