UltraWideLockflash from the browser
Docsultrawidelock
Get started · no toolchain

Flash UltraWideLock from your browser.

The complete credential Matter lock on a single ESP32-S3, C5 or C6. It commissions into Apple Home over Wi-Fi, your iPhone carries the key in Wallet, and the lock opens as you walk up. This page detects which chip you plugged in and writes the right firmware over WebSerial. Nothing to install, no ESP-IDF. Already have a board? Update it over the air, over Bluetooth, without unplugging it from the door.

Update over the air

Already have a board running UltraWideLock? Update it from this page — over Bluetooth with no cable at all, or down a USB cable, which is about three times faster. Either way the board is identified first, so you find out what applies to it before you go and press anything on it.

A DWM3001CDK also offers reinstall everything over USB. That one writes a whole image through the bootloader instead of a patch through the application, so it is the option to reach for when a board no longer starts — it does not need the software on the board to be working, or even present.

Checking what is published…
first

First time with this board? Start below, not here. An update needs firmware already running to talk to, so a factory-fresh board is not advertising anything and will not appear in the chooser at all. That is the expected behaviour of a blank board, not a fault.

  • ESP32-S3, C5 or C6 — use the cable installer further down this page, once. Every image it writes carries the update service, so after that first install you never need the cable again.
  • DWM3001CDK — needs its on-board J-Link once, and only once. A factory-blank part has no bootloader, and WebSerial cannot drive a SEGGER probe to put one there, so take the release bundle and run its flash.sh. After that the probe is optional: updates come over Bluetooth or the cable, and even a board whose software no longer boots can be reinstalled from here over USB, because the bootloader that first flash installed stays put and keeps listening.
note

Chrome or Edge on a computer, or Chrome on Android. This uses Web Bluetooth, which Safari has never shipped — so no iPhone or iPad can update a board from this page, even though an iPhone is what carries the key. Firefox has not shipped it either. The cable install below has different requirements again.

Two limits worth knowing before you rely on this. The DWM3001CDK has a single MCUboot slot, so what travels over the air is a signed delta against the exact bytes already on the part — about 11 KB. That means a board running a build we publish no delta from has no over-the-air path at all, and the page will say so rather than pretend. And nothing is written until you open the update window on the board itselfSW2 on the CDK, a double-click on the ESP32's button. That gesture is the only thing standing between the lock and anyone else in radio range, so it cannot be done from here. The ESP32 has two full OTA slots and so takes a whole image rather than a delta: about 2 MB over Bluetooth, which is several minutes with the tab open.

What you need

ESP32-S3validated

Validated on the ESP32-S3-WROOM N16R8. Smaller variants are untested.

ESP32-C6ranging only

UWB ranging is bench-validated on the C6-DevKitC-1. The full Matter walk-up is not.

ESP32-C5builds

DevKitC-1-compatible pinout. It builds and flashes; it is not yet bench-validated.

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.

Install it

  1. Wire the UWB radio

    first

    Check the DWM3000EVB's power-select jumper before anything else. Wrong source and the radio fails silently — no device ID, a deaf responder — which looks exactly like a software fault. It cost days on the bench once.

    Power the EVB from 3V3, not 5 V (the DW3000 is a 3.3 V part), share ground, and wire:

    Pin map per chip. Scroll sideways for the C5 and C6 columns on a narrow screen.
    EVB pinSignalESP32-S3ESP32-C5ESP32-C6
    D13SCLKGPIO12GPIO8GPIO6
    D11MOSIGPIO11GPIO9GPIO7
    D12MISOGPIO13GPIO23GPIO2
    D10CSGPIO10GPIO10GPIO10
    D8IRQGPIO5GPIO5GPIO3
    D7RSTnGPIO4GPIO4GPIO1
    D9WAKEUPGPIO6GPIO6GPIO0
    3V3power3V3 on all three — never 5 V
    GNDgroundGND
    D1SPI-POLGND (mode-0 strap)
    D0SPI-PHAGND (mode-0 strap)

    The C5's 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. Write the firmware

    Plug the board in over USB, click Install, and pick its serial port. One merged image — bootloader, partition table and app — is written in a single pass. Reflashing wipes any previous commissioning either way; “erase device” also clears everything beyond the image, which is the safe pick on a used board.

    This browser cannot flash over WebSerial. Use Chrome, Edge, or Firefox on a computer — Safari and mobile browsers do not support it. WebSerial needs a secure page. Open this page over https (or localhost) and try again.
    standby no board
    0x000000image end
    1. 0x000000bootloader48 KB
    2. 0x00C000partition table4 KB
    3. 0x00D000esp_secure_cert8 KB
    4. 0x010000nvs48 KB
    5. 0x01C000nvs_keys4 KB
    6. 0x01D000otadata8 KB
    7. 0x01F000phy_init4 KB
    8. 0x020000ota_0 (app)rest of image

    Nothing written yet. The write runs left to right from 0x000000. The seven regions ahead of the app cover the first 128 KB; ota_0 is everything after 0x020000.

    No port in the list? Use a data cable rather than a charge-only one, 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. If this page and the board ever disagree, the board is right.

  4. First boot

    1. In Home: 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.
    2. To watch it go, open a serial console at 115200 baud. The installer's “Logs & Console” option works, or screen /dev/cu.usbmodem… 115200 on macOS, screen /dev/ttyACM0 115200 on Linux, PuTTY on Windows. The boot log ends at a matter> prompt.
    3. Home warns about an uncertified accessory, because the image carries test certificates. Add it anyway.
    4. 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.

When it does not work

SymptomLikely cause, and the fix
Install button finds no portCharge-only cable, or hold BOOT while plugging in, then retry
No boot logWrong port, or still in download mode: replug
No valid UWB device IDThe power-select jumper, 5 V instead of 3V3, or a wrong SPI line
range shows nothing with the phone nearUWB wiring, or no key yet: finish commissioning and check Wallet
Home cannot find the accessoryNo hub, Bluetooth off, or already commissioned — reflash or factoryreset
Commissioning fails near the endThe Wi-Fi join: 2.4 GHz is required. Remove the half-added accessory and retry

More depth: the bring-up checklist and the known traps.

note

Evaluation firmware, with Matter test certificates. Do not put it in charge of a door you care about. Reflashing wipes commissioning, so 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.