Thiết bị nối tiếp

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

hay không.

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

Bạn phải thêm quyền "chuỗi" 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ác cổng nối tiếp có sẵn, hãy dùng phương thức serial.getDevices. Lưu ý: không phải cổng nối tiếp nào cũng dùng được. API sử dụng phương pháp phỏng đoán để chỉ hiển thị các thiết bị nối tiếp đượ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 liên kết với cổng nối tiếp, bạn có thể kết nối với cổng đó bằng phương thức serial.connect:

chrome.serial.connect(path, options, callback)
Thông sốNội dung mô tả
path (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 tham số có một vài 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 mở cổng thành công. Lệnh gọi lại sẽ được gọi với một tham số là connectionInfo. Tham số này có một số 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 cổng nối tiếp

Khi một ứng dụng chấm dứt, các kết nối đến cổng nối tiếp không ổn định sẽ tự động bị nền tảng đó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 phương thức 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 cho trình nghe sự kiện. 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 vào thông qua chrome.serial.onReceive.addListener(onReceiveCallback). Nếu kết nối với nhiều cổng cùng lúc, bạn có thể tìm thấy connectionId tương ứng của một sự kiện đọc đến trong thông số gọi lại của serial.onReceive.

Ví dụ sau đây có thể tích luỹ các byte đã đọc cho đến khi một dòng mới được đọc, chuyển đổi ArrayBuffer nhận được thành String và gọi một phương thức khi một dòng mới được tìm thấy 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

Gửi dữ liệu đến cổng nối tiếp

Việc gửi dữ liệu đơn giản hơn là đọc. Điểm duy nhất cần lưu ý là nếu giao thức dữ liệu của bạn dựa trên Chuỗi, thì bạn phải chuyển đổi chuỗi đầu ra thành ArrayBuffer. Xem mã ví dụ bên dưới:

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 phát lệnh xả:

  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 để kết nối 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 nhanh chóng, như tốc độ bit, thời gian chờ, tín hiệu điều khiển, v.v. bằng phương thức serial.update. Hãy xem tài liệu tham khảo đầy đủ của API serial để biết thêm thông tin.