我们刚刚从基于 USB HID 的秤切换到基于串行的秤。我在使用 JavaScript 从这些秤中检索数据时遇到问题。
(async () => {
const ports=await navigator.serial.getPorts();
const myScale=ports[0];
await myScale.open({ baudRate: 9600,dataBits:8,stopBits: 1, parity: `none`,flowControl: `none`});
console.log(`myScale: `, myScale);
const textDecoder = new TextDecoderStream();
const readableStreamClosed = myScale.readable.pipeTo(textDecoder.writable);
const reader = textDecoder.readable.getReader();
// Listen to data coming from the serial device.
while (true) {
const { value, done } = await reader.read();
if (done) {
// Allow the serial port to be closed later.
reader.releaseLock();
break;
}
// value is a string.
console.log(value);
}
})();
myScale
正确创建:
myScale:
SerialPort {onconnect: null, ondisconnect: null, readable: ReadableStream, writable: WritableStream}
onconnect: null
ondisconnect: null
readable: ReadableStream
locked: false
[[Prototype]]: ReadableStream
writable: WritableStream
locked: false
[[Prototype]]: WritableStream
[[Prototype]]: SerialPort
close: ƒ close()
getInfo: ƒ getInfo()
getSignals: ƒ getSignals()
onconnect: (...)
ondisconnect: (...)
open: ƒ open()
readable: (...)
setSignals: ƒ setSignals()
writable: (...)
constructor: ƒ SerialPort()
Symbol(Symbol.toStringTag): "SerialPort"
get onconnect: ƒ onconnect()
set onconnect: ƒ onconnect()
get ondisconnect: ƒ ondisconnect()
set ondisconnect: ƒ ondisconnect()
get readable: ƒ readable()
get writable: ƒ writable()
[[Prototype]]: EventTarget
但是当尝试从秤读取输入时,一切都会停止:
const { value, done } = await reader.read();
我做错了什么?
Argh...与之前的基于 HID 的秤不同,它可以连续读数,用户需要按此秤上的“打印”按钮才能发送数据。