Skip to the content
PCBKitNew board
2 layers160 × 68 mmC0-dev, the printed circuit board in 3D

poe microcontroller with web IDE + firmware upload

Size
160 × 68 mm
Copper layers
2
Thickness
1.6 mm
Parts
456
Nets
378
Pads
1,565
Tracks, vias
0, 0
Routed
Not yet
KiCad
KiCad 10.0 (file 20260206)
Created
25 Apr 2026
Updated
26 Jun 2026

Overview

C0-dev is an open-source printed circuit board by rm-1n, from the rm-1n/conduit repository on GitHub, published under the MIT licence. It is a 2-layer board of 160 × 68 mm with 456 parts on 378 nets.

It is built around the B0505S-1WR3, ADS1015IDGS and ISO1212DBQ, with the ISO1540D, ISO6741DW and TCA9555PWR(UMW) among its other parts. Its parts include 177 resistors, 138 capacitors, 41 diodes, 28 ICs and 12 connectors.

Main components

12

README

README.md

CONDUIT

Open-hardware RP2350 / Pico2 board with Power-over-Ethernet, an RMII PHY, and a browser-based development workflow. The repo holds the KiCad project (hardware/), the firmware with A/B-partitioned OTA + a tiny HTTP API (firmware/), the conduit Python CLI for build / flash / OTA / commanding (tools/conduit/), and a static web IDE that compiles user C in the browser via WASM clang+lld and pushes it over the network (web/).

License: MIT.

First-time setup

  1. First flash (USB). Hold BOOTSEL while plugging the board into USB — it enumerates as the RPI-RP2350 mass-storage drive. Download the latest commissioning image — currently factory-10.77 — and copy the .uf2 file onto the drive. The drive disappears, the board reboots running the new firmware. The image is built by .github/workflows/commissioning-image.yml and contains the bootloader plus a non-TBYB app concatenated into one UF2.
  2. Power and network. Connect the board to a PoE-capable switch (or keep it on USB power); it tries DHCP first and falls back to 192.168.178.200/24.
  3. Iterate. Open the web IDE in your browser, point it at the device's IP, and from there you write user C, build + OTA over the network, watch live telemetry charts, and send commands to the running firmware — all without leaving the browser.

Connecting the IDE to a device

The web IDE is shipped at https://rm-1n.github.io/conduit/ and also runs from any local static file server (python3 -m http.server in web/ is enough). Open it, hit Hardware Manager in the top nav, and add a row:

  • IP address — required. Use conduit discover from the CLI to find it on the LAN; the firmware emits a UDP multicast beacon at 1 Hz so you don't need to scan a subnet.
  • Unique-id — optional, 16 hex chars (the RP2350 board id). Provide this if the board has a TLS identity blob in its IDENTITY partition (see "Per-device TLS" below); the IDE then talks to the device over HTTPS via a per-device wildcard hostname instead of plain HTTP.
  • Name — optional, just a label for your own benefit.

Once added, the dropdown in the IDE picks the device and every fetch (/api/status, OTA upload, telemetry stream, commands) routes through the right URL.

HTTP vs HTTPS

The two modes coexist; pick whichever fits your situation:

  • HTTP, no TLS (default). The hosted IDE on GitHub Pages can't reach http://<ip>/api/... due to mixed-content blocking, but the IDE works fine over http://localhost/file:// against a plain-HTTP device. This is the path for self-hosters and dev boards.
  • HTTPS via wildcard hostname (opt-in). If you've written a per-device TLS identity into the IDENTITY partition, the IDE constructs https://<dash-ip>.<unique-id>.devices.rm1n.com/api/status and the device's per-device LE cert lights the green padlock — no browser warnings, no installed CAs. The matching DNS + cert-issuance services are the rm1n commercial add-on; they aren't part of this repo. Self-hosters with their own CA + DNS can override the zone via Conduit.deviceTlsZone = '<your-zone>' in the browser console.

CLI

text
pip install -e tools/conduit                  # one-time install (use a venv)
conduit discover                              # find devices on the LAN
conduit status -d 192.168.178.200             # GET /api/status
conduit ota-upload -d <ip> -t <tok> -f <uf2>  # OTA via /api/upload
conduit cmd <name> [k=v ...] -d <ip> -t <tok> # /api/cmd
conduit provision -d <ip>                     # bootloader + partition A seed

