Skip to the content
PCBKitNew board
2 layers100 × 70 mmSensor node, the printed circuit board in 3D

Sensor node

epim/circsim

Post-routed PCB+Schematic circuit simulator. Because I have trust issues.

Size
100 × 70 mm
Copper layers
2
Thickness
1.6 mm
Parts
94
Nets
63
Pads
267
Tracks, vias
1,110, 102
Pours
1
Routed
Yes
KiCad
KiCad 10.0 (file 20260206)
Created
17 Jun 2026
Updated
3 Oct 2026

Overview

Sensor node is an open-source printed circuit board by epim, from the epim/circsim repository on GitHub, published under the MIT licence. It is a 2-layer board of 100 × 70 mm with 94 parts on 63 nets, routed with 1,110 tracks and 102 vias.

It is built around the ESP32-WROOM-32, LM358 and 74HC164, with the AMS1117-3.3, LM393 and 1N4148W among its other parts. Its parts include 36 resistors, 22 diodes, 18 capacitors, 6 ICs and 5 connectors. It belongs with the home automation and IoT and sensors and measurement boards and the ESP32 boards of this library.

Main components

8

README

README.md

circsim

Simulate and audit any routed KiCad board. circsim is a desktop app (Windows / macOS / Linux) that opens a routed KiCad board (.kicad_pcb), rebuilds the circuit from the copper, renders it in 3D, and runs an interactive SPICE bench on it: apply power, turn a knob, probe nets on the physical board. A read-only Board Critic audits the layout for fabrication risks. You get both before you pay for fabrication.

Open the board and press Energize. You do not assign Sim.* fields first, and the bundled model library matches parts by part number, value, and footprint, flagging the ones it cannot match instead of guessing. circsim is fully offline, MIT-licensed, and never modifies your design files.

Documentation: epim.github.io/circsim. It has the install guide, the First Light tutorial, task how-tos, and the full reference. Download: latest release (Windows .exe, macOS .dmg x2, Linux .AppImage / .deb).

circsim with the First Light board energized: the LED glowing red on the 3D board, a supply lead clipped to the copper, the bench shelf with a 5 V PSU panel, and the read-only Board Critic on the right.

A short recording of circsim opening the bundled 555 sample, energizing it, and listing Board Critic findings.

More screenshots, and what circsim reads out of sixteen KiCad-written boards from KiCad 6 through 10, are in the gallery.

What it does

  • Starts from the routed board. Net connectivity comes straight out of the .kicad_pcb, KiCad 6 to 10. The board can come from your own KiCad project, a contractor, or an autorouter such as Quilter that returns a KiCad board; circsim has no Quilter-specific code. The supported files page lists the KiCad-written boards behind the version range, including the one it rejects.
  • The schematic is an optional input. Keep the .kicad_sch next to the board with the same name and circsim attaches it on open. Its Sim.* fields are the first model source and its pin names settle diode and LED polarity. Only the root sheet is read, so parts on hierarchical sub-sheets get neither. A BOM CSV pins down exact parts.
  • A real bench. Clip a DC supply, function generator, potentiometer, logic input, and voltage/current probes onto the board by drawing leads from front-panel jacks to the copper. Turn a knob and the simulation re-solves live.
  • A read-only Board Critic on the layout. It audits the board circsim did not design for floating nets, clearance, decoupling distance, loop area, IR-drop, ampacity, and thermal risk, and never edits your files. The simulation itself treats each net as one ideal node, so copper resistance appears in the Critic's estimates and not in the simulated voltages.
  • Honest about what it knows. Behavioral vs. primitive models, stubbed ICs, MCUs as interactive-pin panels (firmware doesn't run), convergence fallbacks, and fidelity limits are always visible. See what circsim can and can't tell you. The same page ships inside the app.

Powered by ngspice 46, bundled per platform and run crash-isolated in a separate process. Nothing to install; no network calls, ever, and the app enforces it by cancelling any request that is not a local file.

Develop

sh
npm install
npm run fetch:ngspice   # download the bundled SPICE engine for your platform
npm run dev             # run the app in dev mode
npm test                # vitest unit + integration suite
npm run typecheck       # tsconfig.node.json + tsconfig.web.json (what CI runs)
npm run test:e2e        # Playwright E2E (requires npm run build first)
npm run build           # build the app
npm run package         # produce installers for the current platform

Architecture: Electron + TypeScript + React (panels) + imperative Three.js/WebGL2 (3D viewport) + zustand (state). The framework-free src/core/ layer (KiCad parsing, netlist extraction, model resolution, SPICE-deck generation, the Board Critic) is fully unit-tested without Electron. See the architecture reference.

Documentation source

The docs site is a VitePress project under website/, deployed to GitHub Pages by .github/workflows/docs.yml on every push touching website/. To work on it:

sh
cd website && npm install && npm run docs:dev

The page the app opens from its About dialog and fidelity banner is rendered from website/docs/concepts/fidelity.md. After editing that page, run npm run docs:fidelity and commit the regenerated docs/what-circsim-can-tell-you.html; a unit test fails when the two drift.

License

MIT. circsim bundles ngspice (BSD-style) and an in-house SPICE model library written from datasheet parameters; it never bundles vendor SPICE models or KiCad's share-alike 3D assets. See docs/licensing.md and the in-app About dialog for full provenance.

Parts

94
QtyValueFootprintReferences
19LEDLED_SMD:LED_0603_1608MetricD10, D11, D12, D13, D14, D15, D16, D17, D18, D19, D20, D21, D22, D23, D24, D25 +3
17330Resistor_SMD:R_0603_1608MetricR1, R10, R11, R12, R13, R14, R15, R16, R17, R18, R19, R20, R21, R22, R23, R24 +1
13100nCapacitor_SMD:C_0603_1608MetricC2, C4, C6, C7, C9, C10, C11, C13, C14, C15, C16, C17, C18
810kResistor_SMD:R_0603_1608MetricR2, R3, R30, R32, R33, R36, R45, RT1
41kResistor_SMD:R_0603_1608MetricR31, R44, R48, R49
3Conn_01x02Connector_PinHeader_2.54mm:PinHeader_1x02_P2.54mm_VerticalJ1, J3, J4
3TestPointTestPoint:TestPoint_Pad_D1.5mmTP1, TP2, TP3
210uCapacitor_SMD:C_0805_2012MetricC1, C5
24.7kResistor_SMD:R_0603_1608MetricR46, R47
247kResistor_SMD:R_0603_1608MetricR34, R35
274HC164Package_SO:SOIC-14_3.9x8.7mm_P1.27mmU5, U6
2SW_PushButton_Switch_SMD:SW_SPST_PTS645SW1, SW2
1100kResistor_SMD:R_0603_1608MetricR43
110nCapacitor_SMD:C_0603_1608MetricC12
11MResistor_SMD:R_0603_1608MetricR37
11N4148WDiode_SMD:D_SOD-123D4
11uCapacitor_SMD:C_0603_1608MetricC8
1220Resistor_SMD:R_0603_1608MetricR42
122uCapacitor_SMD:C_0805_2012MetricC3
12N3904Package_TO_SOT_SMD:SOT-23Q2
12N7002Package_TO_SOT_SMD:SOT-23Q1
1AMS1117-3.3Package_TO_SOT_SMD:SOT-223U1
1Conn_01x04Connector_PinHeader_2.54mm:PinHeader_1x04_P2.54mm_VerticalJ5
1Conn_01x05Connector_PinHeader_2.54mm:PinHeader_1x05_P2.54mm_VerticalJ2
1ESP32-WROOM-32RF_Module:ESP32-WROOM-32U2
1LM358Package_SO:SOIC-8_3.9x4.9mm_P1.27mmU3
1LM393Package_SO:SOIC-8_3.9x4.9mm_P1.27mmU4
1SMAJ24ADiode_SMD:D_SMAD2
1SS14Diode_SMD:D_SMAD1

Questions

How big is the Sensor node PCB?

It measures 100 × 70 mm and has 2 copper layers, 1.6 mm thick.

What parts does the Sensor node use?

94 parts, built around the ESP32-WROOM-32, LM358, 74HC164 and AMS1117-3.3. 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 Sensor node KiCad files?

From the epim/circsim repository on GitHub, at the commit this page was made from: the board is resources/sample/sensor-node.kicad_pcb and its schematic fixtures/fixture-555.kicad_sch. PCBKit opens the board in the browser, with nothing to install.

Can I use the Sensor node 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).

