What you need
- ESP32-S3 dev board (validated on ESP32-S3-WROOM N16R8; smaller variants untested), ESP32-C6-DevKitC-1 (UWB ranging is bench-validated on this chip, the full Matter walk-up is not), or ESP32-C5 dev board (DevKitC-1-compatible pinout; builds, not yet bench-validated)
- Qorvo DWM3000EVB (DW3110), the UWB radio, hand-wired over SPI
- 11 jumper wires and a USB data cable
- Chrome, Edge, or Firefox on a computer (WebSerial; Safari and mobile browsers cannot flash)
Apple side: an iPhone with a UWB chip (iOS 26 is the validated floor), a Home hub (HomePod or Apple TV), and a 2.4 GHz Wi-Fi network.
1. Wire the UWB radio
Power the EVB from 3V3, not 5 V (the DW3000 is a 3.3 V part), share ground, and wire:
| DWM3000EVB (Arduino pin) | Signal | ESP32-S3 | ESP32-C5 | ESP32-C6 |
|---|---|---|---|---|
| D13 | SCLK | GPIO12 | GPIO8 | GPIO6 |
| D11 | MOSI | GPIO11 | GPIO9 | GPIO7 |
| D12 | MISO | GPIO13 | GPIO23 | GPIO2 |
| D10 | CS | GPIO10 | GPIO10 | GPIO10 |
| D8 | IRQ | GPIO5 | GPIO5 | GPIO3 |
| D7 | RSTn | GPIO4 | GPIO4 | GPIO1 |
| D9 | WAKEUP | GPIO6 | GPIO6 | GPIO0 |
| 3V3 | power | 3V3 | 3V3 | 3V3 |
| GND | ground | GND | GND | GND |
| D1 | SPI-POL | GND (mode-0 strap) | same | same |
| D0 | SPI-PHA | GND (mode-0 strap) | same | same |
The C5 data pins differ because the S3's GPIO11/12 are the C5's UART0 console and GPIO13 is its USB-Serial-JTAG. The C6 uses GPIO6/7/2 because those are SPI2's direct IO_MUX pins on that part, with the control signals kept clear of its strapping pins, its USB Serial/JTAG pair and UART0.
The two straps hold the DW3000 in SPI mode 0; skip them if your EVB revision already fixes the mode (check its manual).
2. Flash
Plug the board in over USB, click Install, and pick its serial port. One merged image (bootloader, partition table, app) is written at offset 0x0. Reflashing wipes any previous commissioning either way; "erase device" also clears everything beyond the image, which is the safe pick on a used board.
No port in the list? Use a data cable, or hold the board's BOOT button while plugging it in, then retry. After a BOOT-button flash, replug before first boot.
3. Pair it
The board comes up advertising for commissioning, and this is its setup code. It is the same on every board flashed from this page: the image builds with Matter's test setup parameters, so the passcode and discriminator are fixed rather than per-device. Scan it with the iPhone you want to carry the key, or type the digits into Home.
Manual pairing code
3497-011-2332
QR payload
MT:Y.K9042C00KA0648G00
The board prints the same two lines on its console at every boot, and
codes reprints them, so if this page and the board ever disagree,
the board is right.
4. First boot
- Home app: add accessory, scan the code above or type the 11 digits. Keep the phone next to the board; commissioning starts over BLE, then joins your 2.4 GHz Wi-Fi. Expect a minute or two. There is no Improv Wi-Fi step: the network join happens during commissioning.
- Optional, to watch it go: a serial console at 115200 baud. The
installer's "Logs & Console" option works, or
screen /dev/cu.usbmodem… 115200(macOS),screen /dev/ttyACM0 115200(Linux), PuTTY (Windows). The boot log ends at amatter>prompt. - Home warns about an uncertified accessory (test certificates); add anyway.
- Home then provisions the key into Wallet on its own. Walk up: the Wallet animation plays, the lock opens, and it relocks as you leave.
The matter> console also has status,
range, lock/unlock, and
factoryreset.
Commissioning in more depth — what a healthy pairing looks like, and what to do when one does not finish: Add the key.
Troubleshooting
| Symptom | Likely cause and fix |
|---|---|
| Install button finds no port | Charge-only cable, or hold BOOT while plugging in, then retry |
| No boot log | Wrong port, or still in download mode: replug |
| No valid UWB device ID | Power-select jumper (see Wire it), 5 V instead of 3V3, or a wrong SPI line |
range shows nothing with the phone near | UWB wiring, or no key yet: finish commissioning, check Wallet |
| Home cannot find the accessory | No hub, Bluetooth off, or already commissioned (reflash or factoryreset) |
| Commissioning fails near the end | Wi-Fi join: 2.4 GHz required; remove the half-added accessory and retry |
More depth: the bring-up checklist and the known traps.
Evaluation firmware with Matter test certificates; do not put it in charge of a door you care about. Reflashing wipes commissioning; remove the stale accessory from Home before re-adding. The nRF5340 DK target is out of scope here: it programs over a SEGGER J-Link probe, not WebSerial. Use its release bundle instead. Source and docs: github.com/openaliro/openaliro.