Skip to the content
PCBKitNew board
2 layers41.5 × 29.1 mmRoller carrier, the printed circuit board in 3D

Zigbee retrofit for a Heim & Haus solar roller shutter: ESP32-H2 sleepy end device firmware (ESP-IDF) and carrier PCB, for Home Assistant ZHA

Size
41.5 × 29.1 mm
Copper layers
2
Thickness
1.6 mm
Parts
35
Nets
22
Pads
96
Tracks, vias
219, 73
Pours
5
Routed
Yes
KiCad
KiCad 10.0 (file 20260206)
Created
3 Oct 2026
Updated
7 Oct 2026

Overview

Roller carrier is an open-source printed circuit board by mschneider-git, from the mschneider-git/zigbee-roller-shutter repository on GitHub, published under the MIT licence. It is a 2-layer board of 41.5 × 29.1 mm with 35 parts on 22 nets, routed with 219 tracks and 73 vias.

It is built around the AO3407A and SMF13A. Its parts include 13 resistors, 10 capacitors, 6 connectors, 1 IC and 1 diode. It belongs with the power boards of this library.

Main components

2

README

hardware/carrier/README.md

Carrier board Roller-H2 Zero v2

2-layer board (41.5 × 29.1 mm, U-shaped) that plugs directly onto the 3-pin keypad header of the original controller board. A Waveshare ESP32-H2-Zero sits on spacers above the regulator and dividers and is soldered in by hand; JLCPCB can assemble everything else.

TopBottom
Carrier board, top sideCarrier board, bottom side

The H2-Zero in the renders is a simplified model generated by ../lib/make_footprints.py from the product photos. For J1 the renders use WAGO's 3D model of the 2060-452/998-404 (from WAGO's CAD download, not included here because of its terms of use); the board itself references a simplified model of the terminal from the same script.

Connectors

RefWhatPosition
J6 / J71×9 holes for the H2-Zero (soldered by hand), USB-C up, antenna downleft
J31×3 socket, bottom side, onto the original keypad header (GND · DOWN · UP)bottom right
J41×3 header, 90°, membrane keypad, pins towards the board centre, GND on topbottom right
J1WAGO 2060-452, battery+ looped through: cut the red battery wire and put both ends into the two spring terminalsright arm, wire entry at the top
J51×3 header, 90°, measurement inputs SOL · M+ · M− (labels on the bottom side), optional, see belowleft arm, pins pointing up

USB-C, BOOT and RESET are on the H2-Zero itself.

Circuit

USB-C, ESD protection, BOOT/RESET and the EN circuit are on the H2-Zero.

  • Battery+ (VBAT_RAW) → PTC 100 mA (F1) → reverse polarity protection P-MOSFET AO3407A (Q1, gate via 100 kΩ to GND) → VBAT → 10 Ω (R1) → VIN. The two WAGO poles are connected by a copper area on both layers; the motor current only flows through this area, not through the electronics.
  • VIN: TVS SMF13A (D1) against spikes from the motor, 10 µF (C1) → TPS629203 (U1) → 3.3 V to the 3V3 pin of the H2-Zero. VSET open = 3.3 V, MODE 64.9 kΩ = auto PFM/PWM 1 MHz, EN (pin 7) to VIN, PG open. The 5V pin of the H2-Zero stays open.
  • Dividers 1 MΩ / 220 kΩ / 100 nF each (factor 5.55, 12.6 V → 2.27 V): battery (after the reverse polarity protection), motor+, motor−, solar.
  • Keys: DOWN/UP each via 1 kΩ to the H2-Zero, connected 1:1 between J3 and J4.
  • 32 kHz crystal Y1 (CL 12.5 pF) with C11/C12 (18 pF each) on IO13/IO14.
  • Regulator and dividers sit below the H2-Zero. There is no copper on either layer below its ceramic antenna (bottom end, at the board edge).
  • Ground only via J3 (keypad GND). Do not connect battery− (20 mΩ shunt on the original board).

