Serielle Geräte

In diesem Dokument wird die Verwendung der seriellen API zum Lesen und Schreiben von seriellen Geräten beschrieben. Google Chrome Apps können auch eine Verbindung zu USB- und Bluetooth-Geräten herstellen.

Manifestanforderung

Sie müssen die Seriennummer Berechtigung für die Manifestdatei:

"permissions": [
  "serial"
]

Verfügbare serielle Ports auflisten

Wenn Sie eine Liste der Pfade abrufen möchten, die mit den verfügbaren seriellen Ports verknüpft sind, verwenden Sie den serial.getDevices . Hinweis:Nicht alle seriellen Ports sind verfügbar. Die API verwendet Heuristiken, um nur serielle die als sicher erachtet werden.

var onGetDevices = function(ports) {
  for (var i=0; i<ports.length; i++) {
    console.log(ports[i].path);
  }
}
chrome.serial.getDevices(onGetDevices);

Verbindung zu einem seriellen Gerät herstellen

Wenn Sie den Pfad kennen, der dem seriellen Port zugeordnet ist, können Sie über das serial.connect-Methode:

chrome.serial.connect(path, options, callback)
ParameterBeschreibung
Pfad (String)Wenn der mit dem Port Ihres Geräts verknüpfte Pfad unbekannt ist, können Sie die Methode serial.getDevices verwenden.
options (Objekt)Parameterobjekt mit mehreren Konfigurationswerten Details unter serial.ConnectionOptions ansehen
callbackWird aufgerufen, wenn der Port erfolgreich geöffnet wurde. Der Callback wird mit dem Parameter connectionInfo aufgerufen, der mehrere wichtige Werte hat. Weitere Informationen finden Sie unter serial.ConnectionInfo.

Ein einfaches Beispiel:

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);

Verbindung zu seriellem Port trennen

Wenn eine Anwendung beendet wird, werden nicht persistente Verbindungen zu seriellen Ports automatisch beendet durch die Plattform. Falls Sie die Verbindung trennen möchten, während Ihre App noch ausgeführt wird, können Sie dies über die 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);

Aus einem seriellen Port lesen

Die serielle API liest aus dem seriellen Port und sendet die gelesenen Byte als ArrayBuffer an das Ereignis zu hören. Jeder Port, mit dem Ihre Anwendung verbunden ist, generiert Leseereignisse für alle Listener, die über chrome.serial.onReceive.addListener(onReceiveCallback) hinzugefügt wurden. Wenn Sie mit mehreren Ports gleichzeitig verbunden ist, wird möglicherweise der entsprechende connectionId von ein eingehendes Leseereignis im Callback-Parameter von serial.onReceive.

Im folgenden Beispiel können Lesebyte gesammelt werden, bis eine neue Zeile gelesen wird, wodurch die empfangenen ArrayBuffer to String und Aufrufen einer Methode, wenn als letztes empfangenes Zeichen ein Zeilenumbruch gefunden wird:

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

Daten an einen seriellen Port senden

Daten zu senden ist einfacher als zu lesen. Der einzige Haken besteht darin, müssen Sie den Ausgabestring in einen ArrayBuffer umwandeln. Unten sehen Sie ein Codebeispiel:

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;
}

Zwischenspeicher des seriellen Ports leeren

Sie können den Zwischenspeicher des seriellen Ports mit dem folgenden Befehl leeren:

  chrome.serial.flush(connectionId, onFlush);

Mehr

Die Serial API hat einige weitere Funktionen. Sie können zum Beispiel eine Verbindung auf persistent festlegen, sodass kann es auch dann Daten empfangen, wenn Ihre App nicht ausgeführt wird. Alternativ können Sie die Verbindungsparameter wie Bitrate, Zeitüberschreitungen, Steuersignale und viele andere mithilfe der Methode serial.update. . Weitere Informationen finden Sie in der vollständigen Referenz der serial-API.