Questo documento descrive come utilizzare l'API seriale per leggere e scrivere da dispositivi seriali. Google Chrome Le app possono anche essere collegate a dispositivi USB e Bluetooth.
Requisito del file manifest
Devi aggiungere il "serial" autorizzazione per il file manifest:
"permissions": [
"serial"
]
Elenco delle porte seriali disponibili
Per ottenere un elenco dei percorsi associati alle porte seriali disponibili, utilizza serial.getDevices
. Nota:non tutte le porte seriali sono disponibili. L'API utilizza l'euristica per esporre solo
dispositivi che si prevede
siano sicuri.
var onGetDevices = function(ports) {
for (var i=0; i<ports.length; i++) {
console.log(ports[i].path);
}
}
chrome.serial.getDevices(onGetDevices);
Connessione a un dispositivo seriale
Se conosci il percorso associato alla porta seriale, puoi connetterti utilizzando il
Metodo serial.connect
:
chrome.serial.connect(path, options, callback)
Parametro | Descrizione |
---|---|
percorso (stringa) | Se il percorso associato alla porta del dispositivo non è noto, puoi utilizzare il metodo serial.getDevices . |
opzioni (oggetto) | Oggetto parametro con diversi valori di configurazione. Vedi i dettagli in serial.ConnectionOptions |
callback | Richiamata quando la porta è stata aperta correttamente. Il callback verrà chiamato con un parametro, connectionInfo , che ha diversi valori importanti. Per i dettagli, consulta serial.ConnectionInfo. |
Un esempio semplice:
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);
Disconnettersi da una porta seriale
Quando un'app termina, le connessioni alle porte seriali non permanenti vengono chiuse automaticamente dalla piattaforma. Tuttavia, se vuoi disconnetterti mentre l'app è ancora in esecuzione, puoi utilizzare Metodo 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);
Lettura da una porta seriale
L'API seriale legge dalla porta seriale e fornisce i byte letti come ArrayBuffer per l'evento
e ascoltatori. Ogni porta a cui è connessa l'applicazione genererà eventi di lettura per tutti
listener aggiunti tramite chrome.serial.onReceive.addListener(onReceiveCallback)
. Se
connesso a più di una porta contemporaneamente, potresti trovare il valore connectionId
corrispondente
Un evento di lettura in arrivo nel parametro di callback di serial.onReceive.
L'esempio seguente può accumulare byte letti fino a quando non viene letta una nuova riga, convertendo i byte ricevuti ArrayBuffer to String e chiamata di un metodo quando viene trovata una nuova riga come ultimo carattere ricevuto:
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
Invio di dati a una porta seriale
L'invio dei dati è più semplice della lettura. L'unico problema è che se il protocollo dati è basato su stringhe,
devi convertire la stringa di output in un ArrayBuffer
. Guarda l'esempio di codice riportato di seguito:
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;
}
Svuotamento del buffer della porta seriale
Puoi svuotare il buffer della porta seriale inviando il comando di svuotamento:
chrome.serial.flush(connectionId, onFlush);
Altro
L'API Serial include molte altre funzionalità. Puoi, ad esempio, impostare una connessione su permanente, può ricevere dati anche quando l'app non è in esecuzione oppure puoi aggiornare i parametri di connessione come velocità in bit, timeout, segnali di controllo e molte altre, ad esempio serial.update. . Per ulteriori informazioni, consulta il riferimento completo dell'API serial.