首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用bleno发布多个BLE特征数据

如何使用bleno发布多个BLE特征数据
EN

Stack Overflow用户
提问于 2017-08-31 21:14:10
回答 1查看 1K关注 0票数 0

我正在学习如何使用布莱诺实现BLE外围设备。我想用贵姓从外设中发现和阅读。例如,我想知道我如何实现一个简单的智能量表,报告体重指数,体重指数等跟随重量测量GATT规范

我不知道的是,是否可以从一个特征中读取多个信息。重量测量GATT规范使它看起来像是在一个高贵的characteristic.read(),你可以同时检索体重,体重指数,身高等。

例如,这个简单的bleno特性:

代码语言:javascript
复制
'use strict';

const bleno = require('bleno');

const flags = {
  IMPERIAL_WEIGHT: 1 << 0,
  USER_ID_PRESENT: 1 << 2,
  BMI_AND_HEIGHT_PRESENT: 1 << 3
};

module.exports.flags = flags;

module.exports.WeightMeasureCharacteristic = class WeightMeasureCharacteristic extends bleno.Characteristic {
  constructor(scale) {
    super({
      uuid: '2A9D',
      properties: ['read'],
      descriptors: []
    });
    this._scale = scale;
  }

  onReadRequest(offset, callback) {
    //Not sure what `offset` means here or how it gets populated...Help!

    let data = new Buffer.alloc(8); //1(flags)+2(weightImp)+1(userId)+2(BMI)+2(heightImp)

    //Write supported value fields as bit flags
    data.writeUInt8(flags.IMPERIAL_WEIGHT | flags.USER_ID_PRESENT | flags.BMI_AND_HEIGHT_PRESENT), 0);

    //Write out weight (lbs) - offset 1 byte
    data.writeUInt16LE(100.01, 1);

    //Write out user id - offset 12 bytes (flags+Imperial, no need to include offset for SI or Timestamp since the flags indicated those are not supported)
    data.writeUInt8(69, 3);

    //Write out BMI - offset 13 bytes (after UserId)
    data.writeUInt16LE(18.6, 4);

    //Write out Height Imperial - offset 17 bytes (after Height SI)
    data.writeUInt16LE(72.2, 6);

    callback(this.RESULT_SUCCESS, data);
  }
}

如果有人能够在上面实现/伪代码onReadRequest(),我认为这将有助于我头脑中的事情。

问题:

  1. C<number>值在等级库的“字段需求”列中是否指示传递给onReadRequest()offset值?如果消费者想要获得“重量- SI"(C1),他们会以某种方式构建一个触发onReadRequest(1,function())的高尚的characteristic.read()?如果是这样,characteristic.read()是如何构造的?
  2. 如何构造一个高尚的characteristic.read()以获得Flags的值
  3. 如何构造一个高尚的characteristic.read(),它将在一次读取中返回多个(或所有)属性?给我所有这些外围支持的价值(体重- SI,BMI等)。
  4. 如果我的外围设备支持帝国体重、用户id、体重指数和身高,我如何在onReadRequest()中填充回调的onReadRequest()。我上面的内容正确吗?
  5. 如何填充offset &在onReadRequest(offset,callback)中它意味着什么?

还是,我做错了?我应该对每一个价值都有一个特征吗?例:体重的单一特征- SI,和BMI的另一个特征?我想避免这种情况,我更愿意节省往返,并在一次调用中获得多个值。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-09-01 00:27:36

试图回答你的问题:

  1. 我不知道C<number>是什么意思,但我相信每个领域(体重、体重指数、身高等)表示为一个或多个八位数的组。注意在规范的底部是怎么写的

注:上表中的字段按LSO到MSO的顺序排列。其中LSO =最小的八进制,MSO =最重要的八位。

因此,我相信,为了得到“加权- SI”字段,您将执行如下操作:

代码语言:javascript
复制
    characteristic.read((err, data) => {
      let char_flags = data.readUint8(0); // read first bit
      if (!(char_flags & flags.IMPERIAL_WEIGHT)) // if SI weight
        let weightSI = data.readUint16LE(1) // read SI weight starting at second bit
    });
  1. 以上回答
  2. 以上回答后,只需检查标志中是否存在该属性,然后从适当的偏移量中读取该值。此外,可能会有所帮助。
  3. 上面回答了。
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45990186

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档