问小白 wenxiaobai
资讯
历史
科技
环境与自然
成长
游戏
财经
文学与艺术
美食
健康
家居
文化
情感
汽车
三农
军事
旅行
运动
教育
生活
星座命理

JS如何获取当前的串口

创作时间:
作者:
@小白创作中心

JS如何获取当前的串口

引用
1
来源
1.
https://docs.pingcode.com/baike/2680247

一、JS如何获取当前的串口

使用Web Serial API、检查浏览器兼容性、打开串口进行读写操作。Web Serial API 提供了一种标准的方法,通过JavaScript与串口设备进行通信。首先,确保你的浏览器支持Web Serial API,然后使用navigator.serial.requestPort()方法打开串口,并进行读写操作。

浏览器兼容性是使用Web Serial API的关键。并不是所有的浏览器都支持这个API,因此在编写代码之前,需要检查当前浏览器是否兼容。可以通过检查navigator.serial是否存在来确定浏览器是否支持Web Serial API。

if ('serial' in navigator) {
    console.log('Web Serial API supported.');
} else {
    console.log('Web Serial API not supported.');
}

二、Web Serial API简介

Web Serial API是一个相对较新的API,允许Web应用直接与串口设备进行通信。这个API的出现大大简化了与硬件设备的交互流程,使得开发者可以直接在浏览器中通过JavaScript与串口设备进行通信,而无需借助中间件或插件。

1、基本原理

Web Serial API的基本原理是通过Navigator接口向用户请求访问串口设备,并在用户允许的情况下打开串口端口进行数据读写操作。这个API主要包括以下几个步骤:

  • 检查浏览器兼容性
  • 请求用户选择串口设备
  • 打开串口设备
  • 进行数据读写操作

2、应用场景

Web Serial API的应用场景非常广泛,特别适用于需要与硬件设备进行实时交互的Web应用。例如:

  • 与Arduino、Raspberry Pi等开发板进行通信
  • 读取传感器数据
  • 控制机器人

三、检查浏览器兼容性

在使用Web Serial API之前,首先需要检查当前浏览器是否支持这个API。可以通过检查navigator.serial是否存在来确定浏览器是否支持Web Serial API。

if ('serial' in navigator) {
    console.log('Web Serial API supported.');
} else {
    console.log('Web Serial API not supported.');
}

如果浏览器不支持Web Serial API,可以考虑使用其他方法与串口设备进行通信,如通过本地应用或使用其他通信协议。

四、请求用户选择串口设备

一旦确定浏览器支持Web Serial API,就可以请求用户选择串口设备。这个过程需要用户的明确授权,以确保安全。

async function requestPort() {
    try {
        const port = await navigator.serial.requestPort();
        console.log('Port selected:', port);
        return port;
    } catch (error) {
        console.error('Error selecting port:', error);
    }
}

这个代码段会弹出一个对话框,用户可以从中选择一个可用的串口设备。如果用户选择了一个设备,函数将返回这个设备的端口对象。

五、打开串口设备

选择设备后,需要打开串口设备,并设置通信参数,如波特率、数据位、停止位和奇偶校验。

async function openPort(port) {
    try {
        await port.open({ baudRate: 9600 });
        console.log('Port opened:', port);
    } catch (error) {
        console.error('Error opening port:', error);
    }
}

这个代码段将打开指定的串口设备,并设置波特率为9600。可以根据设备的要求调整这些参数。

六、数据读写操作

打开串口设备后,可以进行数据读写操作。Web Serial API 提供了ReadableStream和WritableStream接口,分别用于读取和写入数据。

1、读取数据

async function readData(port) {
    const reader = port.readable.getReader();
    try {
        while (true) {
            const { value, done } = await reader.read();
            if (done) {
                console.log('Stream closed.');
                break;
            }
            console.log('Received:', value);
        }
    } catch (error) {
        console.error('Error reading data:', error);
    } finally {
        reader.releaseLock();
    }
}

这个代码段将持续读取串口设备的数据,直到数据流关闭。如果读取过程中出现错误,将捕获并输出错误信息。

2、写入数据

async function writeData(port, data) {
    const writer = port.writable.getWriter();
    try {
        await writer.write(data);
        console.log('Data written:', data);
    } catch (error) {
        console.error('Error writing data:', error);
    } finally {
        writer.releaseLock();
    }
}

这个代码段将指定的数据写入串口设备。如果写入过程中出现错误,将捕获并输出错误信息。

七、关闭串口设备

在完成数据读写操作后,需要关闭串口设备,以释放资源。

async function closePort(port) {
    try {
        await port.close();
        console.log('Port closed:', port);
    } catch (error) {
        console.error('Error closing port:', error);
    }
}

关闭串口设备后,可以安全地释放相关资源,以确保系统的稳定性。

八、综合示例

将以上各个步骤综合起来,可以得到一个完整的示例代码,用于通过Web Serial API与串口设备进行通信。

if ('serial' in navigator) {
    console.log('Web Serial API supported.');
    async function connectSerial() {
        const port = await requestPort();
        await openPort(port);
        readData(port);
        writeData(port, new Uint8Array([0x01, 0x02, 0x03]));
        // 关闭串口设备
        setTimeout(async () => {
            await closePort(port);
        }, 5000);
    }
    connectSerial();
} else {
    console.log('Web Serial API not supported.');
}

这个综合示例展示了如何检查浏览器兼容性、请求用户选择串口设备、打开串口设备、进行数据读写操作,并最终关闭串口设备。

九、兼容性说明

需要注意的是,Web Serial API目前仅在部分现代浏览器中支持,如Chrome和Edge。在使用时需要确保目标浏览器支持该API,否则需要寻找其他解决方案。

© 2023 北京元石科技有限公司 ◎ 京公网安备 11010802042949号