【发布时间】:2016-08-29 09:35:31
【问题描述】:
我现在正在努力使用 node.js 从Inateck 获得与蓝牙条形码扫描仪的稳固、长期连接。该进程在后台运行(linux,无输入焦点),这就是我将扫描仪配置为 SPP 设备的原因。
只要扫描仪不自动关闭以节省电量,即大约 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
另一个想法是使用节点 fs() 直接从 '/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('data',..) 接收代码。但是当扫描仪在一段时间后关闭时,我确实遇到了同样的问题。我确实收到了 on('close',..) 事件,但再次使用 fs.createReadStream() 重新连接不再起作用。
也许你们中的某些人已经不得不处理这样的问题,并且可以给我一个提示如何处理这个问题。我感谢每一个建议。
谢谢, 最大
【问题讨论】:
标签: node.js bluetooth barcode-scanner