

C0-dev
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
12B0505S-1WR3
SIP,11.7x6mm-40℃~+105℃ 1 1.5kV 10.2mm 11.68mm 1W 200kHz~340kHz 200mA 2400uF 30mVp-p 4.5V~5.5V 5V 6mA 6mm 86% Short Circuit Protection 塑封型 非稳压型 SIP,11.7x6mm Isolated Power Modules ROHSEVISUNIsolated Power ModulesADS1015IDGS
VSSOP-10-0.5mm-40℃~+125℃ 0.5LSB 12 128Hz、250Hz、490Hz、920Hz、1.6kHz、2.4kHz、3.3kHz 1MHz 2 2V~5.5V 2uA 3.3kHz 5ppm/℃ 6.144V Built-in Built-in I2C Sigma-Delta Support Yes VSSOP-10-0.5mm Analog to Digital Converters (ADC) ROHSTexas InstrumentsAnalog To Digital Converters (ADC)ISO1212DBQ
SSOP-16-150mil-40℃~+125℃ 2 2500 4Mbps 70kV/us Bipolar input、Broken wire detection IO SSOP-16-150mil DI/DO Isolators ROHSTexas InstrumentsDI/DO IsolatorsISO1540D
SOIC-8-40℃~+125℃ 2500 50kV/us Bidirectional Bidirectional automatic direction、Open-drain buffer output SOIC-8 I2C Isolators ROHSTexas InstrumentsI2C IsolatorsISO6741DW
SOIC-16-300mil-40℃~+125℃ 1 1.71V~5.5V 1.71V~5.5V 11ns 150kV/us 3 5000 50Mbps Fail-safe output High Level SOIC-16-300mil Digital Isolators ROHSTexas InstrumentsDigital IsolatorsTCA9555PWR(UMW)
TSSOP-24TSSOP-24 I/O Expanders ROHSUMWI/O ExpandersTLP175A
SMD-41ms 5V 60V FET SMD-4 Transistor, Photovoltaic Output Optoisolators ROHSToshibaTransistor, Photovoltaic Output OptoisolatorsPTVS30VP1UP
SOD-128-55℃~+150℃ 100nA 12.4A 30V 33.3V 48.4V 600W IEC 61000-4-2 TVS Unidirectional SOD-128 ESD and Surge Protection (TVS/ESD) ROHSNexperiaESD And Surge Protection (TVS/ESD)BSS138P
SOT-23-55℃~+150℃ 1 N-channel 1.5V 1.6Ω@10V 350mW、1.14W 360mA 50pF 60V 800pC@4.5V SOT-23 MOSFETs ROHSNexperiaMOSFETsBAV199DW
SOT-363-65℃~+150℃ 1.25V@150mA 160mA 2 Pair Series Connection 4A 5nA@75V 85V SOT-363 Diodes - General Purpose ROHSDiodes IncorporatedDiodes - General PurposeSS14
SMA(DO-214AC)-55℃~+150℃ 1A 25A 300uA@40V 40V 550mV@1A Independent SMA(DO-214AC) Schottky Diodes ROHSMDDSchottky DiodesWS2812B
5mm X 5mm Surface Mount RGB LED with Intelligent ControlWorldsemiUncategorised
README
README.mdCONDUIT
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
- First flash (USB). Hold
BOOTSELwhile plugging the board into USB — it enumerates as theRPI-RP2350mass-storage drive. Download the latest commissioning image — currentlyfactory-10.77— and copy the.uf2file onto the drive. The drive disappears, the board reboots running the new firmware. The image is built by.github/workflows/commissioning-image.ymland contains the bootloader plus a non-TBYB app concatenated into one UF2. - 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. - 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 discoverfrom 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 overhttp://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/statusand 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 viaConduit.deviceTlsZone = '<your-zone>'in the browser console.
CLI
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 seedThe 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.mdfor 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.
- A/B partitioned OTA via the RP2350 ROM bootloader. See
tools/conduit/— PythonconduitCLI (click+httpx). Wraps build, flash, OTA, status, commands, discover, serial.web/— Static HTML/CSS/JS frontend served from GitHub Pages.
Tests
# 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 testCI (.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| Qty | Value | Footprint | References |
|---|---|---|---|
| 61 | 1k | Resistor_SMD:R_0402_1005Metric | R1003, R1004, R1005, R1008, R1009, R1011, R1012, R1013, R1014, R1015, R1016, R1017, R1018, R1019, R1020, R1301 +45 |
| 52 | 0.1uF | Capacitor_SMD:C_0402_1005Metric | C201, C204, C205, C206, C307, C401, C502, C503, C505, C507, C509, C512, C513, C514, C515, C1001 +36 |
| 22 | 2k | Resistor_SMD:R_1206_3216Metric | R509, R510, R511, R512, R513, R514, R515, R516, R708, R709, R710, R711, R716, R717, R907, R908 +6 |
| 17 | 10uF | Capacitor_SMD:C_0805_2012Metric | C501, C504, C506, C508, C701, C704, C709, C801, C802, C803, C805, C901, C902, C907, C1201, C1202 +1 |
| 17 | PTVS30VP1UP | Diode_SMD:D_SOD-128 | D301, D506, D507, D508, D509, D510, D511, D512, D513, D603, D604, D605, D606, D706, D707, D708 +1 |
| 12 | 1M | Resistor_SMD:R_0402_1005Metric | R517, R518, R519, R520, R521, R522, R523, R524, R712, R713, R714, R715 |
| 12 | 2913730000 | conduit:2913730000 | J101, J102, J103, J104, J105, J106, J107, J108, J109, J110, J111, J112 |
| 11 | BSS138P | Package_TO_SOT_SMD:SOT-23 | Q701, Q702, Q1001, Q1002, Q1003, Q1004, Q1005, Q1006, Q1007, Q1008, Q1009 |
| 10 | 20k | Resistor_SMD:R_0402_1005Metric | R1021, R1022, R1023, R1024, R1025, R1026, R1027, R1028, R1307, R1308 |
| 10 | BAV199DW | Package_TO_SOT_SMD:SOT-363_SC-70-6 | D502, D503, D504, D505, D601, D602, D702, D703, D704, D705 |
| 9 | 0.1u | Capacitor_SMD:C_0402_1005Metric | C404, C405, C406, C407, C408, C410, C411, C413, C416 |
| 9 | 10uF | Capacitor_SMD:C_1210_3225Metric | C302, C303, C305, C1101, C1106, C1107, C1109, C1110, C1113 |
| 8 | 1nF | Capacitor_SMD:C_0402_1005Metric | C903, C904, C905, C906, C909, C910, C911, C912 |
| 8 | 560 | Resistor_SMD:R_0402_1005Metric | R903, R904, R905, R906, R913, R914, R915, R916 |
| 7 | 10k | Resistor_SMD:R_0402_1005Metric | R201, R307, R404, R413, R701, R702, R1006 |
| 7 | 1nF | Capacitor_SMD:C_1206_3216Metric | C101, C102, C103, C208, C209, C210, C211 |
| 7 | 1uF | Capacitor_SMD:C_0402_1005Metric | C202, C510, C511, C601, C602, C603, C604 |
| 6 | 0 | Resistor_SMD:R_0402_1005Metric | R410, R422, R525, R703, R718, R719 |
| 6 | 50mA | Resistor_SMD:R_1206_3216Metric | F601, F602, F603, F604, F701, F702 |
| 6 | ADS1015IDGS | Package_SO:TSSOP-10_3x3mm_P0.5mm | U507, U508, U601, U602, U603, U604 |
| 6 | M3 | MountingHole:MountingHole_3.5mm_Pad_TopBottom | H101, H102, H103, H104, H105, H106 |
| 6 | SS14 | Diode_SMD:D_SMA | D302, D501, D701, D801, D1101, D1102 |
| 5 | 1.6k | Resistor_SMD:R_0402_1005Metric | R605, R606, R607, R608, R1105 |
| 5 | 1uF | Capacitor_SMD:C_1206_3216Metric | C306, C1105, C1108, C1111, C1112 |
| 5 | 4.7k | Resistor_SMD:R_0402_1005Metric | R1001, R1002, R1007, R1010, R1306 |
| 5 | 600Ω@100MHz | Inductor_SMD:L_0603_1608Metric | FB501, FB701, FB702, FB703, FB801 |
| 4 | 10R | Resistor_SMD:R_0402_1005Metric | R203, R204, R205, R206 |
| 4 | 22uF | Capacitor_SMD:C_1206_3216Metric | C301, C309, C314, C315 |
| 4 | 4.7u | Capacitor_SMD:C_0402_1005Metric | C402, C403, C409, C412 |
| 4 | 49.9R | Resistor_SMD:R_0402_1005Metric | R209, R210, R211, R212 |
| 4 | 75R | Resistor_SMD:R_0402_1005Metric | R213, R214, R215, R216 |
| 4 | 82 | Resistor_SMD:R_0805_2012Metric | R609, R610, R611, R612 |
| 4 | ISO1212 | Package_SO:SSOP-16_3.9x4.9mm_P0.635mm | U901, U902, U903, U904 |
| 4 | WS2812B | conduit:LED_WS2812B-Mini_PLCC4_3.5x3.5mm | D1201, D1202, D1203, D1204 |
| 3 | 10nF | Capacitor_SMD:C_0402_1005Metric | C1103, C1104, C1114 |
| 3 | 1mm | TestPoint:TestPoint_Pad_D1.0mm | TP401, TP402, TP403 |
| 3 | 2M | Resistor_SMD:R_1206_3216Metric | R101, R102, R103 |
| 3 | 33R | Resistor_SMD:R_0402_1005Metric | R207, R217, R218 |
| 3 | B0505S-1WR3 | conduit:Converter_DCDC_EVISUN_BXXXXS-1WR3 | U501, U701, U801 |
| 3 | Fiducial | Fiducial:Fiducial_1mm_Mask2mm | FID101, FID102, FID103 |
| 3 | TPS4H000A-Q1 | Package_SO:ETSSOP-20-1EP_4.4x6.5mm_P0.65mm_EP3x4.2mm | U1002, U1003, U1301 |
| 2 | 0.1uF | Capacitor_SMD:C_0805_2012Metric | C308, C311 |
| 2 | 0.1uF | Capacitor_SMD:C_0603_1608Metric | C304, C1102 |
| 2 | 100k | Resistor_SMD:R_0402_1005Metric | R1102, R1103 |
| 2 | 100uF | Capacitor_Tantalum_SMD:CP_EIA-3528-21_Kemet-B | C310, C316 |
| 2 | 15p | Capacitor_SMD:C_0402_1005Metric | C414, C415 |
| 2 | 2.4k | Resistor_SMD:R_0402_1005Metric | R1107, R1303 |
| 2 | 27 | Resistor_SMD:R_0402_1005Metric | R411, R414 |
| 2 | ADS1220xPW | Package_SO:TSSOP-16_4.4x5mm_P0.65mm | U704, U705 |
| 2 | CD-DF406SL | conduit:Diode_Bridge_Bourns_CD-DF4xxS | D303, D304 |
| 2 | ISO1540 | Package_SO:SOIC-8_3.9x4.9mm_P1.27mm | U502, U503 |
| 2 | ISO6741 | Package_SO:SOIC-16W_7.5x10.3mm_P1.27mm | U702, U703 |
| 2 | TCA9555PWR | Package_SO:TSSOP-24_4.4x7.8mm_P0.65mm | U401, U1001 |
| 2 | TLP175A | Package_SO:Toshiba_SOIC-4-6_4.4x3.6mm_P1.27mm | U304, U803 |
| 2 | TMP117xxDRV | Package_SON:WSON-6-1EP_2x2mm_P0.65mm_EP1x1.6mm | U504, U506 |
| 2 | green | LED_SMD:LED_0402_1005Metric | D306, D402 |
| 1 | 11.5k | Resistor_SMD:R_0402_1005Metric | R311 |
| 1 | 12.1k | Resistor_SMD:R_0402_1005Metric | R208 |
| 1 | 120R | Resistor_SMD:R_0805_2012Metric | R802 |
| 1 | 1kΩ@100MHz | Inductor_SMD:L_0402_1005Metric | FB201 |
| 1 | 2.2uH | Inductor_SMD:L_1008_2520Metric | L301 |
| 1 | 22nF | Capacitor_SMD:C_0402_1005Metric | C207 |
| 1 | 240 | Resistor_SMD:R_0402_1005Metric | R1104 |
| 1 | 240k | Resistor_SMD:R_0402_1005Metric | R1101 |
| 1 | 25k | Resistor_SMD:R_0402_1005Metric | R302 |
| 1 | 270pF | Capacitor_SMD:C_0402_1005Metric | C312 |
| 1 | 27k | Resistor_SMD:R_0402_1005Metric | R1106 |
| 1 | 3.3nF | Capacitor_SMD:C_0402_1005Metric | C313 |
| 1 | 3.3u | Inductor_SMD:L_0603_1608Metric | L401 |
| 1 | 33 | Resistor_SMD:R_0402_1005Metric | R405 |
| 1 | 4.7nF | Capacitor_SMD:C_0402_1005Metric | C1115 |
| 1 | 4.7uH | Inductor_SMD:L_Sunlord_SWPA5040S | L302 |
| 1 | 470pF | Capacitor_SMD:C_0402_1005Metric | C203 |
| 1 | 51k | Resistor_SMD:R_0402_1005Metric | R1108 |
| 1 | 6.34k | Resistor_SMD:R_0402_1005Metric | R309 |
| 1 | 60.4k | Resistor_SMD:R_0402_1005Metric | R310 |
| 1 | 63.4R | Resistor_SMD:R_0402_1005Metric | R303 |
| 1 | 68.1k | Resistor_SMD:R_0402_1005Metric | R304 |
| 1 | 750342156 | conduit:750342156 | L1101 |
| 1 | ABM8-272-T3 (12Mhz) | Crystal:Crystal_SMD_Abracon_ABM8G-4Pin_3.2x2.5mm | Y401 |
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 mm

Similar boards
- 2 layers70 × 55 mm

Rectifier
duanestorey/hifi-amp
A high-fidelity four-channel amplifier with active-crossovers and room correction
49 parts1 - 6 layers100 × 67.8 mm

12v-2x6
eggsampler/12v-2x6-Current-Monitor
For more information, see the schematic or the PCB layout (KiCanvas)
152 parts1 - 2 layers100.1 × 51.8 mm

- 2 layers115 × 100 mm

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 mm

Edge18-main rev a
Gecesars/18-gateway-industrial
Gateway Industrial Modbus/CAN Universal — baseline técnica e acompanhamento do projeto
185 parts - 4 layers100 × 85 mm

- 2 layers99.6 × 100 mm

- 4 layers69.5 × 60 mm
