bounty将在3天后过期。回答此问题可获得+150声望奖励。AWE希望引起更多人关注此问题。
我正在尝试与蓝牙LE设备通信,但被告知需要进行“身份验证”才能读写数据。硬件开发人员告诉我,设备会向接收方发送密钥,我需要使用12000000000000000000000000
进行回复。他已使用NRF Connect桌面应用程序成功测试了此功能(但我需要在react native中复制此功能)。
我尝试过使用下面的代码在连接到设备后立即将12000000000000000000000000
(转换为base64)发送到设备的notify特性:
const Buffer = require("buffer").Buffer;
const loginString = "12000000000000000000000000";
const hexToBase64 = Buffer.from(loginString).toString("base64");
characteristics[0].writeWithResponse(hexToBase64).then(()=>...)
但是,即使代码执行正确(没有捕获错误),我还是不断得到"GATT exception from MAC address C7:7A:16:6B:1F:56, with type BleGattOperation{description='CHARACTERISTIC_WRITE'}"
。
我已经看过了react-native-ble-plx文档,仍然没有找到解决我的问题的方法,任何帮助都将是感激的!
1条答案
按热度按时间rsl1atfo1#
如果BLE设备运行Authorization Control Service(ASC)(UUID 0x 183 D),您的应用程序将扮演客户端角色。在ACS中,客户端可以写入两个特征:“ACS数据输入”(UUID 0x 2B 30)和“ACS控制点”(UUID 0x 2B 3D),而只有“ACS数据输出通知”特征(UUID 0x 2B 31)具有将由服务器发起但由客户端启用的通知属性。基本上,这些特征中的数据结构在有效载荷中是小端字节序,并且在写操作之前将密钥转换为little-endian可能会起作用。这些是我最近研究BLE文档时了解到的,希望这些能有所帮助。