write serialport serial raspberry parsers not node node.js serial-port usb debian raspberry-pi

node.js - raspberry - serialport angular



Raspberry Pi, Arduino, Node.js y puerto serie (2)

Estoy tratando de hablar con mi arduino desde un script del servidor node.js.

Aquí está mi código:

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); }); });

Estoy bastante seguro de que mi dispositivo está en / dev / ttyACM0 porque:

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 $

Cuando intento ejecutar el script del servidor, aparece el 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)

Estoy seguro de que me falta algo simple pero no sé lo suficiente sobre Linux o Node para saber qué es. ¿Debo instalar el Arduino IDE para los controladores? ¿Es porque me estoy metiendo en mi raspberry pi, sé que esto utiliza el puerto serie, pero quiero comunicarme a través de USB. ¿Es esto posible o solo tengo un puerto serie sin importar si es USB o serial?

EDITAR He instalado el IDE y puedo hablar con el arduino a través del IDE. Entonces no son controladores o falta de puertos.

Gracias por cualquier ayuda.

Joe


Creo que es porque los argumentos vacíos a SerialPort , que luego especifiques en abierto

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

De la página del proyecto SerialPort npm

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.

Por lo tanto, debe especificar todos los argumentos en SerialPort en lugar de abrir

var portName = ''/dev/ttyACM0''; var sp = new SerialPort(portName, { baudRate: 115200, dataBits: 8, parity: ''none'', stopBits: 1, flowControl: false });


Tengo un nodo de trabajoJS / arduino / Serialport robot.

Utilicé (necesitas cambiar tu puerto serie al tuyo)

var serialport = require("serialport"); var SerialPort = serialport.SerialPort; // localize object constructor var sp = new SerialPort(comPort, { parser: serialport.parsers.readline("/r"), baudrate: 9600 }); sp.on("open", function () { sp.write(0x80); sp.write(''123456/r''); console.log ("comm port ready"); });

Recuerde cuando escribe en su Arduino para "drenar" la salida. Mi código de trabajo donde le digo al robot que vaya en una dirección específica.

robotData.setLastCommand(direction); sp.write(direction , function(err, results) { **sp.drain(function(err, result){** //console.log ("drain"); //console.log(err, result); }); //console.log ("results -> " + results); });