-I负责温湿度读数装置的开发。我们有自己的温湿度读写器(基于USB的COM(串行)端口设备).目前,我们使用虚拟com端口驱动器与设备通信的with独立软件。但是,我想使用“”在我的web应用程序中读取这些记录数据。
在编写读取数据的代码时,我无法获取数据。我跟随"https://web.dev/serial/“这篇文章来阅读数据。
-should我使用一个虚拟的comport驱动程序和web串行API来读取数据吗?
那么,我能做些什么来读取usb端口设备数据与"web串行API“。
-这是我写和读数据的代码。
<script>
class LineBreakTransformer {
constructor() {
this.chunks = "";
}
transform(chunk, controller) {
this.chunks += chunk;
const lines = this.chunks.split("\r\n");
this.chunks = lines.pop();
lines.forEach((line) => controller.enqueue(line));
}
flush(controller) {
controller.enqueue(this.chunks);
}
}
async function onStartButtonClick() {
try {
const port = await navigator.serial.requestPort();
console.log("req");
await port.open({ baudRate: 19200,
dataBits: 8,
stopBits: 1,
parity: "none",
flowControl: "none",
});
const {usbProductId, usbVendorId}=port.getInfo();
document.getElementById("sdata").innerHTML=usbProductId+" "+ " <br>"+usbVendorId;
console.log("opanning");
const writer = port.writable.getWriter();
console.log("true is");
const data = new Uint8Array([0x32]);
await writer.write(data);
console.log("succ");
writer.releaseLock();
while (port.readable) {
const textDecoder = new TextDecoderStream();
const readableStreamClosed = port.readable.pipeTo(textDecoder.writable);
const reader = textDecoder.readable
.pipeThrough(new TransformStream(new LineBreakTransformer()))
.getReader();
console.log("portreadable");
try {
while (true) {
const { value, done } = await reader.read();
if (done) {
console.log("Canceled");
break;
}
console.log("tryfun");
console.log(value);
}
} catch (error) {
console.log("Error: Read");
console.log(error);
} finally {
reader.releaseLock();
}
}
} catch (error) {
console.log("Error: Open");
console.log(error);
}
}

发布于 2022-02-25 05:26:38
是否应该使用带有web串行API的虚拟comport驱动程序来读取数据?
对您的问题的回答是肯定的,无论安装了什么驱动程序,如果您可以使用设备作为独立软件,那么在使用WebSerial时应该可以访问该设备。
我的假设是,您的浏览器在调用navigator.serial.requestPort()后向您显示了一个串行设备列表,您可以选择预期的设备并单击“连接”按钮。如果您没有看到对话框或对话框上的设备,请查看设备管理器以更好地理解如何访问该设备(例如,它可能需要WebUSB)。
您的port.open只需要are,因为其余的值,8N1,没有硬件流控制,是缺省值。
await port.open({ baudRate: 19200 });您可能希望简化初始代码,以查看写入后设备实际返回的内容。这段位于https://streams.spec.whatwg.org/#rs-intro上的代码应该有助于实现这一目标。
console.log(await readAllChunks(port.readable));
function readAllChunks(readableStream) {
const reader = readableStream.getReader();
const chunks = [];
return pump();
function pump() {
return reader.read().then(({ value, done }) => {
if (done) {
return chunks;
}
chunks.push(value);
return pump();
});
}
}https://stackoverflow.com/questions/70920727
复制相似问题