The CLI does NOT mint per-device TLS certs — that's the rm1n commercial provisioning toolchain. conduit provision here just lays down the partition table + the app binary, leaving the IDENTITY partition empty. Devices come up over plain HTTP. If you want the HTTPS path, you can fill the IDENTITY partition yourself (picotool load -p 2 -t bin -F <blob>) using a blob in the format documented in firmware/app/identity.h.

Web IDE

Plain static files: index.html + per-feature ES modules. No bundler, no framework. CDN-loaded h5wasm is the only runtime external dependency. The IDE compiles user main.c in the browser via the WASM clang/lld toolchain bundled under web/assets/emception/ (built locally; see web/lib/build-toolchain.sh), links it against the prebuilt Pico SDK headers/objects under web/assets/sdk/ (built by CI from firmware/), and produces a UF2 ready for /api/upload.

Repository layout

  • hardware/conduit/ — KiCad project (schematics, PCB, fab outputs).
  • firmware/ — C firmware (Pico SDK): app/ + bootloader/ + include/ + lib/ (submodules) + scripts/.
    • A/B partitioned OTA via the RP2350 ROM bootloader. See firmware/OTA.md for the rollback semantics.
    • firmware/app/identity.{c,h} reads an optional 8 KB IDENTITY partition for the TLS path described above. The reader is benign on uncommissioned boards.
  • tools/conduit/ — Python conduit CLI (click + httpx). Wraps build, flash, OTA, status, commands, discover, serial.
  • web/ — Static HTML/CSS/JS frontend served from GitHub Pages.

Tests

text
# Python CLI
cd tools/conduit && python3 -m venv .venv && .venv/bin/pip install -e ".[test]"
.venv/bin/pytest tests/

# Web IDE
cd web/tests && npm ci && npm test

# Firmware (host-side parser tests)
make -C firmware/tests test

CI (.github/workflows/test.yml) runs the Python suite across 3.9 / 3.12 / 3.14 and the web suite under Node 20 on every push.

Contributing

Issues and pull requests welcome. The repo's working preferences for AI-assisted development (when, what, and how) live in CLAUDE.md; skim it if you want a guided tour of the architecture.

Parts

