使用JavaScript向BLE特征写入指令无响应问题排查求助
问题排查与修复建议
1. 指令数据类型错误
你用Uint16Array构造指令,但设备需要的是单字节序列(比如0x04 0x01是两个独立的8位字节),Uint16Array会把数据按16位整数存储,可能导致字节序不符合设备要求,或者数据被错误解析。
修复:改用Uint8Array构造指令:
// 示例:锁定模式关闭指令 const buffer = new Uint8Array([0x04, 0x02]);
2. 写入操作未等待异步完成
你的readWriteNotifyCharacteristics方法中,case 'W'分支调用characteristic.writeValue(command)时,没有用await也没返回Promise,会导致写入还没完成就执行后续读取,甚至写入操作可能被中断。
修复:将写入改为异步等待:
case 'W': await characteristic.writeValue(command); break;
3. 函数调用名称不匹配
你定义的方法是readWriteNotifyCharacteristics,但调用时用的是this.cacheCharacteristics,属于拼写错误,导致实际没执行正确的写入逻辑。
修复:统一函数调用名称:
await this.readWriteNotifyCharacteristics( 'f1196f20-qea4-00e6-bd89-65790865c9a98', // 注意修正UUID里的非法字符 'f1196f22-qea4-00e6-bd89-65790865c9a98', 'W', buffer );
4. UUID格式错误
你使用的UUID包含非法字符(比如bdh89中的h),标准BLE UUID只能包含十六进制字符(0-9、a-f/A-F),错误UUID会导致无法定位正确的特征,即使连接正常,写入的也是无效目标。
修复:修正UUID中的非法字符,确保符合8-4-4-4-12的格式,比如把bdh89改为bd89。
5. 指令字节不匹配
你测试用的是[0x06, 0x02],但设备要求的指令是0x04开头的(0x04 0x01/0x04 0x02),设备无法识别非指定指令。
修复:使用设备文档指定的指令序列测试。
额外检查点
- 确认目标特征的属性支持写入:读取特征的
properties属性,确保包含write或writeWithoutResponse; - 尝试用
writeValueWithResponse替代writeValue:部分设备需要收到写入确认才会执行指令,无响应写入可能被忽略。
内容的提问来源于stack exchange,提问作者baran
相关产品推荐
相关产品推荐

