hoermann-hcp2-adapter

Public

@thiesgerken

Share hoermann-hcp2-adapter

Check access before sharing the link.

Who can open this board

Anyone can open this board. No sign-in is required.

This link opens the latest version. Copying it does not grant additional access.

Loading 3D model… large boards can take a moment.

README

Hörmann HCP2 Adapter

An open carrier PCB and 3D-printable enclosure for connecting an ESP32-C3 to a Hörmann Series 4 garage door opener.


65 × 44.5 mm carrier PCB

Ventilated lid

Fitted electronics tray

[!CAUTION] Verify the pinout of your own opener and every conductor of your cable before connecting anything. See Variants.

Use this project entirely at your own risk. I am not responsible for any damage, injury, loss, or other consequence resulting from its use in any way. This independent project is not affiliated with, endorsed by, or sponsored by Hörmann.

This is the documentation repository for how I built my adapter around the ESPHome Hörmann HCP component. It may be useful for other people building one as well.

It includes:

  • 🧩 a fully routed two-layer KiCad carrier PCB with project-specific footprints
  • ⚙️ reproducible Python generators for the schematic, PCB, manufacturing outputs, and renders
  • 📦 a compact, parametric build123d enclosure matched directly to the PCB geometry
  • 🔌 a ready-to-flash ESPHome configuration with Wi-Fi provisioning
  • 🖨️ printable STL files and 3MF assembly previews
  • 📚 documented mechanical, electrical, and sourcing decisions

BOM

Electronics

Qty.Ref.ComponentNotes
1PCBCarrier PCBTwo-layer, 65 × 44.5 mm; fabrication files are in pcb/
1U1ESP32-C3 Super MiniSocketed; runs ESPHome
1PS1LM2596 HW-411 buck converterAdjustable; set and verify 5.0 V before connecting U1
1U2Isolated TTL-to-RS485 module3.3 V/5 V, automatic direction control, integrated 120 Ω termination
1J1Unshielded right-angle 6P6C jackAliExpress item 1005003078110991, option 6P6C
1JP11×2, 2.54 mm pin header and jumper shuntDisconnects BUS_PWR before USB is connected
2U1 sockets1×8, 2.54 mm socket headersKeep U1 removable and provide clearance above H4
1W16P6C cableReversed for the cross board, straight-through for straight. See Variants. Verify all six conductors before use

Enclosure

Qty.ComponentNotes
1Printed bottom.stlTray with PCB supports and 6P6C opening
1Printed top.stlVentilated lid
7Ruthex M3 heat-set inserts, 5.7 mm long, Ø4.0 mm holeFour for the lid columns and three for the PCB bosses
4M3 × 6 socket cap screwsLid. Anything longer than 7.5 mm bottoms out in the blind hole
3M3 × 6 socket cap screwsPCB. Full thread engagement would need 7.3 mm, and 4.4 mm is ample for M3

The LM2596 is not galvanically isolated. The complete adapter therefore shares the HCP supply ground even though the RS485 signal path is isolated. Full galvanic isolation would require an isolated DC/DC converter.

🧩 PCB

The pcb/ directory is the electrical source of truth. It contains the shared net model, schematic and layout generators, custom footprints, generated KiCad projects, renders, ERC and DRC reports, and fabrication files.

PropertyValue
Board2 layers, 65 × 44.5 mm
Routing0.5 mm signals, 0.8 mm power, two vias, three on the straight variant
InputHörmann HCP2 through a 6P6C jack
ControllerSocketed ESP32-C3 Super Mini
PowerLM2596 module, approximately 25 V to 5 V
Bus interfaceIsolated automatic-direction TTL-to-RS485 module
MountingThree M3 board holes plus one supported corner

Variants

Two boards are generated from the same sources. They are identical except for how the six contacts of J1 map onto the nets, and each one says on its silkscreen which cable it wants.

VariantSilkscreenCableJ1 contacts
crossCABLE: XReversed (rollover)1, 2 GND · 3 B- · 4 A+ · 5, 6 +25 V
straightCABLE: IIStraight-through 1:11, 2 +25 V · 3 A+ · 4 B- · 5, 6 GND