GPIO assignment

Matches the firmware defaults:

SignalGPIORow / pin
Battery (divider)IO4J6 / 8
Motor+ (divider)IO5J6 / 9
Motor− (divider)IO1J6 / 5
Solar (divider)IO2J6 / 6
UP keyIO10J7 / 9
DOWN keyIO11J7 / 8
32 kHz crystalIO13 / IO14J7 / 6, 5
3V3 / GND–J6 / 3, 2

Mounting the H2-Zero and height

The H2-Zero is soldered directly into J6/J7 with its pin headers. The plastic strip of the header (about 2.5 mm) acts as spacer: the regulator and dividers sit below it, the tallest part is the inductor L1 at 1.2 mm.

  • Height above the board: 2.5 mm spacer + 1 mm H2-Zero board + about 3.2 mm USB-C connector ≈ 6.7 mm.
  • In the housing of the Heim & Haus controller there are only about 6 mm free above the board at the left edge. Check before soldering that the lid closes; if needed, shorten the plastic strip (leave at least 1.5 mm above L1).
  • Cut the pins flush on the bottom side: J3 plugs onto the keypad header there.

Preparing the H2-Zero

  1. Flash it before soldering via its USB-C. Later, flash over USB only without battery (J1 open), otherwise its LDO and the TPS629203 feed the 3V3 rail at the same time. Further updates via Zigbee OTA.
  2. Remove the RGB LED (IO8): it draws 0.5–1 mA even when off.
  3. The H2-Zero's LDO (ME6217) is back-fed via 3V3 and draws around 50 µA according to its datasheet. Measure the sleep current; if it is clearly too high, remove the LDO before soldering (USB flashing then only works with the battery connected, OTA is unaffected).

Generating and checking

bash
python3 make_board.py                         # placement, nets, silkscreen
python3 route.py /path/to/freerouting.jar     # Freerouting, GND areas, DRC (up to 5 attempts)
python3 ../fab.py carrier                     # fab/gerber.zip, bom_jlc.csv, cpl_jlc.csv

route.py always starts from a fresh make_board.py. Freerouting (2.x, needs Java) does not give the same result on every run and occasionally hangs; the script checks every attempt with the DRC and routes again up to five times. A run takes 2–7 minutes.

Expected: 0 DRC errors, 0 unconnected items. The remaining "silk_edge_clearance" warnings are intended (header pins protrude over the edge).

Ordering at JLCPCB

  1. Upload fab/gerber.zip, 2 layers, 1.6 mm.
  2. PCB Assembly (Economic), Assembly side: Top, fab/bom_jlc.csv and fab/cpl_jlc.csv. All parts are regular JLCPCB stock, no Global Sourcing needed. JLCPCB solders the 90° headers J4 and J5 (C92159) by hand. J3 (8.5 mm socket, C42431866) is in the BOM/CPL but sits on the bottom side: with "Assembly side: Top", JLCPCB leaves it out (Economic assembles one side only).
  3. In the placement preview, check the rotation of U1 (SOT-583, pin 1 = FB/VSET), Q1, J1 (wire entry up), J4 (pins towards the board centre) and J5 (pins up).

Assembly by hand

  1. If J3 is not fitted: solder a 1×3 socket (8.5 mm) from the bottom side, opening away from the board. Plug it onto the keypad header of the original board to align it, then solder.
  2. Measure before soldering the H2-Zero: battery on J1 → 3.3 V at J6 pin 3, ≈ 2.2 V at J6 pin 8 (IO4) with a 12.2 V battery.
  3. Solder the H2-Zero (flashed, RGB LED removed) with its pin headers on spacers into J6/J7, USB-C towards the "USB" label. Cut the pins flush on the bottom side.
  4. Cut the red battery wire, put both ends into J1, plug the board onto the keypad header and the keypad into J4.
  5. Optional: connect J5 to the controller's terminal block, SOL to solar + (yellow), M+ and M− to the motor terminals (blue, brown). Without these wires the firmware works with the battery voltage alone (see the main README).

