⚠️ This is an experimental testground build.
The ESP32-C6 has a single 2.4 GHz radio that this firmware time-shares between WiFi and 802.15.4 Zigbee
(software coexistence). Espressif rates the “WiFi-STA + always-on coordinator” case as supported-but-unstable.
Whether coexistence is good enough for a usable coordinator depends on your RF environment — that is exactly
what we want you to help measure. Do not run your only/production Zigbee network on this build yet.
Use a spare stick, then please report back (link at the bottom).
What you get: after flashing and entering your WiFi credentials in the browser, the coordinator
connects to your WiFi on its own and exposes the ZBOSS NCP on a raw TCP port. Zigbee2MQTT connects with
port: tcp://<device-ip>:6638 — no USB cable to the host, no serial-bridge software.
1. Flash + connect to WiFi (one browser flow)
Connect the ESP32-C6 via USB, click below, pick the serial port, and flash. ESP Web Tools then
offers “Connect to Wi-Fi” — enter your home WiFi SSID + password right in the browser
(Improv-Serial). The device saves them and reboots onto your WiFi.
Supported browsers: Chrome, Edge, Opera. (Safari/Firefox lack WebSerial.)
Find the device on your network. After it joins WiFi, reach it at
tcp://esp-zboss-coord.local:6638 (mDNS) if your network resolves .local names,
or look up the IP it got from your router’s DHCP client list and use tcp://<device-ip>:6638.
A static DHCP lease is recommended so the address doesn’t change.
Need to change WiFi later (moved router, new password)? No reflash needed.
Power-cycle the stick and, within the first 120 seconds, open this page again, click the button,
pick the port and choose “Change Wi-Fi” — the same Improv window is reopened on every boot.
Enter the new credentials; the device saves them and reboots onto the new network.
2. Zigbee2MQTT setup (over TCP)
Point Zigbee2MQTT at the device’s TCP address. The ZBOSS adapter is mandatory, and for this build the
matching Docker image is required — it carries the longer timeouts the single-radio TCP link needs.
Edit zigbee2mqtt/data/configuration.yaml:
serial:
# the coordinator's own TCP address (mDNS name or router-assigned IP)
port: tcp://esp-zboss-coord.local:6638
adapter: zboss
advanced:
transmit_power: 20
Docker image (required for this build):
image: ghcr.io/tostmann/zigbee2mqtt-esp32:latest
The stock
koenkk/zigbee2mqtt image uses serial-tuned timeouts that are too short for the
coexistence TCP link and can drop the connection under load. See
ZIGBEE2MQTT.md.
Backup/restore over TCP is degraded. The raw-NVRAM pull can stall on the coexistence link; the image
falls back to a structured backup, and a restore may be partial. For a full raw backup, flash the
stable USB build temporarily and back up over USB.
3. Tips for a fair test
- Use a spare ESP32-C6 and a throwaway test network, not your production setup.
- Put the device on 2.4 GHz WiFi within range of your AP; coexistence degrades fast with a weak WiFi link.
- Pick a Zigbee channel away from your WiFi channel where you can (e.g. WiFi ch1 ↔ Zigbee ch25).
- Note your RF environment: AP model, distance, number of Zigbee devices, 2.4 GHz congestion.
- Watch for: join reliability, LQI, dropped TCP sessions, behaviour under simultaneous heavy WiFi traffic.
Please report back. This build exists to answer one open question — “is native WiFi coexistence
usable on the C6 as a coordinator?” — with real-world data. Tell us what you saw (good or bad) on
Discussion #1 “Possibility of wifi connection?”:
your AP/environment, Zigbee + WiFi channels, device count, and how stable it was.
Experimental firmware from the wifi-coex branch. For the supported USB / UART coordinator,
use the stable flasher.