para servir arquivos publicos como arquivos .css e .js.app.use(express.static(__dirname + '/public'));Definimos executando o metodo use do app que instanciamos mais adiante. Eu separei o arquivo express para justamente poder utilizar a chamada express.static acima. Agora crie tambem um diretorio chamado public na pasta do projeto. Iremos adicionar alguns arquivos mais na frente no tutorial.O proximo passo e criar o nosso servidor http e instanciar o socket.var http = require('http').Server(app);var io = require('socket.io')(http);Feito isso, temos o nosso servidor e o socket prontos para serem usados. Agora definimos rotas para o servidor web responder as requisicoes dos usuarios com a seguinte linha:app.get('/', function(req, res) { res.sendfile('index.html');});A funcao de callback aceita dois parametros, uma requisicao e uma resposta. Isso quer dizer que, quando o usuario requisitar o endereco raiz da nossa aplicacao "/", o node vai retornar uma pagina chamada index.html que depois criaremos.Agora vamos criar a variavel do socket:var mySocket;Registramos o socket quando a conexao e estabelecida da seguinte maneira:io.on('connection', function(socket) { mySocket = socket; console.log('a user connected'); socket.on('disconnect', function() { mySerialPort.close(function(err) { if (err) console.log("Error at disconnect event: " + err); console.log('port closed'); }); });});Registramos eventos usando o metodo on. Quando o usuario emitir um sinal para fechar a conexao, o nosso socket ira encerrar a comunicacao (on 'disconnect').Vamos definir agora a porta serial:var serialport = require("serialport");var SerialPort = serialport.SerialPort;Em seguida instanciamos o objeto com as configuracoes:var mySerialPort = new SerialPort("/dev/ttyACM0", { baudrate: 115200, parser: serialport.parsers.readline("\n") });Observe que e preciso dizer a porta serial onde seu microcontrolador esta conectado. No Debian ela foi reconhecida como /dev/ttyACM0, mas no Windows sera COMx e no Mac como /dev/tty.usbmodemx. Certifique-se de colocar o caminho correto do seu dispositivo. Definimos tambem a taxa de transmissao dos dados e escolhemos um parser para a serial. Ele vai ler linhas e reconhecer quando houver mudanca de linha "\n". Isso pode ser encontrado na documentacao do serialport.Agora vamos criar eventos para a nossa porta serial.Quando ela for aberta corretamente, vamos indicar uma mensagem para o usuario:mySerialPort.on("open", function() { console.log("Port Open");});Veja que em cada evento, existe uma callback relacionada como ele a qual e executada quando o evento e disparado.Um evento especial chamado 'data' e quando os dados chegam na porta serial. Vamos implementar a leitura dos dados que chegam:mySerialPort.on("data", function(data) { console.log('data received: ' + data); // apenas debug io.emit('serialData', { dado: parseFloat(data) });});Observe que o socket ja foi incluido dentro do evento, e, quando os dados chegam, ja emitimos um evento via socket para que o usuario que esta acessando a pagina veja o resultado. O evento 'serialData' foi criado por mim e esse nome sera utilizado posteriormente na pagina index.html para gerenciar a chegada de novos dados pelo socket. Eu configurei o Arduino para de tempos em tempos enviar um numero ponto flutuante (float) pela serial.Por fim, vamos iniciar o nosso servidor:http.listen(3000, function() { console.log('listening on *:3000');});Esse comando faz com que o servidor esteja ligado e funcione na porta 3000.Vamos agora implementar o nosso index.html. Primeiramente, vamos acessar a pagina da biblioteca Chart.js que vamos utilizar para plotar os graficos. Crie um diretorio js dentro da pasta public