You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Web Bluetooth API连接ESP32启动通知报错:DOMException: GATT Error: Not supported

Web Bluetooth连接ESP32后启动通知报错:DOMException: GATT Error: Not supported

你遇到的问题是Web蓝牙成功连接ESP32,但调用startNotifications()时触发"GATT Error: Not supported",尽管特征的notify属性显示为true。以下是几个关键排查和解决方向:

1. 检查ESP32端的CCCD配置

特征的notify属性为true只是基础,Web蓝牙启动通知时需要向**客户端特征配置描述符(CCCD,UUID 0x2902)**写入开启指令(0x0001)。如果ESP32没有正确初始化CCCD或设置权限,会导致操作失败。

确保ESP32代码中给目标特征添加了CCCD,并赋予读写权限。以Arduino-ESP32库为例:

// 创建特征时包含NOTIFY权限
BLECharacteristic *pNotifyChar = pService->createCharacteristic(
  YOUR_CHARACTERISTIC_UUID,
  BLECharacteristic::PROPERTY_NOTIFY | BLECharacteristic::PROPERTY_READ
);

// 显式添加CCCD并设置读写权限
BLEDescriptor *pCCCD = new BLEDescriptor((uint16_t)0x2902);
pCCCD->setAccessPermissions(ESP_GATT_PERM_READ | ESP_GATT_PERM_WRITE);
pNotifyChar->addDescriptor(pCCCD);

2. 补充Web端requestDevice的optionalServices配置

即使能成功连接设备并获取服务,若未在requestDevice的参数中声明目标服务为可选服务,浏览器可能限制后续的GATT操作(比如启动通知)。修改Web代码:

let filters = [{name: 'Custom device name'}];
let options = {
  filters: filters,
  // 添加目标服务UUID,确保浏览器授权访问
  optionalServices: ['__SERVICE_GUID__']
};

try {
  const device = await navigator.bluetooth.requestDevice(options);
  // ... 后续代码不变
} catch(error) {
  console.log(error);
}

3. 排查ESP32 BLE栈兼容性

  • 尝试升级Arduino-ESP32库到最新稳定版,旧版本可能存在Web蓝牙兼容性问题。
  • 确认ESP32端服务和特征的UUID格式与Web端完全匹配(16位UUID要省略前缀,128位UUID要保持大小写和分隔符一致)。

4. 验证浏览器环境

Web蓝牙仅支持HTTPS环境(localhost除外),确保测试页面运行在HTTPS或localhost下。同时优先使用最新版Chrome浏览器测试,其Web蓝牙实现最完善。

内容的提问来源于stack exchange,提问作者BLB

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.05 23:50:12