我在做一个Arduino项目来控制马达和读取传感器。我决定使用web视图,使用Node.js作为媒介通道,使用其中一个库(SerialPort和SerialPort2)从串行端口读/写到浏览器。
当我使用电线将Arduino直接连接到USB设备时,两者都工作得很好,但当我通过无线适配器**(APC220)将Arduino连接到USB设备时,Node.js似乎无法读取任何内容,尽管我可以使用Arduino串行监视器读取它上接收的所有内容。
我检查了背后所有可能的原因;我用wirelss串行、APC220和桥接连接器(USB到串行转换器)检查了用于Arduino通信的波特率。它们都有相同的设置:9600波特率,没有奇偶校验/流量控制,数据位:8,停止位:1。
注意:我知道我可以使用另一个Arduino作为USB端口和无线适配器之间的媒介,但我想理解这个问题,并干净地解决它,而不需要这样的工作。
会有什么问题?
服务器[Node.js]:
var SerialPort = require('serialport2').SerialPort;
var portName = 'COM15';
var io = require('socket.io').listen(8000); // Server listens for socket.io communication at port 8000
io.set('log level', 1); // Disables debugging. This is optional. You may remove it if desired.
var sp = new SerialPort(); // Instantiate the serial port.
sp.open(portName, { // portName is instatiated to be COM3, replace as necessary
baudRate: 9600, // This is synchronised to what was set for the Arduino code
dataBits: 8, // This is the default for Arduino serial communication
parity: 'none', // This is the default for Arduino serial communication
stopBits: 1, // This is the default for Arduino serial communication
flowControl: false // This is the default for Arduino serial communication
});
io.sockets.on('connection', function (socket) {
// If socket.io receives message from the client browser then
// this call back will be executed.
socket.on('message', function (msg) {
console.log(msg);
});
// If a web browser disconnects from Socket.IO then this callback is called.
socket.on('disconnect', function () {
console.log('disconnected');
});
});
var cleanData = ''; // This stores the clean data
var readData = ''; // This stores the buffer
sp.on('data', function (data) { // Call back when data is received
readData = data.toString(); // Append data to buffer.
// If the letters '[' and ']' are found on the buffer then isolate what's in the middle
// as clean data. Then clear the buffer.
console.log(readData); // **Here you should be able to print the data if you receive any**
if (readData.indexOf(']') >= 0 && readData.indexOf('[') >= 0) {
cleanData = readData.substring(readData.indexOf('[') + 1, readData.indexOf(']'));
readData = '';
console.log("-- "+cleanData);
io.sockets.emit('message', cleanData);
}else if(readData.indexOf('[') >= 0){
cleanData = readData.substring(readData.indexOf('[') + 1, readData.length);
readData = '';
}else if(readData.indexOf(']') >= 0){
cleanData += readData.substring(0, readData.indexOf(']'));
readData = '';
console.log("-- "+cleanData);
io.sockets.emit('message', cleanData);
}else{
cleanData += readData;
readData = '';
}
//console.log(readData);
//io.sockets.emit('message', readData);
});
当监视器运行时,没有其他程序可以读取串行端口。
如果您没有同时打开这两个,那么事情就会更加棘手。我的建议是监视电线。也就是说:安装Wireshark并查看串行连接/USB总线上的数据。
您可能还想检查APC220和Arduino的串行端口与它们的串行/USB转换器有何不同。另一个想法是在Linux下分析这个问题,因为可以更深入地了解芯片组/USB活动的低级差异。当然,如果您没有Linux经验,这是很难做到的,但也许您认识一些Linux爱好者。
问题内容: 我一直在学习redis和node.js。我有两个问题,找不到令人满意的答案。 我的第一个问题是关于在node.js中重用Redis客户端。我找到了这个问题和答案:如何在socket.io中重用Redis连接,但还不足以让我满意。 现在,如果我在连接事件中创建redis客户端,它将为每个连接生成。因此,如果我有2万个并发用户,那么将有2万个Redis客户端。 如果我将其放在连接事件之外,
问题内容: 我有一个非常普通的Express应用程序- 简单的服务器逻辑,视图,许多客户端JS。我必须执行许多AJAX请求。其中一些需要通过HTTPS协议保护(某些不需要)。 因此,我的服务器应同时使用HTTP和HTTPS。它也应该在本地计算机(正常运行nodemon)和Heroku上都可以工作。 据我了解,Heroku为您提供了一个您可以监听的端口(process.env.PORT),并通过代理
问题内容: 我想知道Node.js中的数据访问是否需要互斥锁/锁。例如,假设我已经创建了一个简单的服务器。服务器提供了几种协议方法,可以添加到内部阵列中或从内部阵列中删除。我需要使用某种互斥量保护内部阵列吗? 我了解Javascript(因此Node.js)是单线程的。我只是不清楚事件的处理方式。事件会中断吗?如果真是这样,我的应用程序可能正在读取数组的过程中,被打断以运行事件回调以更改数组,然后
问题内容: 我想知道如何将node.js集成到Rails应用程序中(出于学习目的)。 基于Michael Hartl教程(http://railstutorial.org/),我实现了带有Rails的基本Twitter克隆,并希望实时获得用户微博,而无需使用彗星或剑圣。(该应用程序托管在heroku上) 目前,我仅看到node.js框架(http://howtonode.org/grasshopp
问题内容: 有什么办法可以让我的Node.js应用程序与Microsoft SQL通信?我还没有野外看到任何MS SQL驱动程序吗? 我将一个非常简单的应用程序放在一起,并且需要能够与现有的MS SQL数据库进行通信(否则,我本来应该使用mongoDB或Redis) 问题答案: 我们刚刚发布了用于SQL Server连接的Node.JS预览驱动程序。您可以在这里找到它们:http : //blog
由于Node.js平台是在后端运行JavaScript代码,所以,必须首先在本机安装Node环境。 安装Node.js 目前Node.js的最新版本是7.6.x。首先,从Node.js官网下载对应平台的安装程序,网速慢的童鞋请移步国内镜像。 在Windows上安装时务必选择全部组件,包括勾选Add to Path。 安装完成后,在Windows环境下,请打开命令提示符,然后输入node -v,如果