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
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.
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.
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.
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.
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
});
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With