使用 Ionic Native BLE 向 BLE 外围设备发出写入值

Posted

技术标签:

【中文标题】使用 Ionic Native BLE 向 BLE 外围设备发出写入值【英文标题】:Issue writing value to BLE peripheral with Ionic Native BLE 【发布时间】:2018-11-18 21:26:03 【问题描述】:

我目前正在使用 Ionic 编写一个小应用程序,以使用我的应用程序控制 FLUX 蓝牙灯泡。我正在使用 ionic-native/ble,到目前为止,除了写一个值之外,一切都在工作。

扫描和连接都可以正常工作。但是,当尝试为灯泡写入关闭值时,没有任何反应。

我在 android 上使用了 snoop 功能,发现 CC2433 值是关闭灯泡的原因,我还使用 nRF Connect 应用程序对此进行了测试,当将该值写入灯泡时,灯会关闭。请在下面找到代码,让我知道我是否在做一些愚蠢的事情。谢谢!

this.ble.writeWithoutResponse(
 "3C:A3:08:A8:1E:C3", 
 "ffe5", 
 "ffe9", 
 this.off())
        .then(result => 
          console.log(result);
        ).catch(error => 
          alert(JSON.stringify(error));
        );

off() 
 let string = "CC2433";
    let array = new Uint8Array(string.length);
    for (let i = 0, l = string.length; i < l; i ++) 
      array[i] = string.charCodeAt(i);
    
    console.log(array.buffer);
    return array.buffer;

如您所见,我正在调用 ble 插件 write 而没有响应,因为不需要响应(我也尝试过仅使用 write 函数)。我传递了正确的设备 id、服务和特征,然后传递了 off 函数返回的数组缓冲区。在控制台内部没有写入错误,并给我一个 OK(200) 的结果。尽管该命令什么也没做,尽管就像我说的,如果我将相同的值传递给 nRF Connect 写入命令以获得相同的服务和特性,它会完美运行。

任何想法将不胜感激!谢谢!

【问题讨论】:

【参考方案1】:

我希望您没有收到错误消息,因为数据写入正确,但灯泡只是不知道如何解释命令。 CC2433 看起来像十六进制而不是字符串。试试这个:

let array = new Uint8Array([0xCC, 0x24, 0x33]);

this.ble.writeWithoutResponse(
  "3C:A3:08:A8:1E:C3", 
  "ffe5", 
  "ffe9", 
  array.buffer)
        .then(result => 
          console.log(result);
        ).catch(error => 
          alert(JSON.stringify(error));
        );

特性 ffe9 的属性将决定你是使用 use ble.write 还是 ble.writeWithoutResponse。连接到外围设备时返回的 JSON 包含这些详细信息。 nRF Connect 应用程序还将显示特征属性。

【讨论】:

是的,我实际上是在发布问题后发现这是我构建数组缓冲区的方式。非常感谢您的帮助!

以上是关于使用 Ionic Native BLE 向 BLE 外围设备发出写入值的主要内容,如果未能解决你的问题,请参考以下文章

使用 react-native-ble-manager 获取可用蓝牙设备的列表

使用 React-native-ble-plx 配置 React-native

如何使用 react-native-ble-manager 读取通用访问服务/特征

是否可以使用 Poledia/react-native-ble-plx 将 iOS 设备变成 iBeacon?

无法使用 react-native-ble-manager 通过蓝牙连接到设备

React Native:BLE,发现和广播(广告数据)