2013-08-01 50 views
0

我非常難過。我花了3個小時在Google上搜索我的問題的答案。我擁有的是一個控制一些繼電器的arduino。它由node.js控制。使用USB和SerialPort軟件包,一切都很好。我需要做的是放下USB連接並通過以太網完成這項工作。使用Node.js通過以太網與Arduino通信

我儘可能多的設置了,我可以通過終端ping通arduino。但我難以忍受的是如何通過網絡/以太網將數據(串行數據?)發送到arduino。在我將端口配置爲... tty/usbmodem141之前...我現在如何將數據發送到網絡上的設備?我可以發送串行數據嗎?我需要不同的包嗎?多謝你們!

回答

3

這是一個適合我的素描。

#include <SPI.h> 
#include <Ethernet.h> 
#include <EthernetUdp.h> 

byte arduinoMac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED }; 
IPAddress arduinoIP(10, 0, 0, 19); // desired IP for Arduino 
unsigned int arduinoPort = 8888;  // port of Arduino 

IPAddress receiverIP(10, 0, 0, 13); // IP of udp packets receiver 
unsigned int receiverPort = 6000;  // port to listen on my PC 

EthernetUDP Udp; 

void setup() { 
    Ethernet.begin(arduinoMac,arduinoIP); 
    Udp.begin(arduinoPort); 
} 

void loop() { 

Udp.beginPacket(receiverIP, receiverPort); //start udp packet 
Udp.print(String(analogRead(A0), DEC)); //write sensor data to udp packet 
Udp.write(","); 
Udp.print(String(analogRead(A1), DEC)); //write sensor data to udp packet 
Udp.endPacket(); // end packet 

delay(3000); 
} 

記錄它的另一端,我用Node.js的。這是一個示例文件,它將讀取傳入的數據包並將它們記錄到文件中。

var dgram = require("dgram"); 

var server = dgram.createSocket("udp4"); 
var fs = require('fs'); 



var crlf = new Buffer(2); 
    crlf[0] = 0xD; //CR - Carriage return character 
    crlf[1] = 0xA; //LF - Line feed character 

function getDateTime() { 

var date = new Date(); 

var hour = date.getHours(); 
hour = (hour < 10 ? "0" : "") + hour; 

var min = date.getMinutes(); 
min = (min < 10 ? "0" : "") + min; 

var sec = date.getSeconds(); 
sec = (sec < 10 ? "0" : "") + sec; 

var year = date.getFullYear(); 

var month = date.getMonth() + 1; 
month = (month < 10 ? "0" : "") + month; 

var day = date.getDate(); 
day = (day < 10 ? "0" : "") + day; 

return year + "/" + month + "/" + day + " " + hour + ":" + min + ", "; 

} 

server.on("error", function (err) { 
    console.log("server error:\n" + err.stack); 
    server.close(); 
}); 

server.on("message", function (msg, rinfo) { 
console.log(getDateTime() + msg + " from " + 
rinfo.address + ":" + rinfo.port); 
fs.appendFile("mydata.txt",getDateTime() + msg + crlf, encoding='utf8',function(err){});//write the value to file and add CRLF for line break 

}); 

server.on("listening", function() { 
    var address = server.address(); 

    console.log("server listening " + 
    address.address + ":" + address.port); 
}); 

server.bind(6000); 
// server listening 10.0.0.13:6000 

你必須調整你的Arduino和主機IP地址的,但你應該能夠找到答案。