456
QtyValueFootprintReferences
611kResistor_SMD:R_0402_1005MetricR1003, R1004, R1005, R1008, R1009, R1011, R1012, R1013, R1014, R1015, R1016, R1017, R1018, R1019, R1020, R1301 +45
520.1uFCapacitor_SMD:C_0402_1005MetricC201, C204, C205, C206, C307, C401, C502, C503, C505, C507, C509, C512, C513, C514, C515, C1001 +36
222kResistor_SMD:R_1206_3216MetricR509, R510, R511, R512, R513, R514, R515, R516, R708, R709, R710, R711, R716, R717, R907, R908 +6
1710uFCapacitor_SMD:C_0805_2012MetricC501, C504, C506, C508, C701, C704, C709, C801, C802, C803, C805, C901, C902, C907, C1201, C1202 +1
17PTVS30VP1UPDiode_SMD:D_SOD-128D301, D506, D507, D508, D509, D510, D511, D512, D513, D603, D604, D605, D606, D706, D707, D708 +1
121MResistor_SMD:R_0402_1005MetricR517, R518, R519, R520, R521, R522, R523, R524, R712, R713, R714, R715
122913730000conduit:2913730000J101, J102, J103, J104, J105, J106, J107, J108, J109, J110, J111, J112
11BSS138PPackage_TO_SOT_SMD:SOT-23Q701, Q702, Q1001, Q1002, Q1003, Q1004, Q1005, Q1006, Q1007, Q1008, Q1009
1020kResistor_SMD:R_0402_1005MetricR1021, R1022, R1023, R1024, R1025, R1026, R1027, R1028, R1307, R1308
10BAV199DWPackage_TO_SOT_SMD:SOT-363_SC-70-6D502, D503, D504, D505, D601, D602, D702, D703, D704, D705
90.1uCapacitor_SMD:C_0402_1005MetricC404, C405, C406, C407, C408, C410, C411, C413, C416
910uFCapacitor_SMD:C_1210_3225MetricC302, C303, C305, C1101, C1106, C1107, C1109, C1110, C1113
81nFCapacitor_SMD:C_0402_1005MetricC903, C904, C905, C906, C909, C910, C911, C912
8560Resistor_SMD:R_0402_1005MetricR903, R904, R905, R906, R913, R914, R915, R916
710kResistor_SMD:R_0402_1005MetricR201, R307, R404, R413, R701, R702, R1006
71nFCapacitor_SMD:C_1206_3216MetricC101, C102, C103, C208, C209, C210, C211
71uFCapacitor_SMD:C_0402_1005MetricC202, C510, C511, C601, C602, C603, C604
60Resistor_SMD:R_0402_1005MetricR410, R422, R525, R703, R718, R719
650mAResistor_SMD:R_1206_3216MetricF601, F602, F603, F604, F701, F702
6ADS1015IDGSPackage_SO:TSSOP-10_3x3mm_P0.5mmU507, U508, U601, U602, U603, U604
6M3MountingHole:MountingHole_3.5mm_Pad_TopBottomH101, H102, H103, H104, H105, H106
6SS14Diode_SMD:D_SMAD302, D501, D701, D801, D1101, D1102
51.6kResistor_SMD:R_0402_1005MetricR605, R606, R607, R608, R1105
51uFCapacitor_SMD:C_1206_3216MetricC306, C1105, C1108, C1111, C1112
54.7kResistor_SMD:R_0402_1005MetricR1001, R1002, R1007, R1010, R1306
5600Ω@100MHzInductor_SMD:L_0603_1608MetricFB501, FB701, FB702, FB703, FB801
410RResistor_SMD:R_0402_1005MetricR203, R204, R205, R206
422uFCapacitor_SMD:C_1206_3216MetricC301, C309, C314, C315
44.7uCapacitor_SMD:C_0402_1005MetricC402, C403, C409, C412
449.9RResistor_SMD:R_0402_1005MetricR209, R210, R211, R212
475RResistor_SMD:R_0402_1005MetricR213, R214, R215, R216
482Resistor_SMD:R_0805_2012MetricR609, R610, R611, R612
4ISO1212Package_SO:SSOP-16_3.9x4.9mm_P0.635mmU901, U902, U903, U904
4WS2812Bconduit:LED_WS2812B-Mini_PLCC4_3.5x3.5mmD1201, D1202, D1203, D1204
310nFCapacitor_SMD:C_0402_1005MetricC1103, C1104, C1114
31mmTestPoint:TestPoint_Pad_D1.0mmTP401, TP402, TP403
32MResistor_SMD:R_1206_3216MetricR101, R102, R103
333RResistor_SMD:R_0402_1005MetricR207, R217, R218
3B0505S-1WR3conduit:Converter_DCDC_EVISUN_BXXXXS-1WR3U501, U701, U801
3FiducialFiducial:Fiducial_1mm_Mask2mmFID101, FID102, FID103
3TPS4H000A-Q1Package_SO:ETSSOP-20-1EP_4.4x6.5mm_P0.65mm_EP3x4.2mmU1002, U1003, U1301
20.1uFCapacitor_SMD:C_0805_2012MetricC308, C311
20.1uFCapacitor_SMD:C_0603_1608MetricC304, C1102
2100kResistor_SMD:R_0402_1005MetricR1102, R1103
2100uFCapacitor_Tantalum_SMD:CP_EIA-3528-21_Kemet-BC310, C316
215pCapacitor_SMD:C_0402_1005MetricC414, C415
22.4kResistor_SMD:R_0402_1005MetricR1107, R1303
227Resistor_SMD:R_0402_1005MetricR411, R414
2ADS1220xPWPackage_SO:TSSOP-16_4.4x5mm_P0.65mmU704, U705
2CD-DF406SLconduit:Diode_Bridge_Bourns_CD-DF4xxSD303, D304
2ISO1540Package_SO:SOIC-8_3.9x4.9mm_P1.27mmU502, U503
2ISO6741Package_SO:SOIC-16W_7.5x10.3mm_P1.27mmU702, U703
2TCA9555PWRPackage_SO:TSSOP-24_4.4x7.8mm_P0.65mmU401, U1001
2TLP175APackage_SO:Toshiba_SOIC-4-6_4.4x3.6mm_P1.27mmU304, U803
2TMP117xxDRVPackage_SON:WSON-6-1EP_2x2mm_P0.65mm_EP1x1.6mmU504, U506
2greenLED_SMD:LED_0402_1005MetricD306, D402
111.5kResistor_SMD:R_0402_1005MetricR311
112.1kResistor_SMD:R_0402_1005MetricR208
1120RResistor_SMD:R_0805_2012MetricR802
11kΩ@100MHzInductor_SMD:L_0402_1005MetricFB201
12.2uHInductor_SMD:L_1008_2520MetricL301
122nFCapacitor_SMD:C_0402_1005MetricC207
1240Resistor_SMD:R_0402_1005MetricR1104
1240kResistor_SMD:R_0402_1005MetricR1101
125kResistor_SMD:R_0402_1005MetricR302
1270pFCapacitor_SMD:C_0402_1005MetricC312
127kResistor_SMD:R_0402_1005MetricR1106
13.3nFCapacitor_SMD:C_0402_1005MetricC313
13.3uInductor_SMD:L_0603_1608MetricL401
133Resistor_SMD:R_0402_1005MetricR405
14.7nFCapacitor_SMD:C_0402_1005MetricC1115
14.7uHInductor_SMD:L_Sunlord_SWPA5040SL302
1470pFCapacitor_SMD:C_0402_1005MetricC203
151kResistor_SMD:R_0402_1005MetricR1108
16.34kResistor_SMD:R_0402_1005MetricR309
160.4kResistor_SMD:R_0402_1005MetricR310
163.4RResistor_SMD:R_0402_1005MetricR303
168.1kResistor_SMD:R_0402_1005MetricR304
1750342156conduit:750342156L1101
1ABM8-272-T3 (12Mhz)Crystal:Crystal_SMD_Abracon_ABM8G-4Pin_3.2x2.5mmY401

