基本上,我的问题与BLE peripheral: scanning while connected非常相似,只是我指的是主设备,而不是外围设备。
如果一个主机已经连接到一个或多个外设,它还能扫描其他做广告的外设吗?
我也使用bleno作为外围设备,noble作为主设备,但是我认为这个问题的答案并不取决于实际模块,而是取决于蓝牙低能规范,对吗?
发布于 2016-03-09 22:40:38
是的,当建立到其他外围设备的连接时,中央可以扫描。请注意,单个外围设备在连接到中央时可能会停止广告。这可能会增加测试时的混乱。
下面是一个使用崇高的最低限度的演示:
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年中期的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角色进行新的设备发现,尽管此时启动器不可用。
https://stackoverflow.com/questions/35886204
复制相似问题