cross follows the pinout in the ESPHome documentation and is the board built and tested here. The openers measured for this project are mirrored against that pinout, which is why it needs a reversed cable. straight exists for anyone who would rather buy an ordinary 1:1 cable, and for openers that turn out to match it directly.

Measure your own opener before ordering either board. Getting this wrong puts +25 V on the adapter's ground.

Layout

ReferencePart and placement
J1Amphenol 54601-compatible right-angle 6P6C jack, flush with the top board edge
PS143.4 × 21.2 mm LM2596 HW-411 module, input side toward J1
U234 × 18 mm isolated RS485 module on castellated pads
U1ESP32-C3 Super Mini, USB-C flush with the right edge and antenna facing U2
JP1BUS_PWR disconnect jumper for safe USB use
H1, H3, H43.2 mm M3 mounting holes aligned with the enclosure bosses

Generate the design

KiCad must be installed and kicad-cli must be available.

for variant in cross straight; do
  uv run python pcb/schematic.py $variant
  uv run python pcb/pcb.py $variant
done

The generators write editable KiCad files directly to pcb/, run ERC and DRC, render the schematic and both board sides, and package Gerber and Excellon data. Omitting the argument builds cross.

Useful outputs, per variant:

Reversed cableStraight cable
Editable schematichcp-cross.kicad_schhcp-straight.kicad_sch
Schematic PDFhcp-cross-schematic.pdfhcp-straight-schematic.pdf
Editable PCBhcp-cross.kicad_pcbhcp-straight.kicad_pcb
Layer PDFhcp-cross-pcb.pdfhcp-straight-pcb.pdf
Gerber and drill archivehcp-cross-gerbers.ziphcp-straight-gerbers.zip

The title blocks include the short Git hash of HEAD. For release artifacts, commit the sources first, regenerate all four designs, then commit the generated outputs.

📦 Enclosure

The enclosure/ directory contains a two-part indoor enclosure generated with build123d:

  • bottom.stl: tray with three PCB bosses, a support rail, corner columns, and the 6P6C opening
  • top.stl: screw-fastened lid with a hexagonal ventilation pattern
  • preview.stl: open assembly for any STL viewer
  • preview.3mf: colored assembly with lid and internal hardware

The outer size is 87.8 × 54.3 × 34.0 mm. Four M3 screws secure the lid into Ruthex threaded inserts. The enclosure is intended for an indoor garage wall and is not waterproof.

PCB dimensions, hole positions, and module placement are imported from pcb/pcb.py and the KiCad footprints. Only vertical dimensions and simplified component bodies are maintained separately.

uv sync
uv run python enclosure/case.py
uv run python enclosure/case.py --show
uv run python enclosure/case.py --png
uv run python enclosure/test_case.py

See the enclosure documentation for print orientation, clearances, viewer setup, and the mechanical decisions behind the model.

Assembly notes

Before soldering PS1 onto the carrier board:

  1. Power the loose LM2596 module from approximately 25 V with no ESP32 connected.
  2. Adjust its output to 5.0 V using the 103 trimmer.
  3. Check startup and shutdown behavior under load. The output must not overshoot beyond 5.5 V.
  4. Solder PS1 only after those checks pass. Keep BUS_PWR open until the remaining board is assembled.

U1 plugs into two 1×8 socket headers. Install the headers, fasten the PCB inside the enclosure, then insert the ESP32. Never connect USB while BUS_PWR links the externally supplied 5 V rail.

HCP2 interface

The ESPHome documentation specifies this pinout for supported Hörmann Series 4 openers:

PinSignal
1GND
2GND
3B-
4A+
5+25 V
6+25 V

The opener's own jack is mirrored against that table: on the ProMatic 4 measured here, +25 V sits on contacts 1 and 2. The cross board follows the table and therefore needs a reversed (rollover) cable, the kind whose two plugs show opposite conductor order when held identically. The straight board mirrors J1 instead and takes a plain 1:1 cable. See Variants.

