Skip to the content
2 layers61 × 32 mmCanHeader, 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
61 × 32 mm
Copper layers
2
Thickness
1.6 mm
Parts
12
Nets
10
Pads
48
Tracks, vias
81, 0
Pours
1
Routed
Yes
KiCad
KiCad 6 (file 20211014)
Created
14 Mar 2026
Updated
7 Nov 2026

Overview

CanHeader 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 61 × 32 mm with 12 parts on 10 nets, routed with 81 tracks and 0 vias.

Its parts include 4 connectors, 2 resistors and 2 diodes. It belongs with the home automation and IoT boards of this library.

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

12
QtyValueFootprintReferences
4MountingHoleMountingHole:MountingHole_3.2mm_M3_DIN965H1, H2, H3, H4
2LEDLED_SMD:LED_0603_1608Metric_Pad1.05x0.95mm_HandSolderD1, D2
2RResistor_SMD:R_0603_1608Metric_Pad0.98x0.95mm_HandSolderR1, R2
2RJ45-CANConnector_RJ:RJ45_OST_PJ012-8P8CX_VerticalJ3, J4
1Conn_01x08_MaleConnector_PinHeader_2.54mm:PinHeader_1x08_P2.54mm_VerticalJ2
1WAGO250-208awesome:WAGO250-208J1

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
  • 2 layers48 × 49 mmSwitch, the printed circuit board in 3D

    Switch

    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.

    67 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 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

  • 2 layersNrf bga, the printed circuit board in 3D

    Nrf bga

    github-linguist/linguist

    Language Savant. If your repository's language is being reported incorrectly, send us a pull request!

    12 parts14kMIT
  • 2 layers66.9 × 74.5 mmDeskHop, the printed circuit board in 3D

    DeskHop

    hrvach/deskhop

    Fast Desktop Switching Device

    12 parts7.9kGPL-3.0
  • 2 layers40 × 15 mmSensors, the printed circuit board in 3D

    Sensors

    google/mozc-devices

    Circuit diagrams and firmware source code for Gboard DIY keyboards

    12 parts3kApache-2.0
  • 2 layers42.7 × 56.5 mmTle6240 driver, the printed circuit board in 3D

    Tle6240 driver

    rusefi/rusefi

    rusefi - GPL internal combustion engine control unit

    12 parts1.2k
  • 2 layers49 × 25 mm5v boost regulator, the printed circuit board in 3D

    5v boost regulator

    hackclub/OnBoard

    💡 Join 1,000 teenagers and make your first PCB with a $100 grant!

    12 parts915
  • 2 layers28.3 × 10.3 mmTap Photosensor PCB, the printed circuit board in 3D

    Tap Photosensor PCB

    VoronDesign/Voron-Tap

    Tap is a nozzle-based z-probe for the V2 and Trident printer designs. The entire toolhead moves to trigger an optical switch. Tap offers many advantages:

    12 parts716GPL-3.0
  • 2 layers25.4 × 70.4 mmTpmsniffer, the printed circuit board in 3D

    Tpmsniffer

    stacksmashing/pico-tpmsniffer

    A simple, very experimental TPM sniffer for LPC bus

    12 parts696

Questions

How big is the CanHeader PCB?

It measures 61 × 32 mm and has 2 copper layers, 1.6 mm thick.

What parts does the CanHeader use?

12 parts. 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 CanHeader KiCad files?

From the Th3Link/homeautomation repository on GitHub, at the commit this page was made from: the board is hardware/canheader/canHeader.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 CanHeader 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).