Cordova ble.write我无法发送数据(Android)

时间:2019-10-09 01:47:03

标签: android cordova bluetooth-lowenergy

我在Apache Cordova中构建了一个Android应用程序,它与Bluetooth 4.0(BLE)兼容,插件GitHub repostory指示此形状可以将信息发送到ble设备(在我的情况下为HM10模块):

此函数将数据写入特征。

ble.write(设备ID,服务UUID,特征UUID,数据,成功,失败); 描述 函数写入将数据写入特征。

参数: device_id:外设的UUID或MAC地址 service_uuid:BLE服务的UUID character_uuid:BLE特性的UUID 数据:二进制数据,使用ArrayBuffer 成功:连接成功后调用的成功回调函数。 [可选的] failure:错误回调函数,发生错误时调用。 [可选]


我试图以此方式发送数据,但立即调用故障功能

    function startBed() {
        var UiidS="FFE0"; //UUID SERVICE: AT+UUID? => 0xFFE0
        var UiidC="FFE1"; //UUID CHARACTERISTICS AT+CHAR? => 0xFFE1

        var data = new Uint8Array(1);
        data[0] = 1;
        setTimeout(ble.write(hMac,UiidS,UiidC,data.buffer,success,failure),2000);
        function success() {
            document.getElementById("btstate1").innerHTML = "Dato enviado!!!";  
            }
        function failure() {
            document.getElementById("btstate1").innerHTML = "Dato NO enviado!!!";  
            var time=2000;
            navigator.vibrate(time);
        }
    }

如果我采用文本框值并将其直接发送,则HM10会收到无法识别的字符,例如Ó。

        var UiidS="FFE0";
        var UiidC="FFE1";
        var dato =document.getElementById("btstate6").value;
        setTimeout(ble.write(hMac,UiidS,UiidC,dato,success,failure),2000);

结论 我不知道为什么模块无法正确接收数据,或者在其他情况下数据无法发送。也许是为了UUID。

2 个答案:

答案 0 :(得分:0)

我仍在尝试解决我的问题,我确认UUID是正确的,但是我对我是否像ArrayBuffer一样发送数据感到怀疑

答案 1 :(得分:0)

使用其他插件(https://github.com/randdusing/cordova-plugin-bluetoothle) 我使用了以下

var encodedString = bluetoothle.bytesToEncodedString([145,0,14,0,255]);
bluetoothle.write(this.writeSuccess.bind(this), this.writeError.bind(this), {
        "value": encodedString,
        "service": this.serviceUuid,
        "characteristic": this.serviceCharacteristic,
        "type": "noResponse",
        "address": this.currentConnectedDevice
    });

哪里

// From plugin source:
encodedStringToBytes: function(string) {
    var data = atob(string);
    var bytes = new Uint8Array(data.length);
    for (var i = 0; i < bytes.length; i++)
    {
        bytes[i] = data.charCodeAt(i);
    }
    return bytes;
},
bytesToEncodedString: function(bytes) {
    return btoa(String.fromCharCode.apply(null, bytes));
},

我希望这会有所帮助