Thiết bị nối tiếp

Tài liệu này mô tả cách sử dụng API nối tiếp để đọc và ghi từ thiết bị nối tiếp. Chrome Ứng dụng cũng có thể kết nối với thiết bị USBBluetooth.

Yêu cầu về tệp kê khai

Bạn phải thêm "sê-ri" quyền truy cập vào tệp kê khai:

"permissions": [
  "serial"
]

Liệt kê các cổng nối tiếp hiện có

Để xem danh sách các đường dẫn liên kết với cổng nối tiếp hiện có, hãy sử dụng serial.getDevices . Lưu ý: không phải cổng nối tiếp nào cũng sử dụng được. API này sử dụng phương pháp phỏng đoán để chỉ hiển thị kết quả nối tiếp các thiết bị được dự kiến là an toàn.

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

Đang kết nối với một thiết bị nối tiếp

Nếu biết đường dẫn được liên kết với cổng nối tiếp, bạn có thể kết nối với đường dẫn đó bằng cách sử dụng Phương thức serial.connect:

chrome.serial.connect(path, options, callback)
Thông sốMô tả
đường dẫn (chuỗi)Nếu không xác định được đường dẫn liên kết với cổng của thiết bị, bạn có thể sử dụng phương thức serial.getDevices.
tuỳ chọn (đối tượng)Đối tượng thông số có một số giá trị cấu hình. Xem thông tin chi tiết tại serial.ConnectionOptions
số gọi lạiĐược gọi khi cổng đã được mở thành công. Lệnh gọi lại sẽ được gọi bằng một tham số connectionInfo có một vài giá trị quan trọng. Xem thông tin chi tiết tại serial.ConnectionInfo.

Ví dụ đơn giản:

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

Ngắt kết nối khỏi một cổng nối tiếp

Khi một ứng dụng chấm dứt, các kết nối với những cổng nối tiếp không cố định sẽ tự động đóng theo nền tảng. Tuy nhiên, nếu muốn ngắt kết nối trong khi ứng dụng vẫn đang chạy, bạn có thể sử dụng 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);

Đọc từ cổng nối tiếp

API nối tiếp đọc từ cổng nối tiếp và phân phối các byte đọc dưới dạng ArrayBuffer đến sự kiện người nghe. Mọi cổng mà ứng dụng của bạn được kết nối sẽ tạo các sự kiện đọc cho tất cả trình nghe được thêm qua chrome.serial.onReceive.addListener(onReceiveCallback). Nếu bạn được kết nối với nhiều cổng cùng lúc, bạn có thể thấy connectionId tương ứng của một sự kiện đọc sắp tới trong tham số gọi lại của serial.onReceive.

Ví dụ sau có thể tích luỹ các byte đã đọc cho đến khi một dòng mới được đọc, chuyển đổi giá trị nhận được ArrayBuffer thành chuỗi và gọi một phương thức khi tìm thấy một dòng mới là ký tự cuối cùng nhận được:

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

Đang gửi dữ liệu đến một cổng nối tiếp

Việc gửi dữ liệu sẽ đơn giản hơn so với việc đọc. Điều bất ngờ duy nhất là nếu giao thức dữ liệu của bạn là dựa trên Chuỗi, bạn phải chuyển đổi chuỗi đầu ra thành ArrayBuffer. Hãy xem mã ví dụ dưới đây:

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

Xoá vùng đệm cổng nối tiếp

Bạn có thể đẩy dữ liệu vùng đệm cổng nối tiếp bằng cách tạo lệnh flush:

  chrome.serial.flush(connectionId, onFlush);

Thêm

API nối tiếp có một số tính năng khác. Ví dụ: bạn có thể đặt kết nối thành cố định để ứng dụng có thể nhận dữ liệu ngay cả khi ứng dụng của bạn không chạy, hoặc bạn có thể cập nhật các thông số kết nối trên như tốc độ bit, thời gian chờ, tín hiệu điều khiển và nhiều tín hiệu khác với serial.update . Hãy xem tài liệu tham khảo đầy đủ về API serial để biết thêm thông tin.