2016-08-29 3 views
0

Я довольно долго пытаюсь получить прочное долгосрочное соединение с сканером штрих-кода 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

ответ

0

Это не так, как я хотел бы пойти, но Баш скрипт для запуска моего приложения узла, когда сканер доступен, делает работу:

#!/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 
Смежные вопросы