The 436 most common of 456 parts.

Questions

How big is the C0-dev PCB?

It measures 160 × 68 mm and has 2 copper layers, 1.6 mm thick.

What parts does the C0-dev use?

456 parts, built around the B0505S-1WR3, ADS1015IDGS, ISO1212DBQ and ISO1540D. 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 C0-dev KiCad files?

From the rm-1n/conduit repository on GitHub, at the commit this page was made from: the board is hardware/c0-dev/c0-dev.kicad_pcb and its schematic hardware/c0-dev/c0-dev.kicad_sch. PCBKit opens the board in the browser, with nothing to install.

Can I use the C0-dev 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 rm-1n/conduit

1
  • 4 layers68.6 × 21 mmPico poe, the printed circuit board in 3D

    Pico poe

    rm-1n/conduit

    poe microcontroller with web IDE + firmware upload

    76 partsMIT

Similar boards

  • 2 layers70 × 55 mmRectifier, the printed circuit board in 3D

    Rectifier

    duanestorey/hifi-amp

    A high-fidelity four-channel amplifier with active-crossovers and room correction

    49 parts1
  • 6 layers100 × 67.8 mm12v-2x6, the printed circuit board in 3D

    12v-2x6

    eggsampler/12v-2x6-Current-Monitor

    For more information, see the schematic or the PCB layout (KiCanvas)

    152 parts1
  • 2 layers115 × 100 mmCog1, the printed circuit board in 3D

    Cog1

    diegodemarco/cog1

    cog1 is an open-source industrial IoT gateway (hardware and software) built as a motherboard hosting an Orange Pi Zero 3 Linux SBC.

    133 parts6MIT
  • 4 layers180 × 120 mmEdge18-main rev a, the printed circuit board in 3D

    Edge18-main rev a

    Gecesars/18-gateway-industrial

    Gateway Industrial Modbus/CAN Universal — baseline técnica e acompanhamento do projeto

    185 parts
  • 2 layers99.6 × 100 mmIsolatorPanel, the printed circuit board in 3D

    IsolatorPanel

    SG-O/Isolator

    Tripple Isolator for two Step/Dir/En and one UART signal

    125 parts3MIT
  • 4 layers69.5 × 60 mmHydra, the printed circuit board in 3D

    Hydra

    Queens-Rocket-Engineering-Team/av-hardware

    ECAD for SRAD Avionics hardware

    151 parts1