-我从事温度和湿度读取设备的开发。我们有自己的温湿度读取设备(基于 USB 的 COM(串行)端口设备)。目前,我们使用独立软件获取该软件,该软件使用虚拟 com 端口驱动器与设备进行通信。但是,我想使用“网络串行 API”在我的网络应用程序中读取这些记录的数据。
在编写代码以读取该数据时,我无法获取数据。我正在关注“ https://web.dev/serial/ ”这篇文章来读取数据。
- 我应该使用带有 Web 串行 API 的虚拟 comport 驱动程序来读取数据吗?
那么我该怎么做才能使用“web serial API”读取usb com端口设备数据。
--这是我的写入和读取数据的代码。
<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);
}
}