What it does
- App / commissioner toggles the relay over Matter (On/Off cluster).
- Local push-button (active-low) toggles the relay with one tap.
- Five quick taps on the same button → factory reset.
- LED1 mirrors relay state. LED2 blinks during BLE commissioning, off when provisioned.
Pinout (nRF54L15)
| Pin | Role | DT alias | Notes |
|---|---|---|---|
P1.05 | Relay drive | relay | Active-high, gpio-leds node |
P1.14 | LED1 | led1 | Active-high. Mirrors On/Off state. |
P1.04 | LED2 | led2 | Commissioning indicator. |
P1.06 | Switch | sw0 | Pull-up, active-low. GPIO interrupt. |
P1.11 | UART21 TX | — | Reserved for app-level UART. |
P1.12 | UART21 RX | — | Reserved for app-level UART. |
P0.00 | Console TX | uart30 | vcom0 / /dev/ttyACM0 |
P0.01 | Console RX | uart30 | vcom0 / /dev/ttyACM0 |
Matter endpoints
- EP0 — Root device (code 22)
- EP1 — On/Off Plug-in Unit (code 266) with clusters: Identify, Groups, On/Off, Power Source, Scenes Management
Build (one-shot)
cat > /tmp/build_ora_relay.sh << 'EOF'
#!/bin/bash
source /home/voltex-aura/ncs/v3.2.2/ora/blinky/.venv/bin/activate
TC=/home/voltex-aura/ncs/toolchains/927563c840
CHIP_CERT=/home/voltex-aura/chip/third_party/openthread/ot-realtek/third_party/Realtek/rtl87x2g_sdk/subsys/matter/vendor/factory_data/tool
export PATH=$CHIP_CERT:$TC/bin:$TC/usr/bin:$TC/usr/local/bin:$TC/opt/bin:$TC/nrfutil/bin:$PATH
export LD_LIBRARY_PATH=$TC/lib:$TC/lib/x86_64-linux-gnu:$TC/usr/local/lib
export ZEPHYR_SDK_INSTALL_DIR=$TC/opt/zephyr-sdk
export ZEPHYR_TOOLCHAIN_VARIANT=zephyr
export ZEPHYR_BASE=/home/voltex-aura/ncs/v3.2.2/zephyr
export NRFUTIL_HOME=$TC/nrfutil/home
west build -p -b nrf54l15dk/nrf54l15/cpuapp \
-s /home/voltex-aura/ncs/v3.2.2/ora/ora_relay \
-d /home/voltex-aura/ncs/v3.2.2/ora/ora_relay/build \
-- -DFILE_SUFFIX=internal
EOF
chmod +x /tmp/build_ora_relay.sh && bash /tmp/build_ora_relay.sh Flash
TC=/home/voltex-aura/ncs/toolchains/927563c840
HEX=/home/voltex-aura/ncs/v3.2.2/ora/ora_relay/build/merged.hex
export PATH=$TC/nrfutil/bin:$TC/bin:$PATH
export NRFUTIL_HOME=$TC/nrfutil/home
SN=$(nrfutil device list 2>&1 | head -1)
nrfutil device recover --serial-number $SN
nrfutil device recover --serial-number $SN # yes, twice
nrfutil device program --firmware $HEX --serial-number $SN --core Application
nrfutil device reset --serial-number $SN VS Code (nRF Connect extension)
Add Build Configuration with:
- Board target:
nrf54l15dk/nrf54l15/cpuapp - Extra CMake arguments:
-DFILE_SUFFIX=internal - Sysbuild: enabled
Memory footprint (verified 2026-05-18)
FLASH: 689968 B / 862 KB (78.17%)
RAM: 175532 B / 256 KB (66.96%) Gotchas
nrfutil device recoversometimes needs to run twice beforeprogramworks.- The
.zapinsrc/default_zap/ora_relay.zapis a symlink into the firmware-designer workspace — don't break it. - Single
.zapfile → no-zflag needed forwest zap-generate. - gpio2 has no GPIOTE — keep the button on P1.06 (current pin) or another P0/P1 pin.