Parts

35
QtyValueFootprintReferences
5100nC_0603_1608MetricC5, C7, C8, C9, C10
41MR_0603_1608MetricR12, R14, R16, R18
4220kR_0603_1608MetricR13, R15, R17, R19
218pC_0603_1608MetricC11, C12
21kR_0603_1608MetricR8, R9
110R_0603_1608MetricR1
1100kR_0603_1608MetricR5
110uC_0805_2012MetricC4
110u 25VC_0805_2012MetricC1
12.2uL_1008_2520MetricL1
122uC_0805_2012MetricC2
132.768kCrystal_SMD_3215-2Pin_3.2x1.5mmY1
164.9kR_0603_1608MetricR2
1AO3407ASOT-23Q1
1H2-Zero soldered leftPinSocket_1x09_P2.54mm_VerticalJ6
1H2-Zero soldered rightPinSocket_1x09_P2.54mm_VerticalJ7
1Membrane keypadPinHeader_1x03_P2.54mm_HorizontalJ4
1PTC 100mAFuse_1206_3216MetricF1
1SMF13AD_SOD-123FD1
1Solar M+ M-PinHeader_1x03_P2.54mm_HorizontalJ5
1TPS629203DRLRSOT-583-8U1
1WAGO 2060-452 battery+footprints:WAGO_2060-452J1
1to keypad headerPinSocket_1x03_P2.54mm_VerticalJ3

Questions

How big is the Roller carrier PCB?

It measures 41.5 × 29.1 mm and has 2 copper layers, 1.6 mm thick.

What parts does the Roller carrier use?

35 parts, built around the AO3407A and SMF13A. 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 Roller carrier KiCad files?

From the mschneider-git/zigbee-roller-shutter repository on GitHub, at the commit this page was made from: the board is hardware/carrier/roller_carrier.kicad_pcb. PCBKit opens the board in the browser, with nothing to install.

Can I use the Roller carrier 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).

Similar boards

  • 2 layers20.3 × 69.7 mmPG attiny404, the printed circuit board in 3D

    PG attiny404

    fabiansteiner/OpenValve

    3D-printable pinch valve for irrigation and sensor-driven liquid control.

    41 parts276CERN-OHL-S-2.0
  • 2 layers78 × 84 mmLC meter, the printed circuit board in 3D

    LC meter

    schuyler4/LCR_Meter

    An LCR meter design.

    93 parts6MIT
  • 2 layers46.1 × 30 mmC64 USB C PD Power Adapter, the printed circuit board in 3D

    C64 USB C PD Power Adapter

    mamejay/C64-USB-C-PD-Power-Adapter

    USB-C PD power adapter for the Commodore 64 (KiCad, JLCPCB-ready)

    51 parts
  • 4 layersCupwarmer hw, the printed circuit board in 3D

    Cupwarmer hw

    mash/cupwarmer

    目標は 15W 級の Qi EPP 受電と、12V・約12W のヒーター。保温と軽い再加熱を狙って開発しています。

    54 parts
  • 4 layers80 × 70 mmRobot, the printed circuit board in 3D

    Robot

    tekkura/sr-cad

    All 3D CAD and PCB design files for smartphone-robot project.

    370 partsApache-2.0
  • 4 layers38.4 × 128.5 mmPlantpal, the printed circuit board in 3D

    Plantpal

    teapotlaboratories/plantpal

    Your pal in plant care

    121 parts98MIT
  • 2 layers115.2 × 78.6 mmL0destar, the printed circuit board in 3D

    L0destar

    m4rkw/l0destar

    l0destar open-source tracker project

    164 parts43
  • 2 layers36.8 × 90.9 mmBwlr1e, the printed circuit board in 3D

    Bwlr1e

    teapotlaboratories/bwlr1e

    Teapotlabs BWLR1E: Wireless Environmental Sensor with Energy Harvesting from Solar Energy

    65 parts36MIT