【问题标题】:Using Evothings JavaScript to read BLE characteristic data使用 Evothings JavaScript 读取 BLE 特征数据
【发布时间】:2015-06-14 08:31:26
【问题描述】:

我有一个 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 设备交互吗?

【问题讨论】:

    标签: bluetooth


    【解决方案1】:

    你好,在 JavaScript 中通过 BLE 接收的数据是一个字节缓冲区。

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

    这里有一些例子。

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

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

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

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

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

    这是一个您可以使用的库,它具有访问字节缓冲区中的值的函数: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)
    

    希望这会有所帮助!

    【讨论】:

      猜你喜欢
      • 2016-07-26
      • 1970-01-01
      • 2016-11-09
      • 1970-01-01
      • 2021-12-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多