使NodeJS服务器通过USB

时间:2017-05-29 21:08:34

标签: javascript node.js linux usb

我使用NodeJS服务器为色度计做了一个网络界面,该服务器使用 serialport npm library 读取USB串行输入,并将该信息发送到本地网页。色度计基本上是一个使用微控制器的电路,该微控制器通过USB 连接到我的PC ,使用中间USB模块。

该网页包含以下状态消息:“检测到设备”(如果该设备已插入USB中,则启动该页面),“设备已断开连接”(如果我从USB中拔出设备)。该消息可以完美地更新,例如从USB端口拔出设备但是在将其插回USB时无法自动检测,而无需刷新浏览器页面。

是否有任何解决方法可以让节点服务器在PC中插入时自动检测并更新状态消息?

服务器代码:https://codepen.io/grazvan/pen/wdLGPZ?editors=0010#0 目前,我在Linux上这样做,这就是boardPort = '/dev/ttyACM0';的原因。我也愿意接受Windows或其他编程语言的解决方案。

2 个答案:

答案 0 :(得分:2)

也许试试node-usb。在http://www.tarnyko.net/dl/gtk.htm上查看 UsbDetection

   usb.on('attach', function(device) { ... });
  

附加回调以插入设备。

   usb.on('detach', function(device) { ... });
  

附加回拨以拔出设备。

答案 1 :(得分:0)

由于我想要实现一个可以连接到任何类型串口的服务器,不仅是USB(作为节点-USB库),我成功实现了一个自动检测功能,可以监听并知道何时有关设备已连接。

let boardPort = '';
let boardKeywordIdentifier = 'Arduino'; //my device identifier
let checkingTimeInterval = 1000;
let waitForUsb = setInterval(getBoardPortName, checkingTimeInterval);

function getBoardPortName() {

    SerialPort.list(function(err,ports) {
        ports.forEach(function(port){

            if(port.manufacturer.includes(boardKeywordIdentifier)) {
                boardPort = port.comName;
            }

        })
    });

    if(boardPort != '') {
        clearInterval(waitForUsb);
        listenToTheBoard(boardPort); //function to be executed when board is connected
    }

}