如果说Nodejs将JavaScript的应用从网页端扩展到了服务器和操作系统端,Electron为JavaScript实现了跨平台应用的能力,那么SerialPort就是打通JavaScript软件与硬件的关键部件。著名的Johnny-Five物联网平台开发包的核心部件就是SerialPort,而Mozilla的WebThings
Gateway物联网关也是在SerialPort基础上实现的。这是因为,虽然已经历经了几十年光阴,串口在通讯传输速度上已经远远跟不上现代的通讯手段,但由于其廉价、简便、稳定可靠且经历时间验证的特点,在当前的工业与民生中仍然具有相当重要的地位,而SerialPort正是作为串口与计算机系统连接的中枢,成为互联网开发利器的JavaScript打通软件与硬件系统的关键。
更准确来说,SerialPort是运行在Node平台上的开发包,其安装也是通过npm install完成的。在SerialPort官方首页有一段简单的应用例程。装完SerialPort后,用这段程序就可以立即上手(当然,你还需要一个串口终端设备并且编写了终端部分的程序,如果没有,也可以通过本文后面的仿真器模拟出来一个。)
const SerialPort = require('serialport')
const Readline = require('@serialport/parser-readline')
const port = new SerialPort(path, {
baudRate: 256000 })
const parser = new Readline()
port.pipe(parser)
parser.on('data', line => console.log(`> ${
line}`))
port.write('ROBOT POWER ONn')
//> ROBOT ONLINE
SerialPort包由SerialPort,Bindings,Interfaces和Parsers几部分组成,并且提供了一些比如串口列表等命令行工具(这些工具在旧版本里是SerialPort的一部分,但是目前版本中都可以独立运行了)。
1. Bindings
Bindings(绑定)是SerialPort连接软件与硬件平台的基础,一般来说,SerialPort库会自动探测并与平台绑定(Binding),不需要人为去调用Bindings来绑定Linux、Windows或是mac平台。当然,SerialPort也提供了一个修改Bindings的路径,这是通过内置的Stream包实现的(按照开发者的意图,用户永远不需要直接操作Bindings包)。
var SerialPort = require('@serialport/stream');
SerialPort.Binding = MyBindingClass;
通常来说,人为修改绑定在使用中并没有太大便利,但对于调试则非常重要,这是因为,在调试时用户可以修改绑定来调用一个仿真的串口。
2. Stream Interfaces
SerialPort的接口界面是通过流(Stream)实现的,