En este documento, se describe cómo usar la API en serie para leer y escribir desde dispositivos en serie. Chrome Las apps también se pueden conectar a dispositivos USB y Bluetooth.
Requisito del manifiesto
Debes agregar el número de serie permiso al archivo de manifiesto:
"permissions": [
"serial"
]
Enumera los puertos en serie disponibles
Para obtener una lista de las rutas de acceso asociadas con los puertos en serie disponibles, usa serial.getDevices
.
. Nota: No todos los puertos en serie están disponibles. La API usa heurísticas para exponer solo las series
que se espera que sean seguros.
var onGetDevices = function(ports) {
for (var i=0; i<ports.length; i++) {
console.log(ports[i].path);
}
}
chrome.serial.getDevices(onGetDevices);
Estableciendo conexión con un dispositivo en serie
Si conoces la ruta asociada con el puerto en serie, puedes conectarte a él con el
Método serial.connect
:
chrome.serial.connect(path, options, callback)
Parámetro | Descripción |
---|---|
path (cadena) | Si no conoces la ruta asociada al puerto de tu dispositivo, puedes usar el método serial.getDevices . |
opciones (objeto) | Objeto de parámetro con varios valores de configuración. Consulta los detalles en serial.ConnectionOptions. |
callback | Se invoca cuando el puerto se abre de forma correcta. Se llamará a la devolución de llamada con un parámetro, connectionInfo , que tiene varios valores importantes. Consulta los detalles en serial.ConnectionInfo. |
Un ejemplo sencillo:
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);
Desconéctate de un puerto en serie
Cuando una app finaliza, las conexiones a los puertos en serie que no son persistentes se cierran automáticamente la plataforma. Sin embargo, si quieres desconectarte mientras la app se está ejecutando, puedes usar la 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);
Lee desde un puerto en serie
La API en serie lee desde el puerto en serie y entrega los bytes leídos como un ArrayBuffer al evento.
objetos de escucha. Cada puerto al que esté conectada tu aplicación generará eventos de lectura para todos
objetos de escucha agregados a través de chrome.serial.onReceive.addListener(onReceiveCallback)
. Si eres
conectados a más de un puerto al mismo tiempo, es posible que encuentres el connectionId
correspondiente de
un evento de lectura entrante en el parámetro de devolución de llamada de serial.onReceive.
En el siguiente ejemplo, se pueden acumular bytes leídos hasta que se lea una línea nueva, lo que convertirá ArrayBuffer a String y la llamada a un método cuando se encuentra un salto de línea como el último carácter recibido:
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
Envía datos a un puerto en serie
Enviar datos es más sencillo que leerlos. El único problema es que si tu protocolo
de datos se basa en strings
debes convertir tu cadena de salida en ArrayBuffer
. Consulta el siguiente ejemplo de código:
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;
}
Limpia un búfer de puerto en serie
Para vaciar el búfer del puerto en serie, ejecuta el comando de limpieza:
chrome.serial.flush(connectionId, onFlush);
Más
La API de Serial tiene muchas otras funciones. Por ejemplo, puedes establecer una conexión en persistente para que Puede recibir datos incluso cuando la app no se está ejecutando, o puedes actualizar los parámetros de conexión en la carga, como la tasa de bits, los tiempos de espera, las señales de control y muchas más con el archivo serial.update . Consulta la referencia completa de la API de serial para obtener más información.