首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >主机:连接时扫描

主机:连接时扫描
EN

Stack Overflow用户
提问于 2016-03-09 08:13:32
回答 1查看 2K关注 0票数 2

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

如果一个主机已经连接到一个或多个外设,它还能扫描其他做广告的外设吗?

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-03-09 22:40:38

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

下面是一个使用崇高的最低限度的演示:

代码语言:javascript
复制
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。

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

代码语言:javascript
复制
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年中期的OSX10.11.3的MacBookPro上使用了NoteV1.3.0和NodeV4.2.4。

这没有回答第二个问题:这种行为取决于实际模块还是蓝牙低能规范?

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

为了给出一个例子,让我们看一看北欧软设备S120:resource/26275/14/32008006的数据表

S120软设备是北欧NRF51系列BLE集成电路的一个BLE堆栈(固件)(最著名的例子是nRF51822)。

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

SoftDevice支持八个并发主连接和一个额外的扫描器/启动器角色。当建立了最大数量的同时连接时,将支持Scanner角色进行新的设备发现,尽管此时启动器不可用。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35886204

复制
相关文章

相似问题

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