所以,我正在使用cordova-plugin-ble-central从我的HM10(BLE模块)UART TX / RX特性中读取数据。
插件在读取时返回一个ArrayBuffer,但是我的HM10一次发送20个字节的数据,而我的代码只是拾取尾随数组。
例如,如果您从计算机发送:123456789012345678905
你只会接到手机上的ArrayBuffer:5
this.ble.read(this.peripheral.id, 'ffe0', 'ffe1').then(
buffer => {
this.ngZone.run(() => {
this.readMessage = this.arrayBufferToString(buffer); })
});
}
arrayBufferToString(buffer){
var bufView = new Uint8Array(buffer);
var length = bufView.length;
var result = '';
var addition = 19;
for(var i = 0;i<length;i+=addition){
if(i + addition > length){
addition = length - i;
}
result += String.fromCharCode.apply(null,
bufView.subarray(i,i+addition));
}
return result;
}
无济于事。 :(
如何获取函数的返回值,即以非常快的毫秒为增量返回各种ArrayBuffers(一次20个字节),并将所有值添加到一个“最终”ArrayBuffer中,然后将其转换为字符串?
如果你能帮忙回答这个问题,那么你将成为我的英雄。到目前为止,我已经花了超过15个小时。我想出了如何以20字节为增量发送数据,但没有接收。
可视示例(假设我的HC10发送40字节传输):
ArrayBuffer X = bytes 0-19 values (from 0-.01 seconds)
ArrayBuffer X = bytes 19-29 different values (from .01 seconds to .02 seconds)
ArrayBuffer X = bytes 29-39 (from .02 seconds to .03 seconds)
以下是该插件的开发人员建议我做的事情,但我不能用Ionic做“innerHTML”,因为它使用了ngZones。或者我可以吗?
非常感谢大家!
答案 0 :(得分:0)
对不起,大家。我这个星期的时间很穷。
这是我为自己想出的答案:
Ionic 3.x,您选择的Angular,BLE插件等等。
logData = ' ';
onConnected(peripheral) {
this.ngZone.run(() => {
this.peripheral = peripheral;
this.setStatus('Connected to ' + peripheral.name || peripheral.id);
});
this.ble.startNotification(this.peripheral.id, 'ffe0', 'ffe1').subscribe(
buffer => {
var s = this.arrayBufferToString(buffer);
if (s.match('/')) {
this.logData = s;
this.ngZone.run(() => {
this.readMessage = this.logData; })
} else {
this.logData += s;
this.ngZone.run(() => {
this.readMessage = this.logData; })
}
});
this.ble.read(this.peripheral.id, 'ffe0', 'ffe1').then(
buffer => {
var s = this.arrayBufferToString(buffer);
if (s.match('/')) {
this.logData = s;
this.ngZone.run(() => {
this.readMessage = this.logData; })
} else {
this.logData += s;
this.ngZone.run(() => {
this.readMessage = this.logData; })
}
});
}
clear(box) {
this.logData = '';
this.ngZone.run(() => {
this.readMessage = ''; })
}
在您的HTML文档上(用于'花式'调试):
<ion-card>
<ion-card-header>
<ion-icon name="md-cloud-download" item-start></ion-icon>
Data Recieved <button ion-button round outline (click)="clear(box)">Clear</button>
</ion-card-header>
<ion-card-content>
<pre>{{ readMessage }}</pre>
</ion-card-content>