使用Ionic Native BLE向BLE外设发送写入值

时间:2018-06-08 19:09:35

标签: android typescript ionic-framework bluetooth-lowenergy cordova-plugins

我目前正在用Ionic编写一个小应用程序来控制我的应用程序的FLUX蓝牙灯泡。我正在使用离子本机/ 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函数)。我传递了所有正确的设备ID,服务和特性,然后传递off函数返回的数组缓冲区。在控制台内部没有写错误,并给我OK(200)的结果。虽然命令什么都不做,尽管就像我说的那样,如果我将相同的值传递给nRF Connect写命令以获得相同的服务和特性,它就可以完美地运行。

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

1 个答案:

答案 0 :(得分:0)

我希望您没有得到错误,因为数据写得正确,但灯泡不知道如何解释命令。 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的属性将决定您是否使用ble.write或ble.writeWithoutResponse。连接到外设时返回的JSON具有这些详细信息。 nRF Connect应用程序还将显示特征属性。