将数据从SerialPort发送到socket.io

时间:2017-12-13 14:02:17

标签: html node.js express socket.io node-serialport

我正在与socket.io,express和node.js斗争。

我将数据从Arduino发送到我的cmd。这是通过serialport库完成的。但现在我想在我的webbrowser上显示这些数据。我正在使用快递库。我有 index.js 这里是与arduino和浏览器的连接。还有一个index.html

我有这个代码:

来自index.js(node.js服务器)的

代码:

var express = require('express'),
    app = express(),
    server = require('http').Server(app),
    io = require('socket.io')(server),
    port = 8888;

//Server start
server.listen(port, () => console.log('on port' + port))

//user server
app.use(express.static(__dirname + '/public'));

io.on('connection', onConnection);

var connectedSocket = null;
function onConnection(socket){
    connectedSocket = socket;
}

//Arduino to CMD
const SerialPort = require('serialport');
const Readline = SerialPort.parsers.Readline; 
const usbport = new SerialPort('COM4');  
const parser = usbport.pipe(new Readline()); 
parser.on('data', console.log);

从serialport(Arduino)收到的数据必须显示在index.html(webbrowser)中。我已经尝试了一些东西,但它不起作用。它必须打印在html代码中的<p></p>

index.html代码:

<!DOCTYPE html>
<html>

<head>
  <meta charset="utf-8" />
  <script src="/socket.io/socket.io.js"></script>
</head>

<body>
  <div id="text">
    <p></p>
  </div>

  <script>
    var text = document.getElementById('text');

    var socket = io.connect('http://localhost:8888');

    socket.on('data', function(message) {
      text.innerHTML = message.data;
    });
  </script>

</body>

</html>

我希望它得到很好的解释。

1 个答案:

答案 0 :(得分:0)

而不是

parser.on('data', console.log);

试试这个:

parser.on('data', function (data) {
    io.emit('data', { data: data });
});

那应该将解析后的数据从SerialPort发送到套接字,这应该最终在网站的客户端。