javascript - BLE主控: scanning while connected

标签 javascript bluetooth bluetooth-lowenergy

基本上我的问题与 BLE peripheral: scanning while connected 非常相似,只是我指的是主设备而不是外设。

如果主设备已经连接到一个或多个外围设备,它是否仍然能够扫描其他进行广告的外围设备?

我还使用 bleno 作为外围设备,使用 noble 作为主设备,但我认为这个问题的答案并不取决于实际的模块,而是符合蓝牙低功耗规范,是吗?

最佳答案

是的,中央设备可以在与其他外围设备建立连接的同时进行扫描。请注意,单个外围设备在连接到中央设备时可能会停止广告。这可能会在测试时增加困惑。

这是使用 Nobel 的最小演示:

var noble = require('noble');
var connectedIDs = {};

noble.on('stateChange', (state) => {
  if (state == 'poweredOn') {
    noble.startScanning([], true);
  }
});

noble.on('discover', (peripheral) => {
  if (connectedIDs[peripheral.id] == 'known') {
    console.log(new Date() + ' ' + peripheral.id + ' discovered again');
  } else {
    console.log(new Date() + ' ' + peripheral.id + ' discovered first time')
    connectedIDs[peripheral.id] = 'known';
    // periodically connect to the same peripheral so we get the error
    // message telling us that we are already connected
    setInterval( () => {
      peripheral.connect( (err) => {
        if (err) {
          console.log(new Date() + ' ' + peripheral.id + ' ' + err);
          return;
        }
        console.log(new Date() + ' ' + peripheral.id + ' connected');
      });
    }, 1000);
  }
});

此代码示例连接到它发现的所有外围设备,并同时记录它从中接收广告数据的外围设备的 ID。

输出( chop 一些列和行):

10:51:06 8652... Error: Peripheral already connected
10:51:06 567b... Error: Peripheral already connected
10:51:06 f0ba... Error: Peripheral already connected
10:51:06 d095... Error: Peripheral already connected
10:51:06 3800... Error: Peripheral already connected
10:51:07 6c20... discovered first time
10:51:07 f0ba... Error: Peripheral already connected
10:51:07 d095... Error: Peripheral already connected
10:51:07 3800... Error: Peripheral already connected
10:51:07 6c20... discovered again
10:51:08 8652... Error: Peripheral already connected
10:51:08 567b... Error: Peripheral already connected
10:51:08 f0ba... Error: Peripheral already connected
10:51:08 6c20... discovered again
10:51:08 d095... Error: Peripheral already connected
10:51:08 8652... Error: Peripheral already connected
10:51:08 3800... Error: Peripheral already connected
10:51:08 6c20... discovered again
10:51:08 f0ba... Error: Peripheral already connected
10:51:08 d095... Error: Peripheral already connected
10:51:08 3800... Error: Peripheral already connected
10:51:08 6c20... connected
10:51:08 6c20... connected

发生了什么?

首次发现6c20...时,多个外设已连接至noble。重复连接尝试的错误消息表明扫描时外围设备仍然处于连接状态。在我的示例运行中,我连接了 6 个 BLE 外设,6c20... 是第 7 个加入的设备。我在 2015 年中期运行 OS X 10.11.3 的 MacBookPro 上使用了 Nobel v1.3.0 和 Node v4.2.4。

这并不能回答第二个问题:此行为是否取决于实际模块或蓝牙低功耗规范?

据我所知,BLE 规范没有指定中心必须支持的连接数量。 AFAIK 因为 BLE 核心规范相当大,并且所有对同时和多个连接的引用我可以发现它取决于实现。所以,这似乎完全取决于由硬件和软件组成的BLE产品。即使 BLE 规范会指定它,我也更愿意检查产品的数据表。此外,它还取决于主机上运行的软件。幸运的是,贵族做到了。

举个例子,我们看一下Nordic的Soft Device S120的datasheet:https://www.nordicsemi.com/eng/nordic/download_resource/26275/14/32008006

S120 软设备是 Nordic NRF51 系列 BLE IC(最著名的例子是 nRF51822)的 BLE 堆栈(固件)。

以下是上面链接的数据表的引用:

The SoftDevice supports eight concurrent master connections and an additional Scanner/Initiator role. When the maximum number of simultaneous connections are established, the Scanner role will be supported for new device discovery though the initiator is not available at that time.

关于javascript - BLE主控: scanning while connected,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35886204/

相关文章:

javascript - 将数组 N 次复制到扁平数组

javascript - 如果设计师可以使用@font-face,为什么还要使用 sIFR?

c# - 32feet.net : Invalid argument supplied - Parani module

ios - 从 iOS 应用程序到 LEGO Mindstorms EV3 积木的蓝牙连接

winapi - 检测 Windows 7 蓝牙堆栈

bluetooth - CC2540 USB - 使可发现 : Not ready to perform task

javascript - 在asp中打开新窗口:linkButton Click event

javascript - 显示隐藏 Scollto 菜单不会触发普通链接?

swift - .writeValue 不会让我将十六进制字符串写入特征以启用通知

java - 如何在Ubuntu中运行TinyB库?