Raspberry Pi, Arduino, Node.js and serial port

20,356

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
});
Share:
20,356
Joseph Roberts
Author by

Joseph Roberts

I am a strong all round technologist most interested in robotics and the Internet of Things, as they bring hardware and software together, enabling the digital and real worlds to combine and augment each other. Technology has always fascinated me and from an early age, I have been interested in computers and electronics. For this reason, I have been developing software and tinkering with hardware for over 15 years. I have worked with embedded devices, both Linux based single board computers and microcontrollers, writing firmware and integrating with external hardware and sensors. I have also developed applications targeting both Windows and Linux based desktop environments as well as iOS and Android platforms. My experience has brought me to work on many different projects using a variety of languages such as C++, Golang, Rust, CoffeeScript, C#, and Python. I have managed projects from start to finish, developed and debugged electronic PCBs and designed and manufactured small runs of electronic and mechanical components. Currently, I'm a Hardware Engineer at resin.io focused on bringing micro-controller support to the resin platform. To keep up to date with technology I regularly attend a Hackerspace, go to meetups and have recently been to helping to run resin hosted hackathons. I also work on projects in my spare time. At the moment I'm working on building a smaller, nimbler Quad Rotor, prototyping a small two wheeled balancing robot and developing a Rust command line tool for tracking crypto-currency prices.

Updated on September 15, 2020

Comments

  • Joseph Roberts
    Joseph Roberts over 3 years

    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