Dispositivos en serie

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ámetroDescripció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.
callbackSe 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.