- C++ 85.3%
- C 14.7%
| include | ||
| src | ||
| .gitignore | ||
| platformio.ini | ||
| README.md | ||
Zehnder ComfoAir Q ⇄ KNX bridge for OpenKNX PiPico BCU Connector
Firmware for a Raspberry Pi Pico on the OpenKNX PiPico BCU Connector. It talks wired KNX through the NanoBCU/MicroBCU and talks to a Zehnder ComfoAir Q unit on its 50 kbit/s extended CAN bus.
There are now two CAN hardware variants:
pipico_bcu_connector_mcp2515— external MCP2515 CAN controller module.pipico_bcu_connector_vp230— direct 3.3 V SN65HVD230/VP230 CAN transceiver module using RP2040 PIO viacan2040.
Default wiring
KNX / OpenKNX PiPico BCU Connector
Already provided by the connector PCB:
- KNX UART TX: GP0
- KNX UART RX: GP1
- Prog LED: GP21
- Prog button: GP22
Variant A: MCP2515 CAN module
Defaults in include/Config.h:
- SCK: GP2
- MOSI/TX: GP3
- MISO/RX: GP4
- CS: GP5
- INT: GP6, optional/polled
- MCP2515 clock: 8 MHz by default (
CAN_MCP_CLOCK = MCP_8MHZ) - CAN bitrate: 50 kbit/s
If your MCP2515 module has a 16 MHz crystal, change CAN_MCP_CLOCK to MCP_16MHZ.
Variant B: SN65HVD230 / VP230 transceiver module
Defaults in include/Config.h for pipico_bcu_connector_vp230:
- Pico GP2 (
CAN_PIN_RX) ← VP230R/RXD - Pico GP3 (
CAN_PIN_TX) → VP230D/TXD - Pico 3V3 → VP230 VCC
- Pico GND → VP230 GND and ComfoAir GND
- VP230 CANH/CANL → ComfoAir CANH/CANL
- If your board exposes
RS, tie it to GND for high-speed/normal mode.
Check whether your VP230 board includes a 120 Ω termination resistor. Do not add unnecessary extra termination if the ComfoAir bus is already correctly terminated.
This variant uses can2040, a software CAN implementation using RP2040 PIO. At 50 kbit/s this should be fine, but it is more interrupt-latency-sensitive than MCP2515 hardware.
KNX addresses
All group addresses are hardcoded in include/Config.h and can be changed there.
Important command objects:
7/0/1fan level, DPT 5.010, values0..37/0/2boost minutes, DPT 5.010, values0,10,20,30,607/0/5extract/exhaust-only, DPT 1.001,1=on for 1h,0=reset7/0/6supply-only, DPT 1.0017/0/8update all, DPT 1.017 trigger
Status objects are under 7/1/x, temperatures/humidity under 7/2/x, fan telemetry under 7/3/x, and timers/filter under 7/4/x.
Build / flash
MCP2515 variant:
pio run -e pipico_bcu_connector_mcp2515
pio run -e pipico_bcu_connector_mcp2515 -t upload
SN65HVD230 / VP230 variant:
pio run -e pipico_bcu_connector_vp230
pio run -e pipico_bcu_connector_vp230 -t upload
Notes
- Individual address defaults to
1.1.250; changeKNX_INDIVIDUAL_ADDRESSininclude/Config.hif needed. - No ETS product/database is required; the firmware ACKs the hardcoded group addresses directly.
- The extract-only command uses the same payload as
ventilation_extract_onlyincomfoair-esp32. - The VP230 variant depends on
can2040, which is GPLv3 licensed.