Vue中使用Web Serial API连接串口,实现通信交互

Vue中使用Web Serial API连接串口,实现通信交互

Web Serial API,web端通过串口与硬件通信;
该API是JS本身 navigator 对象上就独有的,所以与Vue和React框架开发都没有太大的关系,
串口是一个双向通信接口,允许字节发送和接收数据。
Web Serial API为网站提供了一种使用JavaScript对串行设备进行读写的方法。串行设备可以通过用户系统上的串行端口连接,也可以通过模拟串行端口的可移动USB和蓝牙设备连接。
换句话说,Web Serial API通过允许网站与串行设备(如微控制器和3D打印机)通信来连接网络和物理世界。
这个API也是WebUSB的好伙伴,因为操作系统要求应用程序使用它们的高级串行API而不是低级的USB API与一些串行端口通信。

Web Serial API 是一项 Web 技术,用于在浏览器中访问串行端口设备(如 Arduino、传感器等)并与之通信。它提供了一组 JavaScript 接口,使得 Web 应用程序可以通过 USB 串行端口连接到硬件设备,并进行数据发送和接收操作。

判断浏览器支持串口通信
if ("serial" in navigator) {console.log(true);
} else {console.log(false);
}

常用的API

  1. requestPort----获取授权串口
  2. open-----打开串口
  3. close—关闭串口(串口关闭前,需要释放锁住的流)
  4. cancel—立即退出读取的循环,然后去调用releaseLock,最后调用close方法
  5. releaseLock—Reader和.Writer的释放方法
  6. read—port.readable.getReader()的读取字节数组方法
  7. write—port.writable.getWriter()的写入方法

参考文档

Web Serial API
MDN Web Docs Web Serial API

示例完整代码

