Skip to the content
PCBKitNew board
2 layers48 × 49 mmSwitch, the printed circuit board in 3D

Components for a CAN-bus home-automation system: relay/rollershutter/ light/button/sensor nodes on a shared CAN bus, bridged to MQTT (and from there to openHAB or Home Assistant) by a gateway.

Size
48 × 49 mm
Copper layers
2
Thickness
1.6 mm
Parts
67
Nets
62
Pads
238
Tracks, vias
496, 46
Pours
4
Routed
Yes
KiCad
KiCad 6 (file 20211014)
Created
14 Mar 2026
Updated
7 Nov 2026

Overview

Switch is an open-source printed circuit board by Th3Link, from the Th3Link/homeautomation repository on GitHub, published under the GPL-3.0 licence. It is a 2-layer board of 48 × 49 mm with 67 parts on 62 nets, routed with 496 tracks and 46 vias.

It is built around the ESP32-WROOM-32, LM5163DDA and PESD2CAN. Its parts include 22 resistors, 14 capacitors, 10 connectors, 6 ICs and 4 switches. It belongs with the home automation and IoT boards and the ESP32 boards of this library.

Main components

3

README

README.md

homeautomation

Components for a CAN-bus home-automation system: relay/rollershutter/ light/button/sensor nodes on a shared CAN bus, bridged to MQTT (and from there to openHAB or Home Assistant) by a gateway. This repository holds the hardware (KiCad), mechanics (3D-printable enclosures), and firmware for the whole system.

Start here: docs/index.md — the full documentation index (requirements, architecture decisions, protocol specs), also built into every crate's cargo doc output and published to GitHub Pages.

Software

