我有一台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设备进行互动?
答案 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)
希望这有帮助!