当前位置: 首页 > 知识库问答 >
问题:

Arduino wireless和Node.js

堵宏毅
2023-03-14

我在做一个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);
});

共有1个答案

孟英光
2023-03-14

当监视器运行时,没有其他程序可以读取串行端口。

如果您没有同时打开这两个,那么事情就会更加棘手。我的建议是监视电线。也就是说:安装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,如果