我正在使用串行端口访问与 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>
感谢您的帮助!
1条答案
按热度按时间zy1mlcev1#
我遇到了同样的问题,并设法解决了它。
变更
到
你得到这个的例子(和其他一些例子)是错误的,参数的方式是错误的。我也不知道为什么但是当我
它也不工作,它不喜欢var数据。
navigator.serial上的文档不是很好。这里有一些帮助的链接
API(注意这是草稿,与Chrome实现不完全匹配)https://wicg.github.io/serial/
getReader()是一个ReadableStream
https://streams.spec.whatwg.org/#readablestream
使用ReadableStreamDefaultReader,其定义为
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