如何解决如何使用arduino自动更新socket.io?
我目前正在从事一个 arduino 项目。 arduino 是否通过串行端口与 NodeJS 服务器通信并且服务器通过 socket.io 向客户端发送数据
我已经获得了显示在浏览器中的信息(带有 arduino 的“实时”计数器的 h1 标签)。
问题是要更新计数器,我必须刷新浏览器。我的目标是确保这些信息自动更新。我查看了文档,没有找到任何与更新相关的 socket.io 事件。
这是我的代码:
index.js
const express = require('express');
const app = express();
const http = require('http').createServer(app);
app.use(express.static(__dirname + '/public'));
let expressPort = process.env.PORT || 3000;
// Socket:
const io = require('socket.io')(http);
// Arduino Stuff:
const SerialPort = require('serialport');
const ReadLine = SerialPort.parsers.Readline;
const port = new SerialPort('COM3',{ baudRate: 9600 });
const parser = port.pipe(new ReadLine({ delimiter: '\r\n' }));
parser.on('data',data => {
let counter = data;
console.log(counter);
io.on('connection',socket => {
io.emit('arduino',counter);
});
});
parser.on('error',error => {
console.log(error);
});
// Express stuff
app.use(express.static(__dirname + '/public'));
app.get('/',(req,res) => {
res.sendFile(__dirname + '/public/');
});
http.listen(expressPort,() => {
console.log(`Listening on port: ${expressPort}`);
});
index.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width,initial-scale=1.0">
<title>Arduino Stuff</title>
</head>
<body>
<h1 id="counter"></h1>
<script src="/socket.io/socket.io.js"></script>
<script src="app.js" charset="UTF-8"></script>
</body>
app.js
const socket = io();
socket.on('arduino',data => {
console.log(data);
const counter = document.getElementById('counter');
counter.innerHTML = data;
});
非常感谢您 :)
编辑:
忘记放arduino代码了,不过基本上就是一个delay的计数器:
int counter = 0;
void setup() {
Serial.begin(9600);
}
void loop() {
Serial.println(++counter,DEC);
delay(3000);
}
解决方法
好吧,我很愚蠢,只是不要用 io.on('connection'...) 包装 de emit 方法, 本身没有“更新”方法,发射方法足以实现这一点,但是,如果您将其插入到“连接”中,那么它只是在第一个连接中调用,因此,只是在刷新中显示信息。
结果:
parser.on('data',data => {
let counter = data;
console.log(counter);
io.emit('arduino',counter);
});
抱歉浪费你们的时间:(
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。