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