이 문서에서는 serial API를 사용하여 직렬 기기에서 읽고 쓰는 방법을 설명합니다. 크롬 앱은 USB 및 블루투스 기기에도 연결할 수 있습니다.
매니페스트 요구사항
'일련번호'를 추가해야 합니다. 권한을 부여해야 합니다.
"permissions": [
"serial"
]
사용 가능한 직렬 포트 나열
사용 가능한 직렬 포트와 연결된 경로 목록을 가져오려면 serial.getDevices
를 사용합니다.
메서드를 사용하여 축소하도록 요청합니다. 참고: 일부 직렬 포트는 사용할 수 없습니다. API는 휴리스틱을 사용하여 일련번호만 노출합니다.
안전할 것으로 예상되는 장치입니다.
var onGetDevices = function(ports) {
for (var i=0; i<ports.length; i++) {
console.log(ports[i].path);
}
}
chrome.serial.getDevices(onGetDevices);
직렬 장치에 연결
직렬 포트와 연결된 경로를 알고 있는 경우
serial.connect
메서드를 사용하여 지도 가장자리에
패딩을 추가할 수 있습니다.
chrome.serial.connect(path, options, callback)
매개변수 | 설명 |
---|---|
path (문자열) | 기기 포트와 연결된 경로를 알 수 없는 경우 serial.getDevices 메서드를 사용할 수 있습니다. |
options (객체) | 구성 값이 여러 개인 매개변수 객체입니다. 자세한 내용은 serial.ConnectionOptions를 참조하세요. |
콜백 | 포트가 성공적으로 열리면 호출됩니다. 콜백은 중요한 값이 여러 개 있는 하나의 매개변수 connectionInfo 를 사용하여 호출됩니다. 자세한 내용은 serial.ConnectionInfo를 참조하세요. |
간단한 예:
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);
직렬 포트에서 연결 해제
앱이 종료되면 영구적이지 않은 직렬 포트 연결이 자동으로 종료됩니다. 있습니다. 그러나 앱이 여전히 실행 중일 때 연결을 해제하려면 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);
직렬 포트에서 읽기
직렬 API는 직렬 포트에서 읽고 읽기 바이트를 ArrayBuffer로 이벤트에 전달합니다.
리스너입니다. 애플리케이션이 연결된 모든 포트는 모든 포트에서
chrome.serial.onReceive.addListener(onReceiveCallback)
를 통해 추가된 리스너 만약
한 번에 두 개 이상의 포트에 연결할 경우 각 포트의 해당 connectionId
serial.onReceive의 콜백 매개변수에 수신되는 읽기 이벤트입니다.
다음 예는 새 줄을 읽을 때까지 읽기 바이트를 누적하여 수신된 ArrayBuffer를 String으로 보내고 수신된 마지막 문자로 줄바꿈이 발견될 때 메서드를 호출합니다.
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
직렬 포트로 데이터 전송
데이터 전송은 읽는 것보다 간단합니다. 유일한 문제는 데이터 프로토콜이 문자열 기반인 경우
출력 문자열을 ArrayBuffer
로 변환해야 합니다. 아래의 코드 예를 참고하세요.
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;
}
직렬 포트 버퍼 플러시
flush 명령어를 실행하여 직렬 포트 버퍼를 플러시할 수 있습니다.
chrome.serial.flush(connectionId, onFlush);
더보기
Serial API에는 다른 여러 기능이 있습니다. 예를 들어 연결을 영구으로 설정할 수 있으므로 앱이 실행 중이 아닐 때도 데이터를 수신할 수 있거나 serial.update를 사용하여 비트 전송률, 시간 제한, 제어 신호 등을 빠르게 업데이트할 수 있습니다. 메서드를 사용하여 축소하도록 요청합니다. 자세한 내용은 serial API의 전체 참조를 확인하세요.