The firmware is Rust (#![no_std], embassy async, esp-hal), organized as one Cargo workspace under software/:

  • common-core / common-hardware — CAN wire-format types and ESP32 hardware-support helpers shared by both firmware lines.
  • gateway-core / gateway-hardware — the CAN↔MQTT bridge: web config UI, /control.json RPC, self- and CAN-bus OTA update, over wired Ethernet (DHCPv4 + SLAAC, no WiFi).
  • cancomponents-core / cancomponents-hardware — the node firmware living on the bus: relays, rollershutters, buttons, lights.
  • tools/mqtt-log-reader — a small Python tool for reading back the gateway's MQTT log/debug topics.
  • sim/ — ./sim up: the unchanged gateway and node firmware in QEMU, several gateways with their nodes on virtual CAN buses; press buttons, set what the sensors measure, watch relays and frames, in a TUI, from Python scripts or in pytest.
  • legacy/ — the original C++/ESP-IDF implementation, kept for reference. No longer built by CI.

Building

The *-core crates are hardware-independent and build/test on any machine with stable Rust:

bash
cargo test -p gateway-core -p cancomponents-core -p common-core

The *-hardware crates target Xtensa (ESP32) and need Espressif's Rust toolchain fork, installed via espup:

bash
cargo install espup
espup install
source "$HOME/export-esp.sh"   # needed once per new shell

Then, from a *-hardware crate directory (e.g. software/gateway-hardware/):

bash
cargo run --release

cargo run flashes over USB serial and opens a monitor, via espflash (configured as each crate's custom runner in its own .cargo/config.toml).

Hardware

Relais

Disclaimer: if you put mains voltage on a relais board, make sure you know what you are doing. These components are experimental and you are in charge of your own actions. Be safe — if you're unsure, get an expert or leave it.

Three PCBs, one shared firmware, to switch power on and off:

  • Solid-state relais (SSR) — mains voltage only (~230V @ 50-60Hz), up to 1A per relay, six relais sharing one 1A fuse. Be careful with capacitive/inductive loads; handles small rollershutters, heating actuators, and electro-magnetic contactors fine.
  • Regular relais — up to 16A each, no on-board fuse (protect your own circuits). No arc-quenching chamber, so an electro-magnetic contactor is a better choice for heavy inductive loads (motors, frequency drives).
  • Rollershutter — two cascaded relais per channel (power, then up/down), with software interlocking so up and down are never active at once.

All three use the same firmware and the same ESP32 pinning, and each has one extension port for up to 4 additional relay or sensor boards.

Lightswitch, sensors, CAN header/hub, UART adapter

Additional boards in hardware/ — see each board's own KiCad project for details; written documentation for these is still a work in progress.

CAN bus and MQTT protocol

See docs/protocol-can.md for the byte-level CAN wire format shared by every component, and software/gateway-core/docs/protocol-mqtt.md for the gateway's MQTT topic scheme. (Extension-board channel/button numbering conventions used by the node firmware — e.g. which CAN NO/button-id ranges map to which extension address — are documented at the node firmware level; docs/protocol-can.md covers the CAN frame format itself.)

CI

  • CI — cargo fmt / cargo clippy for every crate, cargo nextest with coverage and an MSRV check for the *-core crates.
  • Docs — cargo doc for every crate, published to GitHub Pages.
  • Security audit — cargo-audit against the RustSec advisory database, on every dependency change and once daily.
  • Renovate — automated dependency-update PRs, once daily.

software/legacy/ (the original C++/ESP-IDF code) is no longer built by CI — see its own README.md for the ESP-IDF build steps if you need to reproduce it.

License

GNU General Public License v3.0 (or later) — see LICENSE.

This is meant to be freely buildable, flashable, and modifiable hardware and firmware. GPLv3 was chosen deliberately: its copyleft means anything built on this stays open, and its Section 6 "Installation Information" requirement means anyone who conveys a modified version as part of a physical product also has to provide what's needed to install your own modified firmware on it — nobody gets to lock you out of hardware you own. All schematics, layouts, mechanics, tools, and software are provided so you can fix things yourself rather than throwing them away.

Contribution

Feel free to report issues or open a pull request.

Parts

67
QtyValueFootprintReferences
12100RResistor_SMD:R_0603_1608Metric_Pad0.98x0.95mm_HandSolderR16, R17, R18, R19, R21, R22, R23, R24, R35, R36, R37, R38
6100nCapacitor_SMD:C_0603_1608Metric_Pad1.08x0.95mm_HandSolderC1, C4, C8, C9, C10, C11
510KResistor_SMD:R_0603_1608Metric_Pad0.98x0.95mm_HandSolderR4, R7, R9, R11, R13
4MountingHole:MountingHole_2.2mm_M2, , ,
410uCapacitor_SMD:C_0603_1608Metric_Pad1.08x0.95mm_HandSolderC3, C6, C7, C12
4?RResistor_SMD:R_0603_1608Metric_Pad0.98x0.95mm_HandSolderRESR1, RFB1, RFB2, RRON1
4Conn_01x06_Femaleawesome:02x03MicroMatchJ8, J9, J10, J11
4SW_PushButton_Switch_SMD:SW_SPST_TL3305ASW1, SW2, SW3, SW4
3CCapacitor_SMD:C_0603_1608Metric_Pad1.08x0.95mm_HandSolderC13, CBST1, CFF1
22K2Resistor_SMD:R_0603_1608Metric_Pad0.98x0.95mm_HandSolderR5, R6
2Button-Sensors-MicroMatch2X03awesome:02x03MicroMatchJ1, J3
2DDiode_SMD:D_SOD-123D1, D4
2IRDAConnector_PinHeader_2.54mm:PinHeader_1x03_P2.54mm_VerticalJ5, J6
1100KResistor_SMD:R_0603_1608Metric_Pad0.98x0.95mm_HandSolderR25
11uCapacitor_SMD:C_0603_1608Metric_Pad1.08x0.95mm_HandSolderC2
14K7Resistor_SMD:R_0603_1608Metric_Pad0.98x0.95mm_HandSolderR15
1ESP32-WROOM-32awesome:ESP32-WROOM-32U3
1LInductor_SMD:L_1210_3225Metric_Pad1.42x2.65mm_HandSolderL1
1LM5163Package_SO:Texas_R-PDSO-G8_EP2.95x4.9mm_Mask2.4x3.1mm_ThermalViasU5
1MCP1703A-3302_SOT89Package_TO_SOT_SMD:SOT-89-3_HandsolderingU4
1MCP2562-E-SNPackage_SO:SOIC-8_3.9x4.9mm_P1.27mmU2
1PESD2CANPackage_TO_SOT_SMD:SOT-23U1
1RResistor_SMD:R_0603_1608Metric_Pad0.98x0.95mm_HandSolderR27
1RJ45-CANConnector_RJ:RJ45_OST_PJ012-8P8CX_VerticalJ7
1Screw_Terminal_01x02TerminalBlock_RND:TerminalBlock_RND_205-00001_1x02_P5.00mm_HorizontalJ2
1wuerthDebug6awesome:wuerthDebug6U6

Questions

How big is the Switch PCB?

It measures 48 × 49 mm and has 2 copper layers, 1.6 mm thick.

What parts does the Switch use?

67 parts, built around the ESP32-WROOM-32, LM5163DDA and PESD2CAN. 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 Switch KiCad files?

From the Th3Link/homeautomation repository on GitHub, at the commit this page was made from: the board is hardware/switchModule/switch.kicad_pcb and its schematic hardware/canheader/canHeader.kicad_sch. PCBKit opens the board in the browser, with nothing to install.

Can I use the Switch design in my own project?

Its repository publishes it under the GPL-3.0 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 Th3Link/homeautomation

8
  • 2 layers112 × 90 mmSsr, the printed circuit board in 3D

    Ssr

    Th3Link/homeautomation

    Components for a CAN-bus home-automation system: relay/rollershutter/ light/button/sensor nodes on a shared CAN bus, bridged to MQTT (and from there to openHAB or Home Assistant) by a gateway.

    111 partsGPL-3.0
  • 2 layers188 × 97 mmRelais, the printed circuit board in 3D

    Relais

    Th3Link/homeautomation

    Components for a CAN-bus home-automation system: relay/rollershutter/ light/button/sensor nodes on a shared CAN bus, bridged to MQTT (and from there to openHAB or Home Assistant) by a gateway.

    101 partsGPL-3.0
  • 4 layers75 × 51 mmMqtt gateway, the printed circuit board in 3D

    Mqtt gateway

    Th3Link/homeautomation

    Components for a CAN-bus home-automation system: relay/rollershutter/ light/button/sensor nodes on a shared CAN bus, bridged to MQTT (and from there to openHAB or Home Assistant) by a gateway.

    64 partsGPL-3.0
  • 2 layers80 × 86 mmPwm adapter, the printed circuit board in 3D

    Pwm adapter

    Th3Link/homeautomation

    Components for a CAN-bus home-automation system: relay/rollershutter/ light/button/sensor nodes on a shared CAN bus, bridged to MQTT (and from there to openHAB or Home Assistant) by a gateway.

    60 partsGPL-3.0
  • 2 layers48 × 49 mmSensors, the printed circuit board in 3D

    Sensors

    Th3Link/homeautomation

    Components for a CAN-bus home-automation system: relay/rollershutter/ light/button/sensor nodes on a shared CAN bus, bridged to MQTT (and from there to openHAB or Home Assistant) by a gateway.

    58 partsGPL-3.0
  • 2 layers126.5 × 42 mmCanhubstar, the printed circuit board in 3D

    Canhubstar

    Th3Link/homeautomation

    Components for a CAN-bus home-automation system: relay/rollershutter/ light/button/sensor nodes on a shared CAN bus, bridged to MQTT (and from there to openHAB or Home Assistant) by a gateway.

    17 partsGPL-3.0
  • 2 layers61 × 32 mmCanHeader, the printed circuit board in 3D

    CanHeader

    Th3Link/homeautomation

    Components for a CAN-bus home-automation system: relay/rollershutter/ light/button/sensor nodes on a shared CAN bus, bridged to MQTT (and from there to openHAB or Home Assistant) by a gateway.

    12 partsGPL-3.0
  • 2 layers22 × 36 mmDebug adapter, the printed circuit board in 3D

    Debug adapter

    Th3Link/homeautomation

    Components for a CAN-bus home-automation system: relay/rollershutter/ light/button/sensor nodes on a shared CAN bus, bridged to MQTT (and from there to openHAB or Home Assistant) by a gateway.

    11 partsGPL-3.0

Similar boards

  • 4 layers90 × 50 mmGreenmobi bms, the printed circuit board in 3D

    Greenmobi bms

    G-Pereira/greenmobi-bms

    A VESC compatible battery management system

    141 parts31CERN-OHL-S-2.0
  • 4 layers100.3 × 50.3 mmGreenmobi drive, the printed circuit board in 3D

    Greenmobi drive

    G-Pereira/greenmobi-drive

    A FOC motor drive compatible with VESC

    160 parts1CERN-OHL-S-2.0
  • 2 layers32.4 × 28.4 mmRegulador Vigi V3, the printed circuit board in 3D

    Regulador Vigi V3

    FarwayDot/Adapter_PowerSupply_Vigi

    21 parts
  • 2 layers202.6 × 66 mmWafel eval board, the printed circuit board in 3D

    Wafel eval board

    LVladymyr/WAFEL-Evaluation-Board

    Evaluation board for TI BQ76952 multi-chemistry BMS IC

    253 partsCERN-OHL-S-2.0
  • 4 layers100 × 99.9 mmSolar Project Rev1, the printed circuit board in 3D

    Solar Project Rev1

    Phil-CIA/Solar-Project-200w

    Solar Project 200W is a prototype-first hardware and firmware effort for a 200W-class solar charging system built around a 4S LiFePO4 battery domain.

    174 parts
  • 4 layers50 × 50 mmHSCanT, the printed circuit board in 3D

    HSCanT

    cherry-embedded/HSCanT-hardware

    HSCanT is a USB to 4-channel CAN FD tool designed based on the HPM5321 chip.

    130 parts52Apache-2.0
  • 2 layers26 × 13.6 mmCFDC embedded, the printed circuit board in 3D

    CFDC embedded

    ucandevices/CFDC_embedded

    Embedded code and PCB for CAN FD to USB converter

    36 parts15LGPL-3.0
  • 4 layers55 × 35 mmCarrier, the printed circuit board in 3D

    Carrier

    jonsole/toyotune

    Daughter-board for reprogramming 1990's Toyota ECUs

    30 parts8GPL-3.0