当前位置: 首页 > 知识库问答 >
问题:

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

常永怡
2023-03-14

我试图学习如何使用bleno实现BLE外围设备。我想发现和阅读从外围使用贵族。例如,我想知道我将如何实现一个简单的智能秤,报告体重,体重指数等,遵循体重测量GATT规范。

我搞不清楚的是,是否可以从一个特征中读取多条信息。GATT的重量测量规范使它看起来像是一个单一的高贵特征。read()您可以同时检索体重、BMI、身高等。

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

'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);
  }
}

如果有人能够实现上面的/pseudocodeonReadRequest(),我想这会有助于我的思维。

问题:

  1. C吗

还是我做错了?每个值都应该有一个特征吗?体重的一个特征是SI,体重指数的另一个特征是BMI?我希望避免这种情况,希望节省往返时间,并在一次通话中获得多个值。


共有1个答案

单于山
2023-03-14

尝试回答您的问题:

  1. 我不确定C是什么

注:上表中的字段按LSO到MSO的顺序排列。其中LSO=最低有效八位组,MSO=最高有效八位组。

因此,我相信为了得到“Weight-SI”字段,你可以做如下操作:

    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
    });

 类似资料:
  • 问题内容: 有点卡在这里,可能需要您的帮助。我想一次阅读几个BLE特性,有人建议为此使用PriorityQueue。我已经知道所有的uuid,等等。只需要一种同时读取多个uuid的方法。谁能解释它到底是什么样子?也许还有另一个更简单的解决方案? 在此先感谢,这是我的代码: 更新: 即使将它们放在不同的线程上,它仍然仍然只对一个gatt.readCharacteristic(…)做出反应。如下所示:

  • 我试图使用FetchAPI从一个输入中发布多个文件,但表单数据在附加后仍然为空 我看了看这里,这里,这里,这里和这里的答案,并尝试了他们都没有用 我使用Laravel框架作为后端,这是我的刀片视图文件 控制台记录一个空表单数据对象 这是后端的代码 在其中我得到一个空数组 真的不知道为什么这不起作用!你知道我做错了什么吗?

  • 我有一个设计问题,当使用类似的东西时: 我认为应该有一些更好的方法来实现这种参数化的特性。 我在std中没有找到好的示例(例如,在具有类似的关联类型的traits中没有实现)?

  • 我当前的Cucumber文件如下所示: 所以现在我想再添加几个场景,可能是在同一个文件中进行API测试。所以我想为此创建一个新特性,而不是使用Feature:Test Online application页面。这样我就不需要为API测试创建单独的特性文件。

  • 我从API23改为22,因为他们说httpclient不可用。当我切换到API22时,我遇到了HttpClient、HttpPost和NameValuePair的问题。我找到了使用HttpURLConnectionHandler的解决方案。但是我不知道如何将它用于下面的方法。 有人好心帮我一把

  • 我开发了一个应用程序。在我的应用程序中,我从相机或画廊拍摄一张图像。我想使用多部分发布图像到服务器,但图像不发布它。我的帖子数据如下