将数据从 SerialPort 发送到 socket.io

Send data from SerialPort to socket.io

我正在为 socket.io、express 和 node.js 苦苦挣扎。

我将数据从 Arduino 发送到我的 cmd。这是通过串行端口库完成的。但现在我希望这些数据显示在我的网络浏览器上。我正在为此使用 express 库。我有 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);

从串行端口 (Arduino) 接收到的数据必须显示在 index.html(网络浏览器)中。我已经尝试过一些但它不起作用。它必须打印在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>

而不是

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

试试这个:

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

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