Turns the ESP Thread Border Router / Zigbee Gateway board (ESP32-S3 + ESP32-H2)
into a network-attached Zigbee coordinator. The H2 runs the full ZBOSS NCP firmware
(esp-coordinator); the S3 bridges its frame stream to a TCP port over
Ethernet or WiFi. Zigbee2MQTT talks to it exactly as it would to a USB stick — just over
tcp:// instead of a serial port.
USB2 — that is the ESP32-S3.
The board's other USB-C, USB1, goes to the ESP32-H2 and cannot flash this image.
If the browser reports an ESP32-H2 after you pick the port, you are on the wrong socket.
Connect the board's USB2 socket (ESP32-S3), then:
Chromium-based desktop browser required (Web Serial). Firefox and Safari cannot flash.
One click installs both chips. The S3 image carries the H2's firmware in a dedicated flash partition and writes it to the H2 on first boot, over the inter-chip UART:
| Part | Offset | Goes to |
|---|---|---|
| S3 gateway firmware | 0x0 | ESP32-S3 — bridge, web UI, OTA |
| Zigbee radio firmware | 0x620000 | staged, then flashed into the ESP32-H2 |
ot_rcp, and replaces it with the ZBOSS NCP
firmware (~720 KB, verified by MD5). Subsequent boots verify the radio's application
against the staged image (MD5) and rewrite only on a mismatch.
A firmware update of the S3 alone therefore leaves a matching radio untouched.
The board works as it comes — no add-on required. Onboard WiFi is provisioned over the very
same USB port you just flashed from, via Improv.
If you would rather not use a cable at all: leave the gateway unconfigured for about two
minutes and it opens its own access point (CDC2NET XXXX, no password), where
a configuration page at 192.168.4.1 takes your network details.
With the optional Ethernet sub-board fitted, a wired connection is picked up by DHCP at boot and takes precedence — the access point then stays off, since the web UI is reachable over the network anyway. Either way the web UI lives on port 80 and the device announces itself over mDNS.
Point Zigbee2MQTT at the raw-TCP port:
serial: adapter: zboss port: tcp://<gateway-ip>:2329
zboss adapter is marked experimental in stock Zigbee2MQTT, and coordinator
backup/restore needs the matching container image. See the
project README before putting a
production network on it.
ot_rcp when it detects the radio failing to come up as a Spinel RCP
(a documented recovery feature). Flashing only the H2 with
coordinator firmware therefore does not stick — install this image on the S3 instead,
which is what the button above does.