iT邦幫忙

2023 iThome 鐵人賽

DAY 19
0

Day 19 Node.js SerialPort

Web Serial API 和 Web BLE API 都是瀏覽器的 API,為了讓 Node.js 也能使用這個 SDK,我們也需要支援 SerialPort 這個套件。

如何連線到 Chameleon Ultra

首先我們要先尋找 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

將 Node.js 的 stream 轉成 Web 的 Stream

從 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 類似,在此就不再贅述。

參考連結


上一篇
Day 18 Web BLE API
下一篇
Day 20 使用 Rollup 來產生各平台的 Javascript 檔案
系列文
用 Web Serial/Bluetooth 來控制 ChameleonUltra 硬體30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言