我正在开发一个 Google Chrome 扩展,它通过串行方式与 Arduino UNO 进行通信。我写了下面的函数 sendSerialCmd 它需要一个端口(字符串)、一个serial_cmd(ArrayBuffer)和一个回调函数,该函数获取从串行连接读入的readInfo.data(ArrayBuffer)。

var CONNECTION_ID = -1;
var sendSerialCmd = function(port, serial_cmd, callback) {
chrome.serial.open(port, null, function(openInfo){
    CONNECTION_ID = openInfo.connectionId;
    if (CONNECTION_ID == -1) {
        console.log('Could not connect to serial');
        return;
    }
    chrome.serial.write(CONNECTION_ID, serial_cmd, function(writeInfo){
        chrome.serial.read(CONNECTION_ID, 8, function(readInfo){
            callback(readInfo.data);
        });
    })
});
chrome.serial.close(CONNECTION_ID, function(result){ console.log(result) });
};

我遇到的问题之一是传递给的第三个参数 chrome.serial.read() 功能。在里面 chrome.serial API,第三个参数是 字节读取(整数):要读取的字节数, 但是,来自 Arduino 的字节数可能会发生变化。有时我可能会得到 8 个字节,有时更多。获取从 Arduino 发回的所有字节的最佳方法是什么?

Arduino 有一个新颖的解决方案,通过一个名为 串行可用() 它返回可供读取的字节数。我可以使用 Chrome.serial API 做类似的事情吗?

有帮助吗?

解决方案

没有类似的功能 Serial.available() 在 Chrome 串行 API 中,但您应该只轮询一些合理的字节数并按照自己的节奏处理数据。

如果一个 read 请求(例如)1024 字节,但只有 8 字节可用, read 只需 8 个字节,仍然应该很快成功。如果有 8 字节消息和 12 字节消息可用,则 read 将成功使用 20 个字节,您可以应用解析结果数据所需的任何逻辑。

仅供参考,Canary 中的串行 API 即将发生变化,您将不再负责手动轮询 read. 。相反,Chrome 会轮询您并触发 chrome.serial.onReceive 事件作为数据可从开放设备获取。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top