Я довольно долго пытаюсь получить прочное долгосрочное соединение с сканером штрих-кода Bluetooth от Inateck, используя node.js. Процесс выполняется в фоновом режиме (linux, без ввода-фокуса), поэтому я настроил сканер как устройство SPP.node.js и blcetooth barcode-scanner
Соединение в основном работает до тех пор, пока сканер не выключится автоматически, чтобы сэкономить электроэнергию, которая составляет около 5 минут.
Мой первый подход состоял в том, чтобы использовать пакет bluetooth-serial-port. Он обнаруживает сканер, считывает штрих-коды, но когда сканер отключается, я не знаю, как повторно подключиться. Я добавил таймер интервала, чтобы проверить соединение и попытаться подключиться снова, если isOpen() возвращает false (который работает один раз). Когда я нажимаю кнопку на сканере, он снова включается, и я могу повторно подключиться, но после просмотра секунд isOpen() возвращает false, даже если соединение установлено, и я не получаю никаких дальнейших чтений. Вот мой код:
var btSerial = new (require('bluetooth-serial-port')).BluetoothSerialPort();
var btInterval = null;
btSerial.on('found', function (address, name) {
btSerial.findSerialPortChannel(address, function (channel) {
if (address === '00:06:11:68:15:81') {
btSerial.connect(address, channel, function() {
console.log('connected to ' + address);
btInterval = setInterval(function() {
if (!btSerial.isOpen()) {
btSerial.close();
clearInterval(btInterval);
console.log('lost connection - try to reconnect');
btSerial.inquire();
}
}, 5000);
}, function() {
console.log('cannot connect to ' + address);
});
}
}, function() {
console.log('found nothing');
});
});
btSerial.on('finished', function() {
console.log('finished');
});
btSerial.on('data', function (buffer) {
console.log(buffer.toString('utf-8'));
});
btSerial.inquire();
Результат выглядит следующим образом:
finished
connected to 00:06:11:68:15:81
found nothing
... scanning works ...
lost connection - try to reconnect
finished
connected to 00:06:11:68:15:81
... scanning works ...
lost connection - try to reconnect
finished
... that's it - no more scans ...
^C
Другая идея состояла в том, чтобы использовать узлы фс() считываются непосредственно из '/ DEV/rfcomm0.
scanner = fs.createReadStream('/dev/rfcomm0', {bufferSize: 1});
scanner.on('open', function() {
logger.info('Scanner connected');
});
scanner.on('end', function() {
logger.info('End of data stream');
});
scanner.on('close', function() {
logger.info('Scanner disconnected');
});
scanner.on('error', function (error) {
logger.error('Scanner error');
});
scanner.on('data', function (chunk) {
logger.info(chunk.toString('ascii', 0, 13));
}
});
});
Подключение осуществляется с помощью операционной системы автоматически при чтении из устройства и я получить коды через на («данные», ..). Но у меня такая же проблема, когда сканер отключается через некоторое время. Я получаю событие on ('close', ..), но повторное подключение с использованием fs.createReadStream() снова не работает.
Возможно, кто-то из вас уже имел дело с такой проблемой и может дать мне подсказку, как с этим справиться. Я ценю каждое предложение.
Спасибо, Max