2013-02-22 8 views
11

Ich versuche, mit meinem arduino von einem node.js Server-Skript zu sprechen.Raspberry Pi, Arduino, Node.js und serielle Schnittstelle

Hier ist mein 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 ziemlich sicher ist mein Gerät/dev/ttyACM0 weil:

[email protected] ~/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 
[email protected] ~/Programming/node $ 

Wenn ich meine Server-Skript versuchen und laufen i den Fehler:

Ich bin sicher, ich vermisse nur etwas einfaches, aber ich weiß nicht genug über Linux oder Node zu wissen, was es ist. Muss ich die arduino IDE für Treiber installieren? Liegt es daran, dass ich in meinen Raspberry Pi sshing, ich weiß, dass dies die serielle Schnittstelle verwendet, aber ich möchte über USB kommunizieren. Ist das möglich oder habe ich nur 1 seriellen Port, egal ob USB oder seriell?

EDIT Ich habe die IDE installiert und ich kann mit dem Arduino über die IDE sprechen. Es sind also keine Treiber oder fehlende Ports.

Danke für jede Hilfe.

Joe

+0

Versuchen Sie es mit einem Beitrag, der ** nicht ** 80 ist? – Neal

+0

Was meinst du? –

Antwort

8

Ich denke, es liegt daran, dass leere Argumente SerialPort, die Sie im offenen

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

Von SerialPort npm Projektseite

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 sollten Sie alle angeben später angeben Argumente in SerialPort anstelle von öffnen

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

Das war es, vielen Dank –

0

Ich habe einen funktionierenden KnotenJS/arduino/Serialport Roboter.

I verwendet (Sie benötigen eine serielle Schnittstelle selbst ändern)

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

Denken Sie daran, wenn Sie Ihre Arduino „Drain“ die Ausgabe schreiben. Mein Arbeitscode, in dem ich dem Roboter befehle, in eine bestimmte Richtung zu gehen.

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