An electrician does not trust a device's self-reported power draw. An electrician puts a meter on the circuit.
The epi-meter is a custom power measurement PCB designed to instrument a Raspberry Pi 5 cluster with dedicated AC-side energy metering hardware. It measures the true cost of every token an AI model generates — in joules — using calibrated metering ICs and non-invasive CT clamps.
This is the measurement instrument behind the Energy Per Intelligence (EPI) research pipeline. It is the first YOSO-YAi board design that is fully public — complete KiCad source, Gerber files, BOM, firmware, enclosure, assembly guide, and calibration procedure. Everything needed to build one.
- Why This Board Exists
- Why Not Software Measurement
- Specifications
- Block Diagram
- Schematic Overview
- Bill of Materials
- PCB Layout
- Firmware Architecture
- Telemetry Protocol
- Calibration Procedure
- Enclosure
- Assembly Guide
- Integration with EPI Pipeline
- Breadboard Prototype
- Repository Structure
- Build Your Own
- Four Purposes
- Contributing
- License
The EPI research pipeline performs surgery on open-weights LLMs (expert pruning, head removal, mixed quantization), deploys the modified models to a Raspberry Pi 5 cluster, and measures the energy cost of inference. The measurement requires a dedicated, independent instrument — not software estimation.
The epi-meter sits between the wall outlet and each Pi node, measuring:
- True RMS real power (watts) — not apparent power, not estimated power
- Power factor — the ratio of real to apparent power
- RMS voltage and current — per channel
- Reactive power (VAR) — for complete power analysis
- Energy accumulation (Wh/kWh) — for long-duration runs
All computed in hardware by dedicated energy metering ICs. The RP2350 MCU reads results over SPI and streams JSON telemetry to the Orchestrator Pi.
| Method | Problem |
|---|---|
nvidia-smi |
Does not exist on Pi 5. No GPU telemetry on ARM. |
/sys/class/power_supply/ |
Reports battery/USB status, not wall power consumption. |
perf energy counters |
x86 RAPL only. Not available on ARM Cortex-A76. |
| Software estimation models | Unreliable. Not independent of the system being measured. |
| USB power meters (DC side) | Misses PSU efficiency losses and fan power. Not AC-side. |
| epi-meter (AC side, CT clamps) | Independent. Non-invasive. Captures total system draw. Calibrated. |
For publishable research, the measurement instrument must be independent of the system being measured. The epi-meter is a separate board on a separate power domain, measuring AC inlet power via CT clamps that don't touch the device under test.
| Parameter | Specification |
|---|---|
| MCU | RP2350 (Raspberry Pi Pico 2 silicon) — dual Cortex-M33 @ 150 MHz |
| Energy Metering ICs | 4x ATM90E26 (or ADE7753 class) — dedicated single-phase energy metering |
| Communication (MCU ↔ ICs) | SPI, up to 4 chip selects |
| Current Sensing | 4x SCT-013-030 CT clamps (30A, 1V output) — non-invasive, split-core |
| Voltage Sensing | 1x voltage divider from shared AC reference via isolation transformer |
| Measurements per Channel | True RMS voltage, true RMS current, real power (W), reactive power (VAR), apparent power (VA), power factor, frequency, energy (Wh) |
| Metering IC Sampling | Internal ADC: 1 kHz+ per channel |
| RMS Output Rate | 10–50 Hz (configurable via IC registers) |
| Output | UART TX to Orchestrator Pi — 115200 baud, JSON, 1 Hz (configurable) |
| Power Input | USB-C (5V) from Orchestrator Pi or separate 5V supply |
| Board Power Draw | < 500 mW estimated (MCU + 4x metering ICs + reference) |
| Measurement Point | AC side — between wall outlet and each Pi node's PSU |
| CT Clamp Accuracy | ±1% typical (SCT-013 class, calibrated against known resistive load) |
| Metering IC Accuracy | ±0.5% (ATM90E26 class, factory-calibrated registers) |
| Operating Voltage | 100–240 VAC (universal input — measures, does not power from mains) |
| PCB Layers | 4-layer (signal, ground, power, signal) — mixed-signal layout |
| PCB Size | Target: 80mm × 60mm (approximately) |
| Fabrication | JLCPCB — Gerber files included, order directly |
| Enclosure | 3D-printed (Bambu Lab H2D) — Fusion 360 source + STL included |
┌─────────────────────────────────────────────┐
│ epi-meter Board │
│ │
┌──────────┐ │ ┌────────────┐ ┌────────────────────┐ │
│ AC Mains ├──┬──────────┼──┤ Voltage │ │ RP2350 │ │
│ (shared) │ │ │ │ Divider + │ │ (Pico 2 silicon) │ │
└──────────┘ │ │ │ Isolation │ │ │ │ ┌──────────────┐
│ │ └─────┬──────┘ │ SPI Master │ │ │ Orchestrator │
│ │ │ │ ├─ CS0: IC Ch.0 │──┼────▶│ Pi │
│ │ │ V_ref │ ├─ CS1: IC Ch.1 │ │ │ (UART RX) │
│ │ │ │ ├─ CS2: IC Ch.2 │ │ │ │
│ │ ▼ │ └─ CS3: IC Ch.3 │ │ │ SQLite log │
│ │ ┌─────────────┐ │ │ │ │ 10" display │
│ │ │ │ │ UART TX ───────────┼──┘ └──────────────┘
│ │ │ Metering IC │◀──│ (115200 baud) │ │
│ │ │ Channel 0 │ │ │ │
│ CT 0 │ │ ATM90E26 │ │ Watchdog │ │
┌────────┐ │ ┌───┐ │ │ │ │ Boot banner │ │
│ Pi ├────┼──┤CT ├───┼──┤ I_in │ │ LED status │ │
│ Node 0 │ │ └───┘ │ └─────────────┘ │ USB-C power │ │
└────────┘ │ │ └────────────────────┘ │
│ │ ┌─────────────┐ │
┌────────┐ │ CT 1 │ │ Metering IC │ │
│ Pi ├────┼──┤CT ├───┼──┤ Channel 1 │ │
│ Node 1 │ │ └───┘ │ │ ATM90E26 │ │
└────────┘ │ │ └─────────────┘ │
│ │ │
┌────────┐ │ CT 2 │ ┌─────────────┐ │
│ Pi ├────┼──┤CT ├───┼──┤ Metering IC │ │
│ Node 2 │ │ └───┘ │ │ Channel 2 │ │
└────────┘ │ │ │ ATM90E26 │ │
│ │ └─────────────┘ │
┌────────┐ │ CT 3 │ │
│ Pi ├────┼──┤CT ├───┼──┌─────────────┐ │
│ Node 3 │ │ └───┘ │ │ Metering IC │ │
└────────┘ │ │ │ Channel 3 │ │
│ │ │ ATM90E26 │ │
│ │ └─────────────┘ │
│ │ │
│ └───────────────────────────────────────────┘
│
│ CT clamps are non-invasive split-core.
│ They clip around the AC power cable
│ of each Pi node's PSU. No wire cutting.
│ No mains contact. No voided warranties.
Status: Schematic design in progress in KiCad 9.0. Files will be committed to
hardware/kicad/when the design is complete.
The schematic is organized into the following sheets:
| Sheet | Contents |
|---|---|
| Top Level | RP2350 MCU, crystal oscillator, decoupling, USB-C connector, UART header |
| Power Supply | USB-C 5V input, 3.3V LDO for MCU + metering ICs, bulk capacitance |
| Channel 0–3 | ATM90E26 metering IC, CT clamp input conditioning (burden resistor, protection, anti-aliasing filter), SPI connection to MCU |
| Voltage Reference | AC voltage sensing: isolation transformer, voltage divider, filtering, shared across all 4 metering ICs |
| Connectors | 4x 3.5mm jack for CT clamps, 1x AC voltage input, 1x UART header, 1x USB-C, 2x status LED |
┌──────────────────────────────┐
CT Clamp │ Input Conditioning Circuit │
(SCT-013) │ │
┌────┐ │ ┌────────┐ ┌──────────┐ │ ATM90E26
│ CT ├────────────┼──┤ Burden ├───┤ Anti- ├──┼───▶ I_P / I_N
│ │ │ │ R_b │ │ Aliasing │ │ (current
└────┘ │ │ │ │ RC LPF │ │ input)
│ └────┬───┘ └──────────┘ │
│ │ │
│ GND │
│ │
│ TVS diode for ESD/surge │
│ protection across input │
└──────────────────────────────┘
R_b (burden resistor):
SCT-013-030: built-in burden, 1V output at 30A
If using SCT-013-000 (unburdened): R_b = V_ref / I_max
Anti-aliasing filter:
RC low-pass, f_c > 2x line frequency harmonics
Target: f_c ≈ 2 kHz (captures up to ~30th harmonic)
AC Mains ──▶ Isolation Transformer ──▶ Voltage Divider ──▶ ATM90E26 V_P/V_N
(safety isolation) (scale to IC range) (shared across
9V or 12V secondary with anti-aliasing all 4 channels)
RC filter)
Status: Component selection in progress. BOM will be finalized when the schematic is complete. Preliminary selections below based on design requirements.
| Ref | Component | Package | Qty | Unit Cost (est.) | Source | Notes |
|---|---|---|---|---|---|---|
| U1 | RP2350 (Pico 2 module) | DIP-40 module | 1 | $5.00 | Raspberry Pi | Or RP2350A QFN for custom footprint |
| U2–U5 | ATM90E26 | SSOP-28 | 4 | $2.50 | Microchip/Digikey | Single-phase energy metering IC |
| U6 | 3.3V LDO (AMS1117-3.3 or AP2112K) | SOT-223 / SOT-23-5 | 1 | $0.30 | LCSC | Powers MCU + metering ICs |
| T1 | AC voltage isolation transformer | PCB mount | 1 | $3.00 | Digikey | 120V/240V to 9V, safety isolation |
| J1–J4 | 3.5mm TRS jack | Through-hole | 4 | $0.50 | LCSC | CT clamp connector |
| J5 | USB-C connector | SMD | 1 | $0.40 | LCSC | 5V power input only |
| J6 | UART header (1x4) | 2.54mm pitch | 1 | $0.10 | LCSC | TX, RX, GND, 3V3 |
| CT1–CT4 | SCT-013-030 | Split-core clamp | 4 | $8.00 | Amazon/AliExpress | 30A, 1V output, non-invasive |
| Y1 | 12 MHz crystal | HC49 or 3215 | 1 | $0.20 | LCSC | For RP2350 (if not using module) |
| R, C | Passives (burden, decoupling, filter) | 0402/0603 | ~60 | $0.01 | LCSC | See full BOM |
| D1–D2 | Status LEDs | 0603 | 2 | $0.05 | LCSC | Power + activity |
| D3–D6 | TVS diodes (ESD protection) | SOD-323 | 4 | $0.10 | LCSC | CT input protection |
| Item | Cost |
|---|---|
| PCB components (excluding CT clamps) | ~$20 |
| 4x CT clamps (SCT-013-030) | ~$32 |
| PCB fabrication (JLCPCB, qty 5) | ~$8 |
| 3D-printed enclosure (PLA/PETG) | ~$3 |
| Total per board | ~$63 |
Full interactive BOM will be generated from KiCad and committed to
hardware/bom/as both CSV and HTML.
Status: Layout pending schematic completion. Design rules below.
| Parameter | Value | Reason |
|---|---|---|
| Layers | 4 (Sig / GND / PWR / Sig) | Mixed-signal requires solid ground plane |
| Ground plane | Unbroken on layer 2 | Critical for metering IC accuracy and noise rejection |
| Analog/digital split | Separate regions, single-point star ground | Prevent digital noise from coupling into metering inputs |
| CT input traces | Short, differential pair, guarded by ground | Minimize noise pickup on low-level current signals |
| SPI traces | Controlled impedance not required (< 10 MHz), but length-matched | Reliable communication at metering IC SPI speeds |
| Voltage reference | Routed to all 4 ICs with matched trace lengths | Consistent voltage measurement across channels |
| USB-C | Standard USB 2.0 routing | Power only (no high-speed data) |
| Clearance (mains-rated) | Not applicable — no mains traces on PCB | All AC sensing via CT clamps (contactless) and isolation transformer |
| Board size | Target 80mm × 60mm | Compact enough for 3D-printed enclosure |
| Fabrication | JLCPCB, 4-layer, ENIG finish | Gerber files committed to hardware/gerbers/ |
┌──────────────────────────────────────────────────┐
│ │
│ ┌─────────┐ ┌──────┐ ┌──────┐ ┌──────┐ │
│ │ RP2350 │ │ IC 0 │ │ IC 1 │ │ USB-C│ │
│ │ (MCU) │ │ │ │ │ │ │ │
│ │ │ └──────┘ └──────┘ └──────┘ │
│ │ SPI │ │
│ │ UART │ ┌──────┐ ┌──────┐ ┌──────┐ │
│ └─────────┘ │ IC 2 │ │ IC 3 │ │ UART │ │
│ │ │ │ │ │header│ │
│ ┌──────────┐ └──────┘ └──────┘ └──────┘ │
│ │ Voltage │ │
│ │ Ref Ckt │ [J1] [J2] [J3] [J4] │
│ │ (iso TX) │ CT CT CT CT │
│ └──────────┘ clamp clamp clamp clamp │
│ jacks jacks jacks jacks │
│ [LED] [LED] │
│ │
│ ─────────── ANALOG REGION ── │ ── DIGITAL ──── │
│ │
└──────────────────────────────────────────────────┘
Status: Firmware skeleton committed. Full implementation after hardware validation on breadboard prototype.
The firmware runs on the RP2350 in C using the Pico SDK. It follows the same architecture as the YOSO-YAi production BMC firmware: a main loop with sensor reads, computation, and telemetry output.
| Module | File | Function |
|---|---|---|
| Main | main.c |
Init, main loop, watchdog, boot banner |
| SPI Driver | spi_driver.c |
SPI bus init, chip select management, read/write to metering ICs |
| ATM90E26 Driver | atm90e26.c |
Register map, calibration writes, measurement reads, status checks |
| Telemetry | telemetry.c |
Build JSON payload, UART TX at configured rate |
| Calibration | calibration.c |
Load/save calibration constants from flash, apply to readings |
| Watchdog | watchdog.c |
Hardware watchdog, auto-reset on stall > 5 seconds |
| LED | led.c |
Power LED (solid), activity LED (blink on UART TX) |
// Simplified main loop — actual implementation in firmware/src/main.c
while (true) {
watchdog_update();
// Read all 4 metering ICs over SPI
for (int ch = 0; ch < 4; ch++) {
readings[ch] = atm90e26_read_all(ch);
// readings[ch] contains:
// .watts_rms — real power (W)
// .volts_rms — RMS voltage (V)
// .amps_rms — RMS current (A)
// .power_factor — PF (0.0 - 1.0)
// .var — reactive power (VAR)
// .frequency — line frequency (Hz)
// .energy_wh — accumulated energy (Wh)
}
// Build and transmit JSON telemetry
telemetry_send(readings, 4);
// Blink activity LED
led_activity_pulse();
// Wait for next sample interval
sleep_ms(sample_interval_ms);
}═══════════════════════════════════════
epi-meter v0.1.0
RP2350 | 4-ch AC Energy Metering
YOSO-YAi LLC | Franzabner
UART: 115200 baud | JSON
Channels: 4
Status: OK
═══════════════════════════════════════
The epi-meter streams JSON over UART at 115200 baud. The protocol is identical to the existing YOSO-YAi FACTORY telemetry format, ensuring direct compatibility with the Orchestrator Pi's SQLite logging and display system.
{
"device": "epi-meter",
"firmware": "0.1.0",
"ts": 1234567,
"channels": [
{
"ch": 0,
"watts": 12.450,
"volts": 121.30,
"amps": 0.103,
"pf": 0.997,
"var": 0.95,
"freq": 60.01,
"wh": 0.0035
},
{
"ch": 1,
"watts": 11.890,
"volts": 121.28,
"amps": 0.098,
"pf": 0.996,
"var": 0.88,
"freq": 60.01,
"wh": 0.0033
},
{
"ch": 2,
"watts": 12.110,
"volts": 121.31,
"amps": 0.100,
"pf": 0.997,
"var": 0.91,
"freq": 60.01,
"wh": 0.0034
},
{
"ch": 3,
"watts": 12.340,
"volts": 121.29,
"amps": 0.102,
"pf": 0.997,
"var": 0.93,
"freq": 60.01,
"wh": 0.0034
}
],
"cluster": {
"total_watts": 48.790,
"avg_watts": 12.198,
"peak_watts": 12.450
}
}| Field | Type | Unit | Description |
|---|---|---|---|
device |
string | — | Always "epi-meter" |
firmware |
string | — | Firmware version (semver) |
ts |
integer | ms | Milliseconds since boot |
ch |
integer | — | Channel index (0–3) |
watts |
float | W | True RMS real power |
volts |
float | V | True RMS voltage |
amps |
float | A | True RMS current |
pf |
float | — | Power factor (0.0–1.0) |
var |
float | VAR | Reactive power |
freq |
float | Hz | Line frequency |
wh |
float | Wh | Accumulated energy since reset |
total_watts |
float | W | Sum of all channel watts |
avg_watts |
float | W | Mean of all channel watts |
peak_watts |
float | W | Maximum of all channel watts |
Status: Procedure documented. Will be validated against known loads when hardware is built.
- Known resistive load (e.g., 100W incandescent bulb or calibrated resistive heater)
- Reference power meter (Kill-A-Watt P4400 or equivalent, ±0.5% accuracy)
- Multimeter for voltage verification
-
Voltage Calibration
- Connect epi-meter voltage reference to AC mains via isolation transformer
- Compare epi-meter voltage reading against multimeter on the same outlet
- Adjust ATM90E26 voltage gain register (
Ugain) until readings match within ±0.5%
-
Current Calibration (Per Channel)
- Connect known resistive load through CT clamp on channel under test
- Read current from reference power meter
- Adjust ATM90E26 current gain register (
Igain) until readings match within ±1%
-
Power Calibration Verification
- With calibrated voltage and current, compare watts reading against reference meter
- Verify power factor reads ~1.00 for purely resistive load
- If power reading deviates > 1%, adjust power offset register
-
Multi-Channel Verification
- Connect identical loads on all 4 channels simultaneously
- Verify all channels read within ±1% of each other
- Record calibration constants to RP2350 flash
// Stored in RP2350 flash (last sector)
typedef struct {
uint32_t magic; // 0xEP1CAL00
uint16_t ugain; // Voltage gain register value
uint16_t igain[4]; // Current gain per channel
int16_t power_offset[4];// Power offset per channel
uint32_t crc32; // Integrity check
} calibration_t;Status: Enclosure design pending PCB dimensions finalization. Will be designed in Fusion 360 and printed on Bambu Lab H2D.
| Requirement | Specification |
|---|---|
| Material | PLA or PETG (prototyping), ASA (production) |
| Color | Matte black (YOSO-YAi brand) |
| Access | CT clamp jacks accessible from one side, USB-C + UART from another |
| Mounting | M3 standoffs for PCB, optional DIN rail clip |
| Ventilation | Not required (< 500 mW dissipation) |
| Label | YOSO-YAi logo + "epi-meter" engraved/embossed |
| Print settings | 0.2mm layer height, 3 walls, 20% infill |
enclosure/
├── fusion360/
│ └── epi-meter-enclosure.f3d # Editable Fusion 360 source
└── stl/
├── epi-meter-top.stl # Top shell
├── epi-meter-bottom.stl # Bottom shell with standoffs
└── epi-meter-din-clip.stl # Optional DIN rail mounting clip
Status: Guide structure documented. Step-by-step photos will be added during first board assembly.
See docs/assembly/ for the full illustrated guide.
| Step | Description | Tools |
|---|---|---|
| 1 | Order PCB from JLCPCB using provided Gerber files | Web browser |
| 2 | Order components from BOM (LCSC/Digikey/Amazon) | Web browser |
| 3 | Solder SMD components (metering ICs, passives, LDO) | Hot air / reflow oven |
| 4 | Solder through-hole components (CT jacks, UART header, module) | Soldering iron |
| 5 | Solder USB-C connector | Soldering iron / hot air |
| 6 | Visual inspection + continuity check | Multimeter |
| 7 | Flash RP2350 firmware via USB | USB cable, picotool |
| 8 | Run calibration procedure | Reference load + meter |
| 9 | Print and assemble enclosure | 3D printer |
| 10 | Connect CT clamps and UART cable | — |
| 11 | Verify telemetry output | Serial terminal |
The epi-meter is one component of the complete EPI measurement system:
┌──────────┐ surgery ┌──────────┐ inference ┌──────────┐
│ DGX ├────────────▶│ Pi ├────────────▶│ epi- │
│ Spark │ deploy GGUF│ Cluster │ AC power │ meter │
│ (surgeon)│ │ (patient)│◀────────────│(instrmnt)│
└──────────┘ └──────────┘ CT clamps └────┬─────┘
│ UART
│ JSON
▼
┌──────────┐
│Orchestrtr│
│Pi │
│(SQLite) │
└────┬─────┘
│ SSH
▼
┌──────────┐
│epi-bench │
│(EPI calc)│
└──────────┘
The Orchestrator Pi receives epi-meter JSON via UART (GPIO15 RX) and:
- Logs every sample to SQLite with microsecond timestamps
- Renders live power gauges on the 10-inch display
- Exposes data via SSH for epi-bench to pull
The epi-bench tooling:
- SSHs to Orchestrator, queries SQLite for the power trace of a specific run
- Pairs with benchmark results (tokens generated, accuracy scores)
- Calculates EPI = Joules/Token ÷ Accuracy
- Generates Pareto plots and comparison charts
Before committing to the epi-meter PCB, a single metering IC channel is prototyped on the YOSO-YAi FACTORY exposed breadboard — the same Pico 2 breadboard that validates WRK-IN BMC subsystems.
| Subsystem | Validation Target |
|---|---|
| CT clamp signal conditioning | Burden resistor value, signal level, noise floor |
| Metering IC SPI communication | Register read/write, chip select, clock polarity |
| True RMS power calculation | Watts reading vs. reference meter on known load |
| UART telemetry integration | JSON format, Orchestrator SQLite logging, display rendering |
| Calibration procedure | Gain register tuning, offset correction, accuracy verification |
| Breadboard | epi-meter PCB |
|---|---|
| Pico 2 (DIP, breadboard) | RP2350 (QFN soldered, or Pico 2 module) |
| Single metering IC on breakout | 4x ATM90E26 (SSOP-28, reflow soldered) |
| Jumper wires for SPI | Copper traces, length-matched |
| Alligator clip CT connection | 3.5mm TRS jacks |
| Breadboard supply | USB-C + LDO |
Once the single-channel prototype reads clean power data and the EPI calculation pipeline produces valid results, the 4-channel PCB design proceeds with confidence. Every trace on the epi-meter PCB will have been validated as a wire on the breadboard first.
epi-meter/
├── README.md # This file
├── LICENSE-HARDWARE # CERN OHL-S v2 (hardware)
├── LICENSE-FIRMWARE # MIT (firmware)
├── CONTRIBUTING.md # How to contribute
├── .gitignore
│
├── hardware/
│ ├── kicad/ # KiCad 9.0 project files
│ │ ├── epi-meter.kicad_pro # Project file
│ │ ├── epi-meter.kicad_sch # Schematic
│ │ ├── epi-meter.kicad_pcb # PCB layout
│ │ └── libs/ # Custom footprints + symbols
│ ├── gerbers/ # Production Gerber files (JLCPCB-ready)
│ └── bom/ # Bill of Materials (CSV + interactive HTML)
│
├── firmware/
│ ├── CMakeLists.txt # Pico SDK build system
│ ├── src/
│ │ ├── main.c # Entry point, main loop, watchdog
│ │ ├── spi_driver.c # SPI bus management
│ │ ├── atm90e26.c # Metering IC driver
│ │ ├── telemetry.c # JSON builder + UART TX
│ │ ├── calibration.c # Flash storage for cal constants
│ │ ├── watchdog.c # Hardware watchdog
│ │ └── led.c # Status LED control
│ ├── include/
│ │ ├── atm90e26.h # Metering IC register map + API
│ │ ├── telemetry.h # Telemetry API
│ │ ├── calibration.h # Calibration data structures
│ │ └── pins.h # GPIO pin assignments
│ └── lib/ # Third-party libraries (if any)
│
├── enclosure/
│ ├── fusion360/ # Editable Fusion 360 source
│ └── stl/ # Print-ready STL files
│
├── docs/
│ ├── assembly/ # Step-by-step assembly guide
│ ├── calibration/ # Calibration procedure (detailed)
│ └── images/ # Photos, diagrams, logo
│
├── tools/
│ └── serial_monitor.py # Simple serial monitor for testing
│
└── test/
└── test_telemetry_parse.py # Verify JSON telemetry parsing
-
Order the PCB
- Download Gerber files from
hardware/gerbers/ - Upload to JLCPCB — 4-layer, ENIG, default settings
- Typical cost: ~$8 for 5 boards
- Download Gerber files from
-
Order Components
- Download BOM from
hardware/bom/ - Order from LCSC (most passives + ICs) and Amazon/AliExpress (CT clamps)
- Typical cost: ~$55 for all components
- Download BOM from
-
Assemble
- Follow the assembly guide
- SMD soldering required (SSOP-28 metering ICs)
-
Flash Firmware
cd firmware/ mkdir build && cd build cmake .. -DPICO_SDK_PATH=/path/to/pico-sdk make # Hold BOOTSEL, connect USB, release cp epi-meter.uf2 /media/RPI-RP2/
-
Calibrate
- Follow the calibration procedure
- You need a known resistive load and a reference power meter
-
Connect and Measure
- Clip CT clamps around each Pi node's AC power cable
- Connect UART to Orchestrator Pi (or any serial terminal)
- Verify JSON telemetry at 115200 baud
This board was designed to serve four objectives simultaneously:
| Purpose | How |
|---|---|
| Research Instrument | Produces the energy data for all EPI research papers. Ground truth for joules/token measurement. |
| Engineering Portfolio | Demonstrates KiCad mixed-signal layout, RP2350 embedded firmware, CT clamp circuits, metering IC integration, 3D-printed enclosure. Upwork portfolio piece. |
| Open-Source Project | Full design files enable community replication. Builders become EPI contributors. Community funnel: build board → measure EPI → join research → discover YOSO-YAi. |
| Content Vehicle | Build process documented for YouTube. Digital Abner walks through schematic, layout, soldering, calibration. Every step is an episode. |
See CONTRIBUTING.md for details.
Contributions welcome in:
- Schematic review — catch errors before fabrication
- Firmware — metering IC drivers, calibration algorithms
- Alternative metering ICs — ports to ADE7753, ADE9000, CS5460A
- Alternative MCUs — ports to ESP32-S3, STM32 (if you don't have a Pico 2)
- Enclosure variants — rack-mount, DIN rail, different printer compatibility
- Documentation — assembly photos, calibration tips, troubleshooting
| Component | License |
|---|---|
| Hardware (schematic, PCB, Gerbers, BOM) | CERN Open Hardware Licence v2 — Strongly Reciprocal (CERN-OHL-S-2.0) |
| Firmware (C source, build files) | MIT License |
| Documentation (assembly guide, calibration, images) | CC BY 4.0 |
The epi-meter contains zero YOSO-YAi product architecture. No ATECC608B, no CM5 carrier board routing, no WRK-IN BMC firmware. Fully original power measurement IP. Completely public.
