Поскольку сканирование асинхронно, это делает логику немного более сложной.Один из способов сделать это - дождаться окончания сканирования, а затем проверить результаты.
connectByName: function(name) {
const devices = [];
// scan and save devices to a list
ble.startScan([], d => devices.push(d));
// check the list when the scan stop
setTimeout(() => {
ble.stopScan();
const device = devices.filter(d => d.name === name)[0];
if (device) {
ble.connect(device.id, app.onConnected, app.onDisconnected);
} else {
console.log(`Couldn't find device ${name}`);
}
}, 5000);
},
Это работает нормально, но вам всегда нужно ждать окончания сканирования.Даже если сканирование обнаружит устройство немедленно, нужно подождать тайм-аут.Другой подход состоит в том, чтобы фильтровать устройства во время сканирования.
connectByName: function(name) {
let scanning = true;
ble.startScan([], device => {
if (device.name === name) {
ble.stopScan();
scanning = false;
ble.connect(device.id, app.onConnected, app.onDisconnected);
} else {
console.log(`Skipping ${device.name} ${device.id}`);
}
});
// set timer to stop the scan after a while
setTimeout(() => {
if (scanning) {
ble.stopScan();
console.log(`Couldn't find device ${name}`);
}
}, 5000);
},
Второй метод часто лучше, так как он может подключаться быстрее.
Если вы работаете только на Android и у вас есть MAC-адрес устройства, вы можете подключиться без сканирования.(iOS по-прежнему требует от вас сканирования.)
onDeviceReady: function() {
// connect by MAC address on startup
const MAC_ADDRESS = 'E4:86:1E:4E:5A:FB';
ble.connect(MAC_ADDRESS, app.onConnected, app.onDisconnected);
},
Существует также новая функция автоматического подключения, которая автоматически подключается и отключается, когда телефон находится в зоне действия устройства.(Это пока не работает на iOS.)
onDeviceReady: function() {
// Auto connect whenever the device is in range
const MAC_ADDRESS = 'E4:86:1E:4E:5A:FB';
ble.autoConnect(MAC_ADDRESS, app.onConnected, app.onDisconnected);
},
См. https://gist.github.com/don/e423ed19f16e1367b96d04ecf51533cc для получения полной версии index.js