实现步骤
1. 请求串口访问权限
const port = await navigator.serial.requestPort();
使用 navigator.serial.requestPort() 提示用户选择串口设备。这需要用户交互以确保安全性。
2. 配置并打开串口
await port.open({
baudRate: 9600,
dataBits: 8,
parity: 'none',
stopBits: 1,
flowControl: 'none'
});
调用 port.open() 方法并传入配置参数,包括波特率、数据位、校验位、停止位和流控制。
3. 读取数据
const reader = port.readable.getReader();
while (true) {
const { value, done } = await reader.read();
if (done) break;
// 处理接收到的数据(Uint8Array)
const text = new TextDecoder().decode(value);
}
从 port.readable 获取 reader,使用异步循环持续读取数据。接收到的数据是 Uint8Array 格式,需要使用 TextDecoder 解码。
4. 发送数据
const writer = port.writable.getWriter();
const encoder = new TextEncoder();
const data = encoder.encode('Hello Serial!');
await writer.write(data);
从 port.writable 获取 writer,使用 TextEncoder 将字符串转换为 Uint8Array,然后调用 writer.write() 发送数据。
5. 关闭连接
await reader.cancel();
await reader.releaseLock();
await writer.releaseLock();
await port.close();
关闭前需要释放 reader 和 writer 的锁,然后调用 port.close() 关闭串口连接。