导读:本期聚焦于小伙伴创作的《js怎样操作Web Serial API实现串口设备通信的5个基础步骤》,敬请观看详情,探索知识的价值。以下视频、文章将为您系统阐述其核心内容与价值。如果您觉得《js怎样操作Web Serial API实现串口设备通信的5个基础步骤》有用,将其分享出去将是对创作者最好的鼓励。

Web Serial API是浏览器提供的原生接口,支持网页直接和用户设备的串口进行通信,无需依赖第三方插件,适合需要前端和硬件设备交互的场景。使用该API实现串口通信需要遵循固定的流程,核心分为5个基础步骤。

js怎样操作Web Serial API实现串口设备通信的5个基础步骤

第一步:请求用户授权并选择串口设备

浏览器出于安全考虑,不允许网页直接访问所有串口设备,需要先向用户发起授权请求,让用户选择要连接的串口。这一步通过navigator.serial.requestPort()方法实现,该方法会返回用户选择的SerialPort对象实例。

// 请求用户选择串口设备
async function requestSerialPort() {
  try {
    // 调用requestPort弹出设备选择弹窗,用户选择后返回端口实例
    const port = await navigator.serial.requestPort();
    console.log('已选择串口:', port);
    return port;
  } catch (error) {
    // 用户取消选择或者浏览器不支持时会抛出错误
    console.error('请求串口失败:', error);
    return null;
  }
}

第二步:打开串口连接并配置参数

获取到SerialPort实例后,需要先打开连接,同时配置串口的通信参数,比如波特率、数据位、停止位、校验位等,这些参数需要和连接的硬件设备保持一致,否则会出现通信异常。

// 打开串口并配置参数
async function openSerialPort(port) {
  if (!port) {
    console.error('未获取到有效的串口实例');
    return false;
  }
  try {
    // 打开串口,配置波特率为9600,数据位8,停止位1,无校验
    await port.open({
      baudRate: 9600,
      dataBits: 8,
      stopBits: 1,
      parity: 'none'
    });
    console.log('串口已成功打开');
    return true;
  } catch (error) {
    console.error('打开串口失败:', error);
    return false;
  }
}

第三步:设置数据读取流监听接收数据

串口连接打开后,需要监听设备发送过来的数据。Web Serial API使用流(Stream)的方式处理数据,我们需要获取串口的只读流,然后通过reader读取数据,通常会在循环中持续读取,直到连接关闭。

// 监听串口接收数据
async function readSerialData(port) {
  // 获取串口的只读流
  const reader = port.readable.getReader();
  try {
    // 循环读取数据
    while (true) {
      // 读取数据,value是Uint8Array类型的字节数组
      const { value, done } = await reader.read();
      if (done) {
        // 流被关闭时退出循环
        reader.releaseLock();
        break;
      }
      // 将字节数组转换为字符串,根据实际设备编码调整
      const receivedData = new TextDecoder().decode(value);
      console.log('接收到串口数据:', receivedData);
    }
  } catch (error) {
    console.error('读取串口数据失败:', error);
  } finally {
    // 释放reader锁
    reader.releaseLock();
  }
}

第四步:通过写入流发送数据到设备

向串口设备发送数据时,需要获取串口的只写流,创建写入器writer,将需要发送的数据转换为字节数组后写入流中,发送完成后需要释放写入器的锁。

// 向串口发送数据
async function writeSerialData(port, data) {
  // 获取串口的只写流
  const writer = port.writable.getWriter();
  try {
    // 将字符串转换为Uint8Array字节数组,根据实际需求调整编码
    const dataArray = new TextEncoder().encode(data);
    // 写入数据
    await writer.write(dataArray);
    console.log('数据已发送到串口:', data);
    return true;
  } catch (error) {
    console.error('发送串口数据失败:', error);
    return false;
  } finally {
    // 释放writer锁
    writer.releaseLock();
  }
}

第五步:关闭串口连接释放资源

通信完成后,需要及时关闭串口连接,释放相关的资源,避免占用设备导致其他程序无法访问。关闭连接前需要先停止数据读取,再调用port.close()方法。

// 关闭串口连接
async function closeSerialPort(port) {
  if (!port || !port.readable || !port.writable) {
    console.log('串口未打开或已关闭');
    return;
  }
  try {
    // 关闭串口连接
    await port.close();
    console.log('串口已成功关闭');
  } catch (error) {
    console.error('关闭串口失败:', error);
  }
}

完整流程示例

将上面的5个步骤组合起来,就可以实现完整的串口通信流程,以下是完整的调用示例:

// 完整串口通信流程示例
async function serialCommunicationDemo() {
  // 步骤1:请求串口
  const port = await requestSerialPort();
  if (!port) return;

  // 步骤2:打开串口
  const isOpen = await openSerialPort(port);
  if (!isOpen) return;

  // 步骤3:启动数据读取(放在异步函数中避免阻塞)
  readSerialData(port);

  // 步骤4:发送测试数据
  await writeSerialData(port, 'Hello Serial Device');

  // 模拟通信一段时间后关闭连接
  setTimeout(async () => {
    // 步骤5:关闭串口
    await closeSerialPort(port);
  }, 5000);
}

// 调用示例
serialCommunicationDemo();

注意事项

  • Web Serial API仅支持在HTTPS环境或者localhost本地环境中使用,普通HTTP页面无法调用该接口。
  • 不同浏览器的支持程度不同,使用前可以通过'serial' in navigator判断当前浏览器是否支持该API。
  • 串口参数需要和硬件设备的配置完全一致,否则会出现数据乱码或者无法通信的问题。
  • 读写流操作都需要使用异步函数,避免阻塞主线程导致页面卡顿。

Web_Serial_APIjs串口通信串口设备连接前端硬件交互SerialPort修改时间:2026-07-04 16:27:26

免责声明:​ 已尽一切努力确保本网站所含信息的准确性。网站内容多为原创整理与精心编撰,观点力求客观中立。本站旨在免费分享,内容仅供个人学习、研究或参考使用。若引用了第三方作品,版权归原作者所有。如内容涉及您的权益,请联系我们处理。
内容垂直聚焦
专注技术核心技术栏目,确保每篇文章深度聚焦于实用技能。从代码技巧到架构设计,为用户提供无干扰的纯技术知识沉淀,精准满足专业提升需求。
知识结构清晰
覆盖从开发到部署的全链路。AI、前端、编程、数据库、服务器、建站、系统层层递进,构建清晰学习路径,帮助用户系统化掌握开发与运维所需的核心技术。
深度技术解析
拒绝泛泛而谈,深入技术细节与实践难点。无论是数据库优化还是服务器配置,均结合真实场景与代码示例进行剖析,致力于提供可直接应用于工作的解决方案。
专业领域覆盖
精准对应开发生命周期。从前端界面到后端编程,从数据库操作到服务器运维,形成完整闭环,一站式满足全栈工程师和运维人员的技术需求。
即学即用高效
内容强调实操性,步骤清晰、代码完整。用户可根据教程直接复现和应用于自身项目,显著缩短从学习到实践的距离,快速解决开发中的具体问题。
持续更新保障
专注既定技术方向进行长期、稳定的内容输出。确保各栏目技术文章持续更新迭代,紧跟主流技术发展趋势,为用户提供经久不衰的学习价值。