eeeee eeeee eeeee eeee e eeeee 8 8 8 88 8 8 8 8 8 " 8e 8 8 8 8e 8 8eee 8e 8eeee 88 8 8 8 88 8 88 e 88 88 88 8 8eee8 88ee8 88ee 88 8ee88 8ee88 eeeee eeee eeeee e eeeee e eeeee eeeee eeeee eeeee 8 " 8 8 8 8 8 8 8 8 8 8 88 8 8 8 8eeee 8eee 8eee8e 8e 8eee8 8e 8eee8 8 8 8eee8e 8e 88 88 88 8 88 88 8 88 88 8 8 88 8 88 8ee88 88ee 88 8 88 88 8 88eee 88 8eee8 88 8 88
Version: 0.3.0 - Released July 28, 2011
Imagine a world where you can write JavaScript to control blenders, lights, security systems, or even robots. Yes, I said robots. That world is here and now with node-serialport. It provides a very simple interface to the low level serial port code necessary to program Arduino chipsets, X10 wireless communications, or even the rising Z-Wave and Zigbee standards. The physical world is your oyster with this goodie, don't believe us - watch this presentation from JSConf EU 2010 by Nikolai Onken and Jörn Zaefferer.
This library is admittedly a base level toolkit for building amazing things with real world (including robots). Here are a couple of those amazing things that leverage node-serialport:
- firmata Talk natively to Arduino using the firmata protocol.
- tmpad source - a DIY midi pad using infrared, arduino, and nodejs. Video
- duino - A higher level framework for working with Arduinos in node.js.
- Arduino Drinking Game Extravaganza - AKA "The Russian" a hexidecimal drinking game for geeks by Uxebu presented at JSConf EU 2011.
- Arduino controlling popcorn.js - Controlling a popcorn.js video with an Arduino kit.
- Robotic JavaScript - The first live presentation of the node-serialport code set as presented at JSConf EU 2010.
Using node-serialport is pretty easy because it is pretty basic. It provides you with the building block to make great things, it is not a complete solution - just a cog in the (world domination) machine.
npm install serialport
Opening a serial port:
var SerialPort = require("serialport").SerialPort var serialPort = new SerialPort("/dev/tty-usbserial1");
When opening a serial port, you can specify (in this order).
- Path to Serial Port - required.
- Options - optional and described below.
The options object allows you to pass named options to the serial port during initialization. The valid attributes for the options object are the following
- baudrate: Baud Rate, defaults to 9600. Must be one of: 115200, 57600, 38400, 19200, 9600, 4800, 2400, 1800, 1200, 600, 300, 200, 150, 134, 110, 75, or 50.
- databits: Data Bits, defaults to 8. Must be one of: 8, 7, 6, or 5.
- stopbits: Stop Bits, defaults to 1. Must be one of: 1 or 2.
- parity: Parity, defaults to 0. Must be one of: 0, 1, or 2.
- buffersize: Size of read buffer, defaults to 255. Must be an integer value.
- parser: The parser engine to use with read data, defaults to rawPacket strategy which just emits the raw buffer as a "data" event. Can be any function that accepts EventEmitter as first parameter and the raw buffer as the second parameter.
Out of the box, node-serialport provides two parsers one that simply emits the raw buffer as a data event and the other which provides familiar "readline" style parsing. To use the readline parser, you must provide a delimiter as such:
var serialport = require("serialport"); var SerialPort = serialport.SerialPort; // localize object constructor var sp = new SerialPort("/dev/tty-usbserial1", { parser: serialport.parsers.readline("\n") });
To use the raw parser, you just provide the function definition (or leave undefined):
var serialport = require("serialport"); var SerialPort = serialport.SerialPort; // localize object constructor var sp = new SerialPort("/dev/tty-usbserial1", { parser: serialport.parsers.raw });
You can get updates of new data from the Serial Port as follows:
serialPort.on("data", function (data) { sys.puts("here: "+data); });
You can write to the serial port by sending a string or buffer to the write method as follows:
serialPort.write("OMG IT WORKS\r");
Enjoy and do cool things with this code.