O Arduino e um projeto de hardware livre, e tem muita coisa na internet (muita mesmo), e vários grupos como o ArduinoMS que promove encontros periódicos para troca de conhecimento, experiencia e um pouco de diversao tambem, afinal diversão e o carro chefe de quem "brinca" com Arduino.
Ja o Node.JS e um servidor de aplicacaoes em javascript orientado a eventos e assíncrono.
Esta aplicacao e bem simples, ascender e apagar um led por uma interface web, utilizando webSockets.
Presumindo que vc ja tenha instalado o Node.JS, vamos aos codigos.
Na interface....
var socket = new WebSocket("ws://localhost:8080/"); // abro a conecxao com o servidor
function acendeLuz(){
socket.send(1); // envio 1 para ascender
}
function apagaLuz(){
socket.send(0); // e 0 para apagar
}
e o html.....
no servidor....
var ws = require("./ws"); // blibioteca para trabalhar com webSocktes
var fs = require('fs'); // bliboteca para trabalhar com fileSystem
var server = ws.createServer(function(socket){
socket.on("connect", function(resource){
socket.write("conectou");
});
socket.on("data", function (data) {
console.log(data);
if(data == 1){acende();} // verifico a mensagem da interface
if(data == 0){apaga();}
});
});
function acende(){
// envia a string '1' para o arduino pela porta USB, dev/ttyUSB0 (no Ruwindows seria COM1 )
fs.open('/dev/ttyUSB0', 'a', 666, function( e, id ) {
fs.write( id, '1', null, null, null, null);
});
}
function apaga(){
fs.open('/dev/ttyUSB0', 'a', 666, function( e, id ) {
fs.write( id, '0', null, null, null, null);
});
}
server.listen(8080); // server na porta 8080...
e por fim no arduino.....
int incomingByte = 0; // for incoming serial data
int ledPin = 13;
void setup() {
Serial.begin(9600);
pinMode(ledPin, OUTPUT); // opens serial port, sets data rate to 9600 bps
}
void loop() {
// send data only when you receive data:
if (Serial.available() > 0) {
// read the incoming byte:
incomingByte = Serial.read();
// say what you got:
Serial.print("I received: ");
Serial.println(incomingByte);
if(incomingByte == 49){ // o 49 representa a string '1' enviada pelo servidor
digitalWrite(ledPin, HIGH);
}
if(incomingByte == 48){ // e o 48 representa o '0'
digitalWrite(ledPin, LOW);
}
}
}
tem ai um video da aplicacao funcionando
Mais.....
o codigo completo ta no github https://github.com/eltonluc/ArduinoNode
sobre o ultimo Dojo do ArduinoMS tem um post do @jeffmor no blog da Jera
Dica...
se vc tem um modem 3g da Huawei, evite usar ele e a placa do arduino espetada ao mesmo tempo no computador, pode ser fatal (para o modem)....