Web Serial API 和 Web BLE API 都是瀏覽器的 API,為了讓 Node.js 也能使用這個 SDK,我們也需要支援 SerialPort 這個套件。
首先我們要先尋找 ChameleonUltra,這個步驟會需要裝置 ID:
import _ from 'lodash'
import { SerialPort } from 'serialport'
// 找到第一個符合條件的裝置
const device = _.find(await SerialPort.list(), { vendorId: '6868', productId: '8686' })
if (_.isNil(device)) throw new Error('device not found')
console.log(device)
// Example output:
// {
// path: '/dev/tty.usbmodem0000000000001',
// manufacturer: 'Proxgrind',
// serialNumber: '000000000000',
// pnpId: undefined,
// locationId: '01130000',
// vendorId: '6868',
// productId: '8686'
// }
取得裝置路徑後,我們就可以與裝置建立連線:
import { SerialPort } from 'serialport'
const duplex = new SerialPort({ path: device.path, baudRate: 115200 })
serialport/list
取得裝置列表可以透過寫程式之外,你還可以透過 serialport/list
所提供的指令來取得裝置列表,教學文件位於 https://serialport.io/docs/bin-list。
以下是指令的範例:
$ npx @serialport/list -f jsonline
$ yarn dlx @serialport/list -f jsonline
從 SerialPort 拿到的是 Node.js 版本的 stream,但 Node.js 版本的 stream 與 Web Stream API 有很多差異,為了要讓我們能夠重複使用之前為 Web Stream API 所開發的程式碼,筆者選擇將其轉換成 Web Stream API,以下是轉換的程式碼:
import { Duplex } from 'stream'
const port = Duplex.toWeb(duplex)
轉換成網頁版本的 Stream 以後,讀取及寫入的方法就跟 Web Serial API 類似,在此就不再贅述。