如何在Cordova中的蓝牙设备和Android / iOS之间发送和接收一系列数据字节?
我的项目详情:
我正在开发一种蓝牙传感器设备。设备将数据作为一系列字节发送。它还为设备API使用二进制控制字系统,并以一系列字节发送/接收命令。所以我需要接收和发送无符号字节(8位值,0-255)。这种设置在Java和Arduino中很容易使用。我有工作的计算机和arduino应用程序使用简单的串行连接与设备通信。
现在我正在开发一个使用Cordova,Angular,Ionic和bluetoothSerial插件的移动应用程序(Don Coleman的出色工作)github here。该应用必须在Android和iOS上运行。
更新:更多细节和答案: Sanfor指出bluetoothSerial有一个采用Uint8Array的write()方法。也许我做错了什么,但我不能让这种方法起作用!这是我试过的:
var buf = new ArrayBuffer(2);
var view = new Uint8Array(buf);
view[0] = 0;
view[1] = 200;
//write(view); // does not work either
// re: 123,101,100,123,34,101,149,189,201,137,149,189,201,149,153,149,101,149,189,201,255
//write(buf); // does not work
// re: 65,97,77,101,115,77,103,101,115,103,61,101,115,61
writeBuffer(buf); // does work - thanks to Glen Arrowsmith!
// correct response: 0,101,100,0,200,101,100,200
此外,尝试使用bluetoothSerial.read可能会被强制用于7位数字。使用Uint8Arrays有各种变化,但它们只是改变了数据接收失败的方式,因为inBuffer在bluetoothSerial中被转换为String。 :
bluetoothSerial.read(readSuccess, simpleLog); // does not work
function readSuccess ( data ) {
var arr = [];
for (var i=0; i<data.length;i++){
arr.push(data.charCodeAt(i));
} // returned data is corrupted for all values over 127!
console.log('Converted ' + arr3 + ' with length ' + arr3.length);
}
回答:
我找到了Glen Arrowsmith的bluetoothSerial github的分支,添加了readBuffer和writeBuffer(在上面的代码中工作)。但是,我注意到writeBuffer(buf)对于超过2-3个元素的数组不能正常工作!这是时间问题吗?它可能在设备方面。现在我有一个$ interval设置来发送更大阵列的字节。
我也能够阅读工作,虽然只是经过一些工作(演员到Uint8Array)才能让Bytes以适当的形式退出:
bluetoothSerial.readBuffer(readSuccess, simpleLog);
function readSuccess ( data ) {
var arr = new Uint8Array(data);
var msg = '';
for (var i = 0; i < arr.length; i++){
msg += arr[i]+', ';
}
console.log('Received ' +arr+' with vals '+msg+'and length '+arr.length);
cb(arr);
}
更新2:我似乎已经通过找到bluetoothSerial的分叉版本然后在输出中添加上述修改来回答我自己的问题。如果有人建议采用更清洁的方法,我会更新。
答案 0 :(得分:0)
似乎你拥有了所需的一切,所以也许我并没有完全理解你。我假设您想看看如何处理使用该插件发送字节,对吧?例如,您可以看到插件提供程序的examples。另外我要提到bluetoothSerial.write可以处理UInt8Array作为参数。在JavaScript中
Uint8Array类型数组表示一个8位无符号整数数组。
我认为这正是你想要的。