Page 1 of 1

ESP32-C6 BLE unstable on Windows / Web Bluetooth – disconnects during GATT discovery

Posted: Sat Dec 13, 2025 12:12 am
by HelloPleaseHelpMe
Hi,

I am working on a student IoT breathalyzer project and I am facing persistent BLE connection instability with the ESP32-C6, especially when using Windows 11 with Chrome (Web Bluetooth).

Goal / Setup
MCU: ESP32-C6
BLE role: GATT server
Client: Chrome / Edge (Web Bluetooth, HTML + JavaScript)
OS: Windows 11
Also tested with Android (nRF Connect, LightBlue)

Connection scheme:
ESP32-C6 ⇄ BLE ⇄ Chrome (Web Bluetooth) ⇄ Web UI

Problem
The ESP32-C6 is discoverable in Windows Bluetooth settings, Chrome Web Bluetooth device chooser, and Android BLE scanner apps.

However, the connection is very unreliable.
On Windows, Chrome often connects and then immediately disconnects during GATT discovery. Failures frequently occur at getPrimaryService() or right after the GATT connection. On another Windows laptop, the connection succeeds only about 2 out of 6 to 10 attempts.

On Android, the behavior is slightly better but still unstable, with only about 1 to 2 successful connections out of 16 to 20 attempts.

The same behavior is observed when using the ESP-IDF NimBLE GATT server example.

What I have tried

Windows / Browser side
Chrome and Edge with default Bluetooth flags
chrome://bluetooth-internals (debug shows “not supported”)
Windows 11 Bluetooth and radio permissions enabled
Intel Bluetooth drivers updated to the latest version
Firmware side
Arduino BLE using BLEDevice and BLEServer
NimBLE-Arduino
ESP-IDF (VS Code) NimBLE GATT server template
Minimal GATT structure with one service and one characteristic (READ + NOTIFY) and CCCD (0x2902)
Notifications delayed until client subscription
Simplified advertising and MTU settings

My Observation / Suspicion
This appears to be a race condition or strict GATT timing issue. The Windows plus Chrome GATT stack seems much stricter, and the ESP32-C6 disconnects during service discovery. Android behaves similarly but is more tolerant.

Constraints
I cannot change the MCU, as the ESP32-C6 is already declared for project evaluation.
I also cannot change the BLE to Web Bluetooth architecture.

Questions
Are there known ESP32-C6 BLE or NimBLE issues with Windows or Web Bluetooth?
Are there recommended GATT patterns or connection parameter tweaks specifically for Windows?
Is there anything ESP32-C6-specific that differs from older ESP32 BLE behavior?

Thanks in advance for any guidance.