基本上我的问题与BLE peripheral: scanning while connected非常相似,只是我指的是主人而不是外围设备。
如果主设备已连接到一个或多个外围设备,是否仍然可以扫描其他做广告的外围设备?
我还使用bleno
作为外设,noble
作为主控,但我认为这个问题的答案并不取决于实际的模块,而是取决于蓝牙低能量规格,是吗?
答案 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支持八个并发主连接和一个 额外的扫描仪/启动器角色。当最大数量 建立同步连接,扫描仪角色将是 虽然启动器不是,但支持新设备发现 当时可用。