Measure your opener and every conductor of your cable before the first connection. Pairing the wrong cable with either board feeds +25 V into the adapter's ground. Doing that here survived only because the opener limits accessory current to 350 mA.

UART settings: 57600 baud, 8 data bits, even parity, 1 stop bit. ESPHome participates as a Modbus server. The configuration is in esphome/ and uses GPIO20 for TX and GPIO21 for RX. That looks reversed next to the net names on the board, and it is not: U2's TTL pads carry the module's own pin names, so its TX pad drives the ESP32 rather than being driven by it.

Troubleshooting

The bus offers a hostile debugging environment: it carries power only during a bus scan, and the opener cuts it again within seconds when the adapter fails to register. That is too short to read a log. These checks all work on the bench instead, with the board on a 25 V supply and the bus disconnected.

Does the transmitter work? Send continuously and measure the DC average, which a plain multimeter resolves. A temporary interval writing 128 zero bytes every 30 ms keeps the line low about 80 % of the time. Measure between U2's A and B pads:

A against BMeaning
about 185 mV, unchanged while sendingThe driver never switches on. Check the pin roles first
moves to roughly 1.6 V while sendingTransmit path is good
exactly 0.000 VThe isolated side is not running. The module is dead or unpowered

The 185 mV is the module's fail-safe bias, so seeing it at all proves the isolated side has power.

Does the receiver work? With the bus disconnected, GPIO21 must sit at a steady 3.3 V. That is U2's receiver output holding the UART idle level. A wandering level below 0.5 V means the receiver output is not driving, or the castellated joint is cold.

Is anything arriving from the bus? Count bytes instead of logging them. A uart: debug: block with a custom sequence replaces the default hex dump, so it costs no log traffic, and a global written to flash with global_preferences->sync() survives the supply being cut. Drive the onboard LED from it and the answer is readable in the garage without a host attached. Set dummy_receiver: true while measuring so the counter does not depend on Modbus draining the UART, and back to false for normal operation.

Verify the counter before trusting it. Point the UART at two free neighbouring pins, GPIO4 and GPIO3, and bridge them. Crosstalk from the transmitting pin is enough to make the counter run even without the bridge.

⚠️ Safety and operating constraints

  • Scope is limited to supported Hörmann Series 4 HCP2 devices.
  • Disconnect mains power and any emergency battery before installation.
  • HCP2 accessories must not be connected or removed while powered.
  • Interrupted communication or an ESPHome restart can temporarily block the opener. Power-cycling the opener clears this condition.
  • The bus provides approximately 25 V only during a bus scan. The adapter must boot and respond in time.
  • Verify the actual jack contact order and every conductor of the cable before first connection, and check that the cable matches the variant printed on the board.
  • The selected RS485 module reportedly includes 120 Ω termination. Measure A-to-B resistance with power removed before use. Do not fit a second termination.
  • Hörmann specifies a combined 350 mA accessory limit. Measure adapter startup and operating current.

Repository map

assembled.jpg        Photo of the assembled adapter
LICENSE              MIT, except for the archived third-party material
pcb/                 PCB, schematic, footprints, and fabrication outputs
enclosure/           Parametric enclosure source and printable files
esphome/             ESPHome configuration for the ESP32-C3
reference/docs/      Design records, component notes, and source analysis
reference/           Archived vendor pages, manuals, and datasheets
TODO.md              Open checks, currently none

Reference material is intentionally separated from the project deliverables. Start with pcb/, enclosure/, and esphome/; use reference/docs/ when a design decision or source needs review.

License

MIT, covering the PCB, the enclosure, the generators, the ESPHome configuration, and the documentation.

reference/ is excluded. It archives manuals, datasheets, and vendor listings that belong to their respective owners, with the exception of reference/docs/, which is mine and follows the license above.

Documentation

Comments

No comments yet. Be the first to ask about this board.

Ask about this board

Sign in to BoardRepo

New here? Signing in creates your account; there is no separate sign-up.