Javascript chrome扩展-从串行端口读取

Javascript chrome扩展-从串行端口读取,javascript,google-chrome,serial-port,google-chrome-app,Javascript,Google Chrome,Serial Port,Google Chrome App,这是我第一次尝试使用chrome应用程序或扩展进行开发。我在USB端口上有一个GPS接收器,模拟为串行设备 运行此代码 var onGetDevices = function(ports) { for (var i=0; i<ports.length; i++) { // show me some output console.log(ports[i].path); // Connect to the serial port /dev/ttyUSB0

这是我第一次尝试使用chrome应用程序或扩展进行开发。我在USB端口上有一个GPS接收器,模拟为串行设备

运行此代码

var onGetDevices = function(ports) {

for (var i=0; i<ports.length; i++) {

    // show me some output
    console.log(ports[i].path);

    // Connect to the serial port /dev/ttyUSB0
    chrome.serial.connect(ports[i].path, {bitrate: 9600}, onConnect);   
  }
}
chrome.serial.getDevices(onGetDevices);
但我得到了以下错误:

响应serial.connect:ReferenceError时出错。\u未定义此错误 在Object.onGetDevices[作为回调]


我不确定我在这里到底做对了还是错了,所以任何指针都值得赞赏。

首先,这个示例不能正常工作。请尝试以下方法:

var connectionId;

$(document).ready(function() {
    chrome.serial.getDevices(function(devices) {

        for (var i = 0; i < devices.length; i++) {
            $('select#portList').append('<option value="' + devices[i].path + '">' + devices[i].path + '</option>');
        }
    });

    // ui hook
    $('button#open').click(function() {
        var clicks = $(this).data('clicks');

        if (!clicks) {
            var port = $('select#portList').val();
            chrome.serial.connect(port, {bitrate: 9600}, function(info) {
                connectionId = info.connectionId;
                $("button#open").html("Close Port");
                console.log('Connection opened with id: ' + connectionId + ', Bitrate: ' + info.bitrate);
            });
        } else {
            chrome.serial.disconnect(connectionId, function(result) {
                $("button#open").html("Open Port");
                console.log('Connection with id: ' + connectionId + ' closed');
            });
        }

        $(this).data("clicks", !clicks);
    });
});

现在,对于从串行连接中实际读取输入,它将起作用,但将ArrayBuffer转换为字符串比预期的要困难一些。

看起来像变量_,这在代码中没有定义。但是,代码直接取自chromes教程示例,是否需要定义,如果需要,又如何?链接这里这是伟大的,好问题真棒,谢谢乔,这真的让我走上了正确的轨道。不敢相信chrome教程没有正确的工作代码。。!没问题。我自己花了一点时间才弄明白。乔-我现在无法连接到端口。这很奇怪,只是好像不想打球。你准备好了什么并运行了你的终端吗?是的,我使用了这个精确的代码来读取串行设备,在这个例子中是条形码扫描仪。我假设即使设置了比特率,它也无法打开?可能就是这样。尝试thr chrome.usb lib,看看是否有帮助。
var connectionId;

$(document).ready(function() {
    chrome.serial.getDevices(function(devices) {

        for (var i = 0; i < devices.length; i++) {
            $('select#portList').append('<option value="' + devices[i].path + '">' + devices[i].path + '</option>');
        }
    });

    // ui hook
    $('button#open').click(function() {
        var clicks = $(this).data('clicks');

        if (!clicks) {
            var port = $('select#portList').val();
            chrome.serial.connect(port, {bitrate: 9600}, function(info) {
                connectionId = info.connectionId;
                $("button#open").html("Close Port");
                console.log('Connection opened with id: ' + connectionId + ', Bitrate: ' + info.bitrate);
            });
        } else {
            chrome.serial.disconnect(connectionId, function(result) {
                $("button#open").html("Open Port");
                console.log('Connection with id: ' + connectionId + ' closed');
            });
        }

        $(this).data("clicks", !clicks);
    });
});