我目前正在用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写命令以获得相同的服务和特性,它就可以完美地运行。
任何想法都将不胜感激!谢谢!
答案 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应用程序还将显示特征属性。