本文档介绍了如何使用串行 API 对串行设备执行读写操作。Chrome 浏览器 应用还可以连接到 USB 和蓝牙设备。
清单要求
您必须向代码添加“serial”对清单文件的权限:
"permissions": [
"serial"
]
列出可用的串行端口
如需获取与可用串行端口关联的路径列表,请使用 serial.getDevices
方法。注意:并非所有串行端口都可用。该 API 使用启发法仅公开
安全的设备
var onGetDevices = function(ports) {
for (var i=0; i<ports.length; i++) {
console.log(ports[i].path);
}
}
chrome.serial.getDevices(onGetDevices);
连接到串行设备
如果您知道与串行端口关联的路径,可以使用
serial.connect
方法:
chrome.serial.connect(path, options, callback)
参数 | 说明 |
---|---|
path(字符串) | 如果与设备端口关联的路径未知,您可以使用 serial.getDevices 方法。 |
options(对象) | 具有多个配置值的参数对象。如需了解详情,请参阅 serial.ConnectionOptions |
callback | 在端口成功打开时调用。该回调函数将使用一个参数 connectionInfo 进行调用,该参数有几个重要值。如需了解详情,请参阅 serial.ConnectionInfo。 |
简单示例:
var onConnect = function(connectionInfo) {
// The serial port has been opened. Save its id to use later.
_this.connectionId = connectionInfo.connectionId;
// Do whatever you need to do with the opened port.
}
// Connect to the serial port /dev/ttyS01
chrome.serial.connect("/dev/ttyS01", {bitrate: 115200}, onConnect);
断开与串行端口的连接
当应用终止时,系统会自动关闭与非持久性串行端口的连接 平台。不过,如果您想在应用运行时断开连接,可以使用 serial.disconnect 方法:
var onDisconnect = function(result) {
if (result) {
console.log("Disconnected from the serial port");
} else {
console.log("Disconnect failed");
}
}
chrome.serial.disconnect(connectionId, onDisconnect);
从串行端口读取
串行 API 从串行端口读取数据,并将读取的字节作为 ArrayBuffer 传递给事件
监听器。您的应用连接的每个端口都会生成读取事件,
通过 chrome.serial.onReceive.addListener(onReceiveCallback)
添加的监听器。如果您
在同时连接到多个端口时,您可能会发现connectionId
serial.onReceive 的回调参数中的传入读取事件。
以下示例可以累积读取字节,直到有新行被读取,从而将收到的 将 ArrayBuffer 转换为字符串,并在收到的最后一个字符发现换行符时调用方法:
var stringReceived = '';
var onReceiveCallback = function(info) {
if (info.connectionId == expectedConnectionId && info.data) {
var str = convertArrayBufferToString(info.data);
if (str.charAt(str.length-1) === '\n') {
stringReceived += str.substring(0, str.length-1);
onLineReceived(stringReceived);
stringReceived = '';
} else {
stringReceived += str;
}
}
};
chrome.serial.onReceive.addListener(onReceiveCallback);
// [...] not shown here: connect to the serial port
将数据发送到串行端口
发送数据比读取更简单。唯一的问题是,如果您的数据协议是基于字符串的,
您必须将输出字符串转换为 ArrayBuffer
。请参阅以下代码示例:
var writeSerial=function(str) {
chrome.serial.send(connectionId, convertStringToArrayBuffer(str), onSend);
}
// Convert string to ArrayBuffer
var convertStringToArrayBuffer=function(str) {
var buf=new ArrayBuffer(str.length);
var bufView=new Uint8Array(buf);
for (var i=0; i<str.length; i++) {
bufView[i]=str.charCodeAt(i);
}
return buf;
}
刷新串行端口缓冲区
您可以通过发出 flush 命令来刷新串行端口缓冲区:
chrome.serial.flush(connectionId, onFlush);
展开
Serial API 具有一些其他功能。例如,您可以将连接设置为持久连接 即使您的应用未运行,它也可以接收数据。或者,您可以在 使用 serial.update 进行实时测试,例如比特率、超时、控制信号以及许多其他事件。 方法。如需了解详情,请参阅 serial API 的完整参考。