More from epim/circsim

2
  • 2 layers60 × 45 mmBlinker-555, the printed circuit board in 3D

    Blinker-555

    epim/circsim

    Post-routed PCB+Schematic circuit simulator. Because I have trust issues.

    7 partsMIT
  • 2 layers40 × 28 mmFirst light, the printed circuit board in 3D

    First light

    epim/circsim

    Post-routed PCB+Schematic circuit simulator. Because I have trust issues.

    2 partsMIT

Similar boards

  • 2 layers108 × 110 mmBms active hw, the printed circuit board in 3D

    Bms active hw

    NGOQUOC98/ESP32_PCB

    136 parts1
  • 2 layers105 × 80 mmTest end a, the printed circuit board in 3D

    Test end a

    Socketto/wifi-awning

    wifi-awning

    49 parts
  • 2 layers97.6 × 45.6 mmRelewifileguicopiaberna, the printed circuit board in 3D

    Relewifileguicopiaberna

    Tomicmm/RELE-WIFI

    Relé WiFi controlado mediante un ESP32-WROOM-32, capaz de encender y apagar una carga de forma remota a través de una conexión WiFi y un servidor MQTT (Mosquitto).

    31 partsMIT
  • 2 layers57.5 × 42.8 mmBlack Body Heater Control, the printed circuit board in 3D

    Black Body Heater Control

    DylanLockyer/Black_Body

    Electrical system for black body MKID tester

    52 parts1MIT
  • 2 layers70 × 60 mmResistojetV1, the printed circuit board in 3D

    ResistojetV1

    SimonDaniel605/Development-of-a-Resistojet-Thruster

    This project involves the development of a resistojet thruster for nanosatellite station-keeping.

    143 partsMIT
  • 2 layers100 × 85 mmESP32 MediaCarrier routed, the printed circuit board in 3D

    ESP32 MediaCarrier routed

    xmyoot/esp32-media-carrier

    ESP32 multimedia carrier board with 7–24 V DC buck regulator, 3.2 W Class-D I2S audio amp, WS2812 LED ring driver, and SPI TFT display header

    97 partsMIT
  • 2 layers100 × 85 mmVNA, the printed circuit board in 3D

    VNA

    profdc9/VNA

    Vector Network Analyzer based on the STM32F103C8T6 bluepill

    178 parts93
  • 2 layers90 × 60 mmMixers, the printed circuit board in 3D

    Mixers

    k1zmt/SSB85MultiPCB

    WIP! Don't try repeating!

    133 parts1