使用Evothings JavaScript读取BLE特征数据

时间:2015-06-14 08:31:27

标签: bluetooth

我有一台BLE(蓝牙4.0)计步器设备,我想使用Evothings插件(使用Javascript API与设备交互)读取特征数据

我正在使用以下代码 - 设备连接时的回调=

function deviceConnected(device) {
    console.log('Connected to device: ' + device.name)
    console.log('Reading services... Have patience!')
    device.readServices(
        null, // null means "read all services".
         readAllServicesCharacteristicsAndNotifications,
        // listAllServicesCharacteristicsDescriptors,
        readServicesError)
}

readAllServicesCharacteristicsAndNotifications的回调代码 -

function readAllServicesCharacteristicsAndNotifications(device) {
    // Get data for each service
   console.log('number of services ' + device.__services.length)
   console.log('number of characteristic ' + device.__services[0].__characteristics.length)
        //var characteristic = service.__characteristics[characteristicUUID]
        device.readCharacteristic(
        device.__services[0].__characteristics[8]['uuid'],
        function (data) {
            var test = new Uint8Array(data);
            var result = "";
            for (var i = 0; i < test.length; i++) {
                console.log('data  element is ' + test[i]);
                console.log('data  element string is ' + String.fromCharCode(parseInt(test[i], 2)));
                result += String.fromCharCode(parseInt(test[i], 2));
            }

            console.log('data  is ' + result);
        },
        function (errorCode) {
        console.log('BLE readCharacteristic error: ' + errorCode);
     });
}

我认为BLE数据格式表明数据是作为二进制代码字节交换的。 我在字节数组中看到了值,但我不知道如何解释它。

有没有人使用Evothings Javascript与BLE设备进行互动?

1 个答案:

答案 0 :(得分:0)

H i,JavaScript中通过BLE接收的数据是字节缓冲区。

看看你是否能找到计步器的文档。查看计步器发送的数据格式。然后相应地访问缓冲区中的数据。

以下是一些例子。

访问数据缓冲区中的字节值:

var buf = new Uint8Array(data);
var value1 = buf[0];
var value2 = buf[1];

要获得16位值,请使用按位OR,例如:

var value = buf[0] | (buf[1] << 8);

根据数据是小端或大端,按位OR需要以不同方式完成。

这是一个可以使用的库,它具有访问字节缓冲区中值的功能:https://github.com/evothings/evothings-examples/blob/master/resources/libs/evothings/util/util.js

以下是一个例子:

// Get the signed int value in the buffer thats starts at
// byte index 2 (the int value represented by byte 2 and 3).
var value = evothings.util.littleEndianToInt16(data, 2)

希望这有帮助!