初学者的问题与 chrome 导航仪,串行

tzdcorbm  于 2023-05-27  发布在  Go
关注(0)|答案(1)|浏览(143)

我正在使用串行端口访问与 chrome 浏览器,使用“navigator.serial”。
我最初的实验是基于之前在stackoverflow上发布的一篇文章:
Is there an example site that uses navigator.serial?
我复制了上面引用的代码示例,并进行了所需的配置更改#enable-experimental-web-platform-features,同样如上所述。
这一切都是在Ubuntu 18.04上完成的。机器上连接了两个USB串行端口,我已经使用gtkterm验证了我可以在两个端口之间发送和接收数据。
从给出的示例(下面重复的代码)中,我发现我可以打开串行端口并建立一个“读取器”,并且await reader.read()步骤确实会等到串行端口上出现传入字符,但此时变量/对象“data”仍然未定义。两个问题:
1.我做错了什么,让“数据”未定义?我添加了一个alert()对话框,一旦const {done, data} = await reader.read();继续,该对话框就会弹出,但是,该对话框显示“data”在该点是undefined。数据是一个承诺,我没有等待实现?
1.我还没能找到一个(希望是自包含的)关于所涉及的类的方法和成员的引用(即,reader.read()和reader.write()是我的对象“readeer”可用的方法;我在哪里可以找到可用方法的列表,以及这些方法的属性?
下面是从上面一年前发布的代码(小网页)的副本:

<html>
<script>
var port;
var buffy = new ArrayBuffer(1);
var writer;
buffy[0]=10;
const test = async function () {
    const requestOptions = {
      // Filter on devices with the Arduino USB vendor ID.
      //filters: [{ vendorId: 0x2341 }],
    };

    // Request an Arduino from the user.
    port = await navigator.serial.requestPort(requestOptions);

    // Open and begin reading.
    await port.open({ baudrate: 115200 });
    //const reader = port.in.getReader();
    const reader = port.readable.getReader();
    writer = port.writable.getWriter();
    //const writer = port.writable.getWriter();
    //writer.write(buffy);
    while (true) {
      const {done, data} = await reader.read();
      if (done) break;
      console.log(data);
    }
} // end of function
</script>
<button onclick="test()">Click It</button>
</html>

感谢您的帮助!

zy1mlcev

zy1mlcev1#

我遇到了同样的问题,并设法解决了它。
变更

const {done, data} = await reader.read();

const {value, done} = await reader.read();

你得到这个的例子(和其他一些例子)是错误的,参数的方式是错误的。我也不知道为什么但是当我

const {data, done} = await reader.read();

它也不工作,它不喜欢var数据。
navigator.serial上的文档不是很好。这里有一些帮助的链接
API(注意这是草稿,与Chrome实现不完全匹配)https://wicg.github.io/serial/
getReader()是一个ReadableStream
https://streams.spec.whatwg.org/#readablestream
使用ReadableStreamDefaultReader,其定义为

dictionary ReadableStreamDefaultReadResult {
    any value;
    boolean done;
};

https://streams.spec.whatwg.org/#readablestreamdefaultreader
解释器https://github.com/WICG/serial/blob/gh-pages/EXPLAINER.md
教程https://codelabs.developers.google.com/codelabs/web-serial
chrome 追踪器https://goo.gle/fugu-api-tracker
Web串行API工作项https://bugs.chromium.org/p/chromium/issues/detail?id=884928

相关问题