Chrome 浏览器通过其强大的扩展系统和 API 支持,为用户提供了丰富的功能增强,串口通信是一个重要且实用的功能,尤其在需要与硬件设备进行数据交换的场景中,本文将详细介绍如何在 Chrome 中使用 JavaScript 进行串口操作,包括获取串口设备列表、连接串口、发送和接收数据等步骤。
一、准备工作
在使用 Chrome 的串口 API 之前,需要确保以下几点:
1、使用 HTTPS:由于安全原因,Web Serial API 只能在 HTTPS 环境下使用,如果是在本地开发环境,可以使用localhost
来绕过这一限制。
2、检查浏览器支持:Chromium 内核版本 89 及以上版本的浏览器才支持 Web Serial API,可以通过if ("serial" in navigator)
语句来检查当前浏览器是否支持该 API。
3、安装必要的库:如果需要处理字符串编码转换,可以使用iconv-lite
库,可以通过 npm 安装:npm install iconv-lite
。
二、获取串口设备列表
要获取系统中可用的串口设备列表,可以使用navigator.serial.getPorts()
方法,该方法返回一个 Promise,解析后可以得到一个包含所有串口设备的数组,每个设备对象包含设备的路径(path)和其他信息。
async function getSerialPorts() {
try {
const ports = await navigator.serial.getPorts();
ports.forEach(port => console.log(Device: ${port.getInfo().usbVendorId}, Product ID: ${port.getInfo().usbProductId}
));
} catch (err) {
console.error('Error getting serial ports:', err);
}
}
三、连接串口
选择并连接到指定的串口设备,可以使用navigator.serial.requestPort()
方法,此方法会弹出一个对话框,让用户选择一个串口设备,并返回一个 Promise,解析后得到一个 SerialPort 对象。
async function connectToSerialPort() { try { const port = await navigator.serial.requestPort(); await port.open({ baudRate: 9600 }); // 设置波特率等参数 console.log('Connected to:', port.getInfo()); return port; } catch (err) { console.error('Error connecting to serial port:', err); } }
四、发送数据
一旦串口连接建立,就可以使用write()
方法向串口发送数据,数据可以是 ArrayBuffer、ArrayBufferView 或 Blob 类型。
function sendData(port, data) { port.write(data).then(() => { console.log('Data sent successfully'); }).catch(err => { console.error('Error sending data:', err); }); }
五、接收数据
接收串口数据需要使用readable
stream,可以创建一个TextDecoderStream
和一个自定义的转换器来处理接收到的数据,以下是一个简单的示例,展示如何读取串口数据并将其转换为字符串:
async function readFromSerialPort(port) { const decoder = new TextDecoderStream(); const reader = port.readable.pipeThrough(new TransformStream(new LineBreakTransformer())).getReader(); const inputDone = port.readable.pipeTo(decoder.writable); while (true) { const { value, done } = await reader.read(); if (value) { console.log('Received:', value); } if (done) { break; } } }
六、关闭串口
完成数据传输后,应关闭串口连接以释放资源,可以使用close()
方法关闭串口。
async function closeSerialPort(port) { try { await port.close(); console.log('Serial port closed'); } catch (err) { console.error('Error closing serial port:', err); } }
七、完整示例代码
以下是一个完整的示例代码,展示了如何获取串口设备列表、连接串口、发送和接收数据以及关闭串口:
async function main() {
if (!("serial" in navigator)) {
console.error("Your browser does not support the Web Serial API");
return;
}
try {
// 获取串口设备列表
const ports = await navigator.serial.getPorts();
ports.forEach(port => console.log(Device: ${port.getInfo().usbVendorId}, Product ID: ${port.getInfo().usbProductId}
));
// 请求并连接到串口设备
const port = await navigator.serial.requestPort();
await port.open({ baudRate: 9600 });
console.log('Connected to:', port.getInfo());
// 发送数据
const data = convertStringToArrayBuffer("Hello, World!");
sendData(port, data);
// 接收数据
await readFromSerialPort(port);
// 关闭串口
await closeSerialPort(port);
} catch (err) {
console.error('Error:', err);
}
}
main();
八、常见问题解答(FAQs)
Q1:为什么无法获取到串口设备?
A1:可能的原因有:
未使用 HTTPS 协议访问网页。
浏览器不支持 Web Serial API(需要 Chromium 内核版本 89 及以上)。
没有正确调用navigator.serial.requestPort()
方法。
用户未在弹出的选择串口对话框中选择任何设备。
Q2:发送数据失败怎么办?
A2:发送数据失败可能是由于以下原因:
串口未成功打开或已关闭。
数据格式不正确(应为 ArrayBuffer、ArrayBufferView 或 Blob)。
串口连接出现问题,可以尝试重新连接或检查硬件连接。
通过以上步骤和示例代码,开发者可以在 Chrome 浏览器中使用 JavaScript 实现对串口的操作,从而与各种硬件设备进行交互,这为开发基于 Web 的物联网应用提供了极大的便利。
以上内容就是解答有关“chromejs串口”的详细内容了,我相信这篇文章可以为您解决一些疑惑,有任何问题欢迎留言反馈,谢谢阅读。
原创文章,作者:未希,如若转载,请注明出处:https://www.kdun.com/ask/1424308.html
本网站发布或转载的文章及图片均来自网络,其原创性以及文中表达的观点和判断不代表本网站。如有问题,请联系客服处理。
发表回复