React Native蓝牙BLE设备认证GATT异常问题求助
解决React Native BLE认证写入失败的问题
你的核心问题是十六进制字符串转Base64的方式错误,导致发送给设备的字节数据和NRF Connect测试时的正确数据不一致,触发GATT异常。
错误原因
当前代码Buffer.from(loginString)是把"12000000000000000000000000"按UTF-8字符编码转成Buffer,比如字符"1"对应字节0x31、字符"2"对应0x32,这和设备需要的0x12开头、后续全0x00的字节数组完全不符。
修正方案
需要将十六进制字符串解析为字节数组后再转Base64,修改代码如下:
const Buffer = require("buffer").Buffer; const loginHex = "12000000000000000000000000"; // 关键:第二个参数指定为'hex',解析十六进制字符串为对应字节 const byteBuffer = Buffer.from(loginHex, "hex"); const base64Data = byteBuffer.toString("base64"); // 执行写入操作 characteristics[0].writeWithResponse(base64Data) .then(() => console.log("认证指令发送成功")) .catch(err => console.error("写入失败:", err));
额外检查项
- 确认
characteristics[0]是设备要求的认证特征值,和NRF Connect测试时选择的特征完全一致 - 检查该特征值的属性是否包含
Write或Write Without Response,如果设备支持无响应写入,可尝试替换为writeWithoutResponse - 确保设备处于已连接且稳定的状态,避免在连接初始化未完成时执行写入操作
内容的提问来源于stack exchange,提问作者AWE
相关产品推荐
相关产品推荐

