帮忙编写一个网页版本的串口收发程序

时间: 2023-11-29 21:06:30 浏览: 38
好的,下面是一个简单的网页版串口收发程序的示例代码,使用JavaScript编写: ```html <!DOCTYPE html> <html> <head> <title>串口收发程序</title> <meta charset="utf-8"> <style> textarea { width: 100%; height: 200px; } </style> </head> <body> <div> <label for="port">选择串口:</label> <select id="port"></select> <button id="connect">连接</button> <button id="disconnect">断开</button> </div> <div> <label for="baudRate">波特率:</label> <input type="text" id="baudRate" value="9600"> </div> <div> <label for="inputArea">输入:</label> <textarea id="inputArea"></textarea> </div> <button id="send">发送</button> <div> <label for="outputArea">输出:</label> <textarea id="outputArea"></textarea> </div> <script> var portSelect = document.getElementById('port'); var connectBtn = document.getElementById('connect'); var disconnectBtn = document.getElementById('disconnect'); var baudRateInput = document.getElementById('baudRate'); var inputArea = document.getElementById('inputArea'); var sendBtn = document.getElementById('send'); var outputArea = document.getElementById('outputArea'); var port; var reader; var writer; // 获取可用的串口列表 async function getPorts() { const ports = await navigator.serial.getPorts(); ports.forEach(port => { const option = document.createElement('option'); option.value = port.name; option.textContent = port.name; portSelect.appendChild(option); }); } // 连接串口 async function connect() { try { const portName = portSelect.value; const baudRate = parseInt(baudRateInput.value); port = await navigator.serial.requestPort({ filters: [{ usbVendorId: 0x1a86 }] }); await port.open({ baudRate: baudRate }); reader = port.readable.getReader(); writer = port.writable.getWriter(); readLoop(); connectBtn.disabled = true; disconnectBtn.disabled = false; inputArea.disabled = false; sendBtn.disabled = false; } catch (error) { console.error(error); } } // 断开串口 async function disconnect() { try { await reader.cancel(); await writer.close(); await port.close(); connectBtn.disabled = false; disconnectBtn.disabled = true; inputArea.disabled = true; sendBtn.disabled = true; } catch (error) { console.error(error); } } // 读取串口数据 async function readLoop() { try { while (true) { const { value, done } = await reader.read(); if (done) { break; } const decoder = new TextDecoder(); const text = decoder.decode(value); outputArea.value += text; } } catch (error) { console.error(error); } } // 发送数据到串口 async function send() { try { const text = inputArea.value; const encoder = new TextEncoder(); const data = encoder.encode(text); await writer.write(data); } catch (error) { console.error(error); } } // 初始化 async function init() { await getPorts(); disconnectBtn.disabled = true; inputArea.disabled = true; sendBtn.disabled = true; connectBtn.addEventListener('click', connect); disconnectBtn.addEventListener('click', disconnect); sendBtn.addEventListener('click', send); } init(); </script> </body> </html> ``` 代码说明: 1. 网页使用了`navigator.serial` API来访问串口设备,需要在浏览器中启用`#enable-experimental-web-platform-features`标志位才能使用。 2. 用户可以选择串口设备、设置波特率,点击“连接”按钮连接串口设备,点击“断开”按钮断开连接。 3. 用户可以在输入框中输入数据,点击“发送”按钮将数据发送到串口设备。 4. 接收到的数据将显示在输出框中。 注意事项: 1. 该示例代码仅供参考,并不保证在所有浏览器上都能正常工作。 2. 串口设备的连接和断开操作需要用户手动进行,不能自动检测设备的插拔状态。 3. 在使用`navigator.serial` API时需要注意安全性问题,要避免恶意网站获取用户的串口设备信息或者发送数据到串口设备。

相关推荐

最新推荐

recommend-type

串口通讯程序波特率9600程序设计

实现功能:串口通讯程序波特率9600 使用芯片:STC15F104E 晶振:12MHZ 波特率:9600 编译环境:Keil
recommend-type

10分钟完成一个USB驱动程序串口通信 单片机

帮助你10分钟完成一个USB驱动程序 串口通信 以单片机的串口通信为基础
recommend-type

Qt编写串口通信程序全程图文讲解

Qt编写串口通信程序全程图文讲解, 按照流程可以轻松做出来,本人亲自体验的
recommend-type

STM32串口USART2程序

对控制LED指示灯的IO口进行了初始化,将端口配置为推挽上拉...否则无法配置成功,由于用到了端口B, 因此要对这个端口的时钟。进行使能,同时由于用到复用IO口功能用于配置串口。因此还要使能AFIO(复用功能IO)时钟。
recommend-type

通用的I/O模拟串口程序

本文主要介绍了通用的I/O模拟串口程序(适用于任何带有定时器的单片机)。
recommend-type

zigbee-cluster-library-specification

最新的zigbee-cluster-library-specification说明文档。
recommend-type

管理建模和仿真的文件

管理Boualem Benatallah引用此版本:布阿利姆·贝纳塔拉。管理建模和仿真。约瑟夫-傅立叶大学-格勒诺布尔第一大学,1996年。法语。NNT:电话:00345357HAL ID:电话:00345357https://theses.hal.science/tel-003453572008年12月9日提交HAL是一个多学科的开放存取档案馆,用于存放和传播科学研究论文,无论它们是否被公开。论文可以来自法国或国外的教学和研究机构,也可以来自公共或私人研究中心。L’archive ouverte pluridisciplinaire
recommend-type

实现实时数据湖架构:Kafka与Hive集成

![实现实时数据湖架构:Kafka与Hive集成](https://img-blog.csdnimg.cn/img_convert/10eb2e6972b3b6086286fc64c0b3ee41.jpeg) # 1. 实时数据湖架构概述** 实时数据湖是一种现代数据管理架构,它允许企业以低延迟的方式收集、存储和处理大量数据。与传统数据仓库不同,实时数据湖不依赖于预先定义的模式,而是采用灵活的架构,可以处理各种数据类型和格式。这种架构为企业提供了以下优势: - **实时洞察:**实时数据湖允许企业访问最新的数据,从而做出更明智的决策。 - **数据民主化:**实时数据湖使各种利益相关者都可
recommend-type

SPDK_NVMF_DISCOVERY_NQN是什么 有什么作用

SPDK_NVMF_DISCOVERY_NQN 是 SPDK (Storage Performance Development Kit) 中用于查询 NVMf (Non-Volatile Memory express over Fabrics) 存储设备名称的协议。NVMf 是一种基于网络的存储协议,可用于连接远程非易失性内存存储器。 SPDK_NVMF_DISCOVERY_NQN 的作用是让存储应用程序能够通过 SPDK 查询 NVMf 存储设备的名称,以便能够访问这些存储设备。通过查询 NVMf 存储设备名称,存储应用程序可以获取必要的信息,例如存储设备的IP地址、端口号、名称等,以便能
recommend-type

JSBSim Reference Manual

JSBSim参考手册,其中包含JSBSim简介,JSBSim配置文件xml的编写语法,编程手册以及一些应用实例等。其中有部分内容还没有写完,估计有生之年很难看到完整版了,但是内容还是很有参考价值的。