Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Raspberry Pi, Arduino, Node.js and serial port

Im trying to talk to my arduino from a node.js server script.

Here's my code:

var app = require('express')()
, server = require('http').createServer(app)
, io = require('socket.io').listen(server)
, SerialPort  = require('serialport').SerialPort;

//SERIAL
var portName = '/dev/ttyACM0';
var sp = new SerialPort(); // instantiate the serial port.
sp.open(portName, { // portName is instatiated to be COM3, replace as necessary
   baudRate: 115200, // this is synced to what was set for the Arduino Code
   dataBits: 8, // this is the default for Arduino serial communication
   parity: 'none', // this is the default for Arduino serial communication
   stopBits: 1, // this is the default for Arduino serial communication
   flowControl: false // this is the default for Arduino serial communication
});

//SERVER
server.listen(80, '127.0.0.5');

app.get('/', function (req, res){
  res.sendfile(__dirname + '/index.html');
});

io.sockets.on('connection', function (socket){
  socket.emit('test', { test: 'Its Working' });
  socket.on('value', function (data){
    console.log(data);
    });
});

Im pretty sure my device is on /dev/ttyACM0 because:

pi@raspberrypi ~/Programming/node $ dmesg|tail
[91569.773042] cdc_acm 1-1.2:1.0: ttyACM0: USB ACM device
[91569.776338] usbcore: registered new interface driver cdc_acm
[91569.776369] cdc_acm: USB Abstract Control Model driver for USB modems and ISDN adapters
[92601.131298] usb 1-1.2: USB disconnect, device number 7
[92609.044999] usb 1-1.2: new full-speed USB device number 8 using dwc_otg
[92609.149759] usb 1-1.2: New USB device found, idVendor=2341, idProduct=0043
[92609.149789] usb 1-1.2: New USB device strings: Mfr=1, Product=2, SerialNumber=220
[92609.149806] usb 1-1.2: Manufacturer: Arduino (www.arduino.cc)
[92609.149820] usb 1-1.2: SerialNumber: 74132343430351705051
[92609.156743] cdc_acm 1-1.2:1.0: ttyACM0: USB ACM device
pi@raspberrypi ~/Programming/node $

When i try and run my server script i get the error:

pi@raspberrypi ~/Programming/node $ node server.js
   info  - socket.io started

/home/pi/node_modules/serialport/serialport.js:72
    throw new Error('Invalid port specified: ' + path);
          ^
Error: Invalid port specified: undefined
    at new SerialPort (/home/pi/node_modules/serialport/serialport.js:72:11)
    at Object.<anonymous> (/home/pi/Programming/node/server.js:8:10)
    at Module._compile (module.js:449:26)
    at Object.Module._extensions..js (module.js:467:10)
    at Module.load (module.js:356:32)
    at Function.Module._load (module.js:312:12)
    at Module.runMain (module.js:492:10)
    at process.startup.processNextTick.process._tickCallback (node.js:244:9)

Im sure im just missing something simple but i don't know enough about Linux or Node to know what it is. Do i need to install the arduino IDE for drivers? Is it because i am sshing into my raspberry pi, i know this uses the serial port but i want to communicate over USB. Is this possible or do i only have 1 serial port regardless of whether its USB or serial?

EDIT I have installed the IDE and I can talk to the arduino through the IDE. So it's not drivers or lack of ports.

Thanks for any help.

Joe

like image 784
Joseph Roberts Avatar asked Feb 22 '13 16:02

Joseph Roberts


People also ask

How do I connect my Raspberry Pi to a serial port?

Connect the Raspberry Pi board to a +3.3V serial device. To receive data, connect the GPIO 15 (UART0_RXD) pin on the Raspberry Pi board to the TxD pin on the serial device. To transmit data, connect the GPIO 14 (UART0_TXD) pin on the Raspberry Pi board to the RxD pin on the serial device.

Does Raspberry Pi have serial ports?

The Raspberry Pi uses non-5V tolerant 3.3V GPIO. This also includes the serial port levels. This level does not match up with PC or RS232 levels and some USB-Serial adapters will use either 5V or RS232 levels, which can and will damage the Pi GPIO.

Can JavaScript access serial port?

A serial port is a bidirectional communication interface that allows sending and receiving data byte by byte. The Web Serial API provides a way for websites to read from and write to a serial device with JavaScript.

What is the use of serial port in Arduino?

Used for communication between the Arduino board and a computer or other devices. All Arduino boards have at least one serial port (also known as a UART or USART), and some have several. On Uno, Nano, Mini, and Mega, pins 0 and 1 are used for communication with the computer.


1 Answers

I think it is because empty arguments to SerialPort, which you later specify in open

var sp = new SerialPort(); // instantiate the serial port.
//then you open
sp.open(portName, { // portName is instatiated to be COM3, replace as necessary

From SerialPort npm project page

var SerialPort = require("serialport").SerialPort
var serialPort = new SerialPort("/dev/tty-usbserial1");

When opening a serial port, you can specify (in this order).
 1. Path to Serial Port - required.
 2. Options - optional and described below.

So you should specify all the arguments in SerialPort instead of open

var portName = '/dev/ttyACM0';
var sp = new SerialPort(portName, {
   baudRate: 115200,
   dataBits: 8,
   parity: 'none',
   stopBits: 1,
   flowControl: false
});
like image 140
user568109 Avatar answered Nov 03 '22 20:11

user568109