เอกสารนี้จะอธิบายวิธีใช้ serial API เพื่ออ่านและเขียนจากอุปกรณ์อนุกรม โครเมียม แอปยังสามารถเชื่อมต่อกับอุปกรณ์ USB และบลูทูธได้อีกด้วย
ข้อกำหนดของไฟล์ Manifest
คุณต้องเพิ่ม "อนุกรม" สิทธิ์ในไฟล์ Manifest
"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)
| พารามิเตอร์ | คำอธิบาย | 
|---|---|
| เส้นทาง (สตริง) | หากไม่ทราบเส้นทางที่เชื่อมโยงกับพอร์ตของอุปกรณ์ คุณสามารถใช้เมธอด serial.getDevicesได้ | 
| ตัวเลือก (ออบเจ็กต์) | ออบเจ็กต์พารามิเตอร์ที่มีการกําหนดค่าหลายค่า โปรดดูรายละเอียดที่ serial.ConnectionOptions | 
| Callback | เรียกใช้เมื่อเปิดพอร์ตสำเร็จแล้ว ระบบจะเรียก Callback ด้วยพารามิเตอร์ 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);
กำลังอ่านจากพอร์ตอนุกรม
Serial API จะอ่านจากพอร์ตอนุกรมและส่งไบต์การอ่านเป็น ArrayBuffer ไปยังเหตุการณ์
Listener ของคุณ ทุกพอร์ตที่แอปพลิเคชันเชื่อมต่ออยู่จะสร้างเหตุการณ์ที่อ่านแล้วไปยัง
Listener ที่เพิ่มเข้ามาผ่าน chrome.serial.onReceive.addListener(onReceiveCallback) หากคุณ
เชื่อมต่อกับพอร์ตมากกว่า 1 พอร์ตพร้อมกัน คุณอาจเห็น connectionId ของ
เหตุการณ์ที่เข้ามาอ่านในพารามิเตอร์ Callback ของ 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