직렬 장치

이 문서에서는 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의 전체 참조를 확인하세요.