如何通过Web Bluetooth API为HC-06模块启用写入访问权限
核心问题定位
你当前获取到的GATT特征值并非HC-06用于数据透传的业务特征,因此属性中读、写权限均为false,这一现象和前端权限、模块锁配置无关,属于服务/特征匹配错误,或硬件协议不匹配导致。
对你三个疑问的明确解答
无法通过Web Bluetooth API修改特征权限
BluetoothCharacteristicProperties的字段值是蓝牙设备固件在GATT服务声明阶段固定上报的属性,属于设备侧的协议层配置,Web Bluetooth API没有提供修改该配置的接口,也不存在相关协议支持。老款纯经典蓝牙版HC-06本身和Web Bluetooth API不兼容
你之前用Python脚本、安卓蓝牙调试终端能正常连接通信,是因为这些运行环境可以调用系统级经典蓝牙(BR/EDR)的SPP/RFCOMM接口;而Web Bluetooth API仅支持BLE(低功耗蓝牙)GATT协议,不支持经典蓝牙连接,纯经典蓝牙版本的HC-06无法在Web环境下通信,和AT配置无关。
如果你使用的是双模/BLE版本的HC-06,不存在兼容性问题,连接失败的原因是没有匹配到正确的透传特征。常规场景下不需要通过AT指令修改HC-06配置
纯经典蓝牙版HC-06无论怎么改AT参数,都无法适配Web Bluetooth的BLE协议要求,直接更换为BLE透传模块(如HC-08、BLE版HC-06)即可;BLE版HC-06的默认透传配置就可以和Web Bluetooth通信,不需要额外调整AT参数。
可直接落地的修复步骤
- 确认你使用的HC-06支持BLE功能,纯经典蓝牙版本直接更换硬件。
- 在调用蓝牙设备请求接口时,必须显式声明透传服务UUID,不要依赖默认扫描结果匹配服务,BLE版HC-06的透传服务UUID固定为
0000ffe0-0000-1000-8000-00805f9b34fb,对应可读写的透传特征UUID为0000ffe1-0000-1000-8000-00805f9b34fb。 - 参考如下代码逻辑连接,拿到对应特征后即可正常读写:
// 替换为你的HC-06实际广播名称 const HC06_NAME = 'HC-06'; const HC06_SERVICE_UUID = '0000ffe0-0000-1000-8000-00805f9b34fb'; const HC06_CHAR_UUID = '0000ffe1-0000-1000-8000-00805f9b34fb'; navigator.bluetooth.requestDevice({ filters: [{ name: HC06_NAME }], optionalServices: [HC06_SERVICE_UUID] }) .then(device => device.gatt.connect()) .then(server => server.getPrimaryService(HC06_SERVICE_UUID)) .then(service => service.getCharacteristic(HC06_CHAR_UUID)) .then(characteristic => { // 此处打印characteristic.properties,可看到write、notify字段均为true const cmdEncoder = new TextEncoder(); // 发送指令示例,根据你的模块实际要求加换行后缀 characteristic.writeValue(cmdEncoder.encode('AT\r\n')); })
- 注意Web Bluetooth API仅在HTTPS环境(本地localhost调试除外)下可用,HTTP环境会直接被浏览器拦截权限。
内容的提问来源于stack exchange,提问作者Michael Kerr
相关产品推荐
相关产品推荐