<template><div class="serial-port">测试串口</div><el-button type="primary" @click="connectToSerialPort">连接串口</el-button><el-inputv-model="inputData"maxlength="50"placeholder="输入发送数据内容"show-word-limittype="textarea"/><el-button type="success" @click="sendData">发送数据</el-button><el-button type="danger" @click="cutPort">断开串口</el-button>
</template><script setup>
import { ref, onMounted } from "vue";
import { ElMessage } from "element-plus";const port = ref("");
const ports = ref([]);
const reader = ref("");const connectToSerialPort = async () => {try {// 提示用户选择一个串口port.value = await navigator.serial.requestPort();// 获取用户之前授予该网站访问权限的所有串口。ports.value = await navigator.serial.getPorts();// console.log(port.value, ports.value);console.log(port.value);// 等待串口打开await port.value.open({ baudRate: 9600 });// console.log(typeof port.value);ElMessage({message: "成功连接串口",type: "success",});// readData(port.value);readData();} catch (error) {// 处理连接串口出错的情况console.log("Error connecting to serial port:", error);}
};const readData = async () => {reader.value = port.value.readable.getReader();console.log(reader);// 监听来自串口的数据while (true) {const { value, done } = await reader.value.read();if (done) {// 允许稍后关闭串口reader.value.releaseLock();break;}// 获取发送的数据const serialData = new TextDecoder().decode(value);console.log(serialData);// value 是一个 Uint8Arrayconsole.log(value);}
};const inputData = ref("");
//
const sendData = async () => {// if (port.value && port.value.isOpen) {if (port.value) {if (inputData.value) {const writer = port.value.writable.getWriter();console.log("发送数据");await writer.write(new TextEncoder().encode(inputData.value));await writer.close();} else {return ElMessage({message: "输入需要发送的数据内容",type: "warning",showClose: true,grouping: true,duration: 2000,});}} else {ElMessage({message: "串口未连接或未打开!",type: "warning",showClose: true,grouping: true,duration: 2000,});// console.error("串口未连接或未打开!");}
};// 断开接口
const cutPort = async () => {if (port.value !== "") {await reader.value.cancel();await port.value.close();port.value = "";console.log("断开串口连接");ElMessage({message: "已成功断开串口连接",type: "success",});} else {ElMessage({message: "请先连接或打开串口",type: "warning",showClose: true,grouping: true,duration: 2000,});// console.error("串口未连接或未打开!");}
};onMounted(() => {// 判断浏览器支持串口通信if ("serial" in navigator) {console.log(true);} else {console.log(false);}// 页面刷新提示// window.onbeforeunload = e => {//   console.log(e);//   // 兼容IE8和Firefox 4之前的版本//   if (e) {//     e.returnValue = '关闭提示'//   }//   // Chrome, Safari, Firefox 4+, Opera 12+ , IE 9+//   return '关闭提示'// }
});
</script>
示例效果截图

获取串口,连接

参考文章
Web Serial API,web端通过串口与硬件通信
Vue使用Serial连接串口

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/170382.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Visual Studio Code (VS Code)安装教程

Visual Studio Code&#xff08;简称“VS Code”&#xff09;。 1.下载安装包 VS Code的官网&#xff1a; Visual Studio Code - Code Editing. Redefined 首先提及一下&#xff0c;vscode是不需要破解操作的&#xff1b; 第一步&#xff0c;看好版本&#xff0c;由于我的系…

几个Web自动化测试框架的比较:Cypress、Selenium和Playwright

介绍&#xff1a;Web自动化测试框架对于确保Web应用程序的质量和可靠性至关重要。它们帮助开发人员和测试人员自动执行重复性任务&#xff0c;跨多个浏览器和平台执行测试&#xff0c;并在开发早期发现问题。 以下仅代表作者观点&#xff1a; 本文探讨来3种流行的Web自动化测…

17 结构型模式-享元模式

1 享元模式介绍 2 享元模式原理 3 享元模式实现 抽象享元类可以是一个接口也可以是一个抽象类,作为所有享元类的公共父类, 主要作用是提高系统的可扩展性. //* 抽象享元类 public abstract class Flyweight {public abstract void operation(String extrinsicState); }具体享…

【计算机网络】UDP的报文结构和注意事项

UDP&#xff08;User Datagram Protocol&#xff0c;用户数据报协议&#xff09;是一种无连接的协议&#xff0c;它在传输层中提供了简单、不可靠的数据传输服务。与TCP&#xff08;Transmission Control Protocol,传输控制协议&#xff09;不同&#xff0c;UDP不需要建立连接&…

使用Redis部署 PHP 留言板应用

使用Redis部署 PHP 留言板应用 启动 Redis 领导者&#xff08;Leader&#xff09;启动两个 Redis 跟随者&#xff08;Follower&#xff09;公开并查看前端服务清理 启动 Redis 数据库 创建 Redis Deployment apiVersion: apps/v1 kind: Deployment metadata:name: redis-le…

Selenum八种常用定位(案例解析)

Selenium是一个备受推崇的工具。它有着丰富的功能&#xff0c;让我们能够与网页互动&#xff0c;执行各种任务&#xff0c;能为测试工程师和开发人员提供了很大的便利。 要充分利用Selenium&#xff0c;就需要了解如何正确定位网页上的元素。 接下来我将带大家共同探讨Seleni…

google auth2 邮箱登录申请

1.申请地址 https://console.cloud.google.com/apis/credentials?projectlocal-news-390408 选择凭证 创建完成后&#xff0c;添加一个回调地址即可 整个流程 登录google邮箱登录成功会跳转到回调地址&#xff0c;会带code过来根据code 获取token&#xff0c; token 获取邮…

Ubuntu虚拟机部署OpenStack

1、部署环境 系统&#xff1a;ubuntu-22.04.3-desktop-amd64DevStack版本&#xff1a;2024.1VMware Workstation&#xff1a;8G内存、4核处理器、100G硬盘/1、网络NAT模式/1 2、Ubuntu环境设置 点击show applications&#xff0c;选择Software&Updates 跟换Ubuntu的镜像…

flutter 使用FlutterJsonBeanFactory工具遇到的问题

如下图&#xff0c;使用FlutterJsonBeanFactory工具生成的数据类 但是其中 生成的 import package:null/&#xff0c;导致的错误&#xff1a;Target of URI doesn’t exist: ‘package:null/generated/json/asd.g.dart’ 尝试过的方法&#xff1a; 手动添加包名&#xff0c;…

echarts插件-liquidFill(水球图)

echarts插件-liquidFill&#xff08;水球图&#xff09; 1.下载2.引入&#xff1a;3.使用 1.下载 echarts.js下载&#xff1a;https://cdnjs.com/libraries/echarts echarts-liquidfill.js下载&#xff1a;https://github.com/ecomfe/echarts-liquidfill 2.引入&#xff1a; …

Django token 认证原理与实战

概述 cookie、session 与token 的区别 Cookie的作用 cookie的存储量很小&#xff0c;一般不超过4Kcookie并不会保存很多信息&#xff0c;一般用来存储登录状态cookie是以键值对进行表示的(keyvalue),例如nameli,表示cookie的名字是name,cookie携带的值是licookie的存储分为会…

WebSocket 入门案例

目录 WebSocket入门案例WebSocket-server新增项目:添加依赖:yml:启动类&#xff1a; frontend-server前端项目&#xff1a;添加依赖&#xff1a;添加yml&#xff1a;启动类&#xff1a;前端引入JS:前端页面&#xff1a;后端代码&#xff1a;测试&#xff1a; WebSocket 入门案…

一句话解释什么是出口IP

出口 IP 是指从本地网络连接到公共互联网时所使用的 IP 地址。这个 IP 地址是由 Internet 服务提供商(ISP)分配给你的,它可以用来标识你的网络流量的来源。如果你使用的是 NAT(网络地址转换)技术,则在 NAT 设备内部会进行地址转换,使得多个设备可以共享同一个公共 IP 地…

在Mac上使用安卓桌面模式

在安装Homeblew的基础上 替换国内源 export HOMEBREW_API_DOMAIN"https://mirrors.tuna.tsinghua.edu.cn/homebrew-bottles/api" export HOMEBREW_BREW_GIT_REMOTE"https://mirrors.tuna.tsinghua.edu.cn/git/homebrew/brew.git" brew update 安装Scrcpy …

DC/DC升压模块电源 高电压稳压输出 12v24v28v48v转600V800V1000V1100V1300V1500V2000V3000V4000V

特点 ● 效率高达 80% ● 2*2 英寸标准封装 ● 单电压输出 ● 价格低 ● 稳压输出 ● 工作温度: -40℃~85℃ ● 阻燃封装&#xff0c;满足UL94-V0 要求 ● 温度特性好 ● 可直接焊在PCB 上 应用 HRA(B) 0.1~30W 系列模块电源是一种DC-DC升压变换器。该模块电源的输入电压分为…

conda虚拟环境配置

命令行输入&#xff0c;conda -V 确定conda版本 创建自己的conda虚拟环境 activate 回车 conda create -n 名字 python版本号 执行命令 确认执行命令 输入y 创建完成 激活环境 conda activate 名字 进入python环境 python 退出 exit() conda deactive

Redis -- 基础知识2

1.Redis客户端介绍 1.基础介绍 Redis是一种客户端-服务器结构的程序&#xff0c;通过网络进行互动 客户端的多种形态 1.自带了命令行客户端&#xff1a;redis-cil 2.图形化界面的客户端&#xff1a;依赖windows系统&#xff0c;连接服务器有诸多限制&#xff0c;不建议使用 3.基…

gRPC之gateway集成swagger

1、gateway集成swagger 1、为了简化实战过程&#xff0c;gRPC-Gateway暴露的服务并未使用https&#xff0c;而是http&#xff0c;但是swagger-ui提供的调用服 务却是https的&#xff0c;因此要在proto文件中指定swagger以http调用服务&#xff0c;指定的时候会用到文件 prot…

CV计算机视觉每日开源代码Paper with code速览-2023.10.23

精华置顶 墙裂推荐&#xff01;小白如何1个月系统学习CV核心知识&#xff1a;链接 点击CV计算机视觉&#xff0c;关注更多CV干货 论文已打包&#xff0c;点击进入—>下载界面 点击加入—>CV计算机视觉交流群 1.【目标检测】Zone Evaluation: Revealing Spatial Bias i…

Python使用psycopg2读取PostgreSQL的geometry字段出现二进制乱码

1、问题 读取geometry字段出现二进制乱码 查询语句&#xff1a; sql "select * from public"Note: 这种写法在PostgreSQL中直接查询, 没有问题&#xff0c;不会报错。 但是在Python中查询&#xff0c;如果导出的geom还是一长串的geometry 格式的话&#xff0c; …