Este documento descreve como usar a API serial para ler e gravar em dispositivos seriais. Google Chrome Os apps também podem se conectar a dispositivos USB e Bluetooth.
Requisito do manifesto
Adicione o "serial" permissão ao arquivo de manifesto:
"permissions": [
"serial"
]
Como listar as portas seriais disponíveis
Para consultar uma lista dos caminhos associados às portas seriais disponíveis, use o serial.getDevices
.
. Observação:nem todas as portas seriais estão disponíveis. A API usa heurística para expor apenas números
que devem ser seguros.
var onGetDevices = function(ports) {
for (var i=0; i<ports.length; i++) {
console.log(ports[i].path);
}
}
chrome.serial.getDevices(onGetDevices);
Como se conectar a um dispositivo serial
Se você souber o caminho associado à porta serial, conecte-se a ela usando a
Método serial.connect
:
chrome.serial.connect(path, options, callback)
Parâmetro | Descrição |
---|---|
caminho (string) | Se o caminho associado à porta do seu dispositivo for desconhecido, use o método serial.getDevices . |
opções (objeto) | Objeto de parâmetro com vários valores de configuração. Veja os detalhes em serial.ConnectionOptions |
callback | Invocado quando a porta é aberta. O callback será chamado com um parâmetro, connectionInfo , que tem vários valores importantes. Confira os detalhes em serial.ConnectionInfo. |
Um exemplo simples:
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);
Desconectar-se de uma porta serial
Quando um aplicativo é encerrado, as conexões com portas seriais não persistentes são fechadas automaticamente pela plataforma. No entanto, se você quiser se desconectar enquanto o app ainda estiver em execução, use o 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);
Como ler de uma porta serial
A API serial lê a porta serial e entrega os bytes de leitura como um ArrayBuffer ao evento
os listeners. Cada porta a que seu aplicativo está conectado gera eventos de leitura para todas
listeners adicionados usando chrome.serial.onReceive.addListener(onReceiveCallback)
. Se você for
estiver conectada a mais de uma porta ao mesmo tempo, poderá encontrar o connectionId
correspondente
um evento de leitura de entrada no parâmetro de callback de serial.onReceive.
O exemplo a seguir pode acumular bytes de leitura até que uma nova linha seja lida, convertendo os bytes recebidos ArrayBuffer como String e chamar um método quando uma nova linha é encontrada como o último caractere recebido:
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
Como enviar dados para uma porta serial
Enviar dados é mais simples do que ler. O único problema é que, se o protocolo de dados for baseado em strings,
é necessário converter a string de saída em um ArrayBuffer
. Confira o exemplo de código abaixo:
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;
}
Como limpar um buffer de porta serial
Para limpar o buffer da porta serial, emita o comando de limpeza:
chrome.serial.flush(connectionId, onFlush);
Mais
A API Serial tem vários outros recursos. Você pode, por exemplo, definir uma conexão como persistente, assim ele pode receber dados mesmo quando seu aplicativo não está em execução, ou você pode atualizar os parâmetros de conexão imediatamente, como taxa de bits, tempos limite, sinais de controle e muitos outros com a API serial.update . Consulte a referência completa da API serial para mais informações.