BLE master:连接时扫描

时间:2016-03-09 08:13:32

标签: javascript bluetooth bluetooth-lowenergy

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

如果主设备已连接到一个或多个外围设备,是否仍然可以扫描其他做广告的外围设备?

我还使用bleno作为外设,noble作为主控,但我认为这个问题的答案并不取决于实际的模块,而是取决于蓝牙低能量规格,是吗?

1 个答案:

答案 0 :(得分:2)

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

这是使用贵族的最小示范:

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。

输出(截断一些列和行):

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...时,多个外围设备已连接到贵族。重复连接尝试的错误消息表明外围设备在扫描时仍然连接。在我的示例运行中,我连接了6个BLE外围设备,6c20...是加入该聚会的第7个。我在2015年中期使用OS X 10.11.3的MacBookPro上使用了贵族v1.3.0和节点v4.2.4。

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

AFAIK,BLE规范没有规定中央必须支持的连接数量。 AFAIK,因为BLE核心规范相当大,所有对同时和多个连接的引用我都可以找到它依赖于实现的状态。因此,这似乎完全取决于由硬件和软件组成的BLE产品。即使BLE规范指定它,我也希望查看产品的数据表。此外,它还取决于主机上运行的软件。幸运的是,贵族确实如此。

举个例子,让我们来看看Nordic软件S120的数据表:https://www.nordicsemi.com/eng/nordic/download_resource/26275/14/32008006

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

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

  

SoftDevice支持八个并发主连接和一个   额外的扫描仪/启动器角色。当最大数量   建立同步连接,扫描仪角色将是   虽然启动器不是,但支持新设备发现   当时可用。