【问题标题】:node.js and bluetooth barcode-scannernode.js 和蓝牙条码扫描器
【发布时间】: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


    【解决方案1】:

    这不是我想要的方式,而是当扫描仪可用时启动我的节点应用程序的 bash 脚本,它可以完成这项工作:

    #!/bin/bash
    
    echo "Press CTRL+C to stop..."
    
    while :
    do
       if hcitool scan | grep -q "00:06:11:68:15:81"; then
         # BT scanner found
         node .
       fi
    
       sleep 1
    done
    

    【讨论】:

      猜你喜欢
      • 2021-10-08
      • 2019-01-04
      • 1970-01-01
      • 1970-01-01
      • 2015-03-03
      • 2018-03-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多