nodejs 监视文件

Undertow无法监控到线程 无法监视外围设备输出_linux

这是一篇简短的教程文章,内容涉及如何从arduino到NodeJS中的读取串口值。

动机

因此,有一个我正在处理的项目,必须从节点控制台的串行监视器中获取数据,然后使用Web套接字在基于Web的应用程序中显示数据。 但是,我很难弄清楚如何获取数据,我探索并找到了serialport npm模块,但是它提供的输出是以缓冲区的形式出现的,而不是我想要的确切单词。 花了一些时间后,我得以弄清楚该怎么做。 因此,我正在分享此信息,以便它可以帮助尝试这样做的任何人。

arduino和其他外围设备如何与笔记本电脑通信?

在大多数情况下,答案是“串行通信”。 通过串行通讯,可以使用电线“串行”一点一点地发送数据。 下面给出的图像很容易说明,并给出了有关串行和并行通信的清晰思路。

Undertow无法监控到线程 无法监视外围设备输出_python_02

牢记本文的主要重点,我将在这里停止讨论并直接进行讨论。 但是,如果您想了解更多有关串行通信的信息,可以参考Wikipedia ;如果您想了解arduino的串行通信,则可以参考arduino的官方网站 。

关于我的项目!

我使用arduino开发了自来水浪费检测系统。 它基于将雨水模块与超声波传感器结合在一起的简单想法。

Undertow无法监控到线程 无法监视外围设备输出_python_03

超声波传感器与水浪费检测有什么关系? 很简单,使用雨水模块,我可以感觉到是否有水滴落在上面,但是,即使水滴落在雨水模块上,也无法断定水被浪费了。 可能是有人从水龙头上喝水,而有些水落在模块上。 显然,在这种情况下,我不想激活我的水资源浪费检测系统。 因此,为防止错误输出,当雨滴模块检测到水浪费时,使用超声波传感器检测附近是否有人。 这个想法很简单,如果关闭水龙头,则意味着没有浪费水(天才!),如果打开水龙头,并且有人在附近(例如70厘米),那也就意味着没有浪费水(人可能正在使用)。 但是,如果打开水龙头,并且附近没有人,则表明水正在浪费,并且探测器现在可以发出警报。

Undertow无法监控到线程 无法监视外围设备输出_linux_04

因此,基本上该项目结合了雨滴模块和超声波传感器的使用来检测水的浪费。 在此处下载代码

所需的输出…

Undertow无法监控到线程 无法监视外围设备输出_Undertow无法监控到线程_05

这是串行监视器上的输出,我打算在Node服务器上获取该输出,然后使用Web套接字提供有关分接头的实时更新。 让我们为其编写一个脚本:)

出现的一个好问题是我们可以结合硬件和JavaScript吗? 最初,JS并不是要与硬件一起使用的,但是现在该语言已经取得了很大的进步,是的,可以使用它。 阅读这篇有趣的文章: NodeBots-JS Robotics的兴起 。

入门-安装串行端口库

串行端口库为组合硬件项目和JavaScript提供了强大的支持。

想象一下您可以编写JavaScript来控制搅拌机,照明灯,安全系统甚至机器人的世界。 是的-机器人! 感谢Node Serialport,这个世界就在这里。

请访问此链接以获取完整的API文档。

因此,首先,就像处理任何节点模块一样,我们将安装它。

$ npm install --save serialport

下载该节点模块后,我们终于可以开始:)

打开端口并读取值

就像在arduino程序中一样,在进行任何实际的通信之前,我们需要实际打开端口。 可以通过下面的代码来完成。

var SerialPort = require('serialport');

var serialPort = new SerialPort('/dev/ttyACM0', {
    baudrate: 9600
});

您必须输入端口名称而不是/dev/ttyACM0 。 它可能类似于COM17上的COM17 ,或者类似于基于UNIX的系统上的上述内容。

现在端口已打开,我们终于可以插入arduino并使用以下代码获取数据。

// Switches the port into "flowing mode"
serialPort.on('data', function (data) {
    console.log('Data:', data);
});

// Read data that is available but keep the stream from entering //"flowing mode"
serialPort.on('readable', function () {
    console.log('Data:', port.read());
});

真棒!!! 我们已经完成了代码,让我们尝试一下。

$ node filename.js

Undertow无法监控到线程 无法监视外围设备输出_Undertow无法监控到线程_06

等待! 什么!?

所以,这就是我之前所说的。 它没有提供文本,而是提供了数据缓冲区。

不用担心! 文本数据可以轻松地解析和获取。 使用下面给出的代码来这样做!

// Require the serialport node module
var serialport = require('serialport');
var SerialPort = serialport.SerialPort;

// Open the port
var port = new SerialPort("/dev/ttyACM0", {
    baudrate: 9600,
    parser: serialport.parsers.readline("\n")
});

// Read the port data
port.on("open", function () {
    console.log('open');
    port.on('data', function(data) {
        console.log(data);
    });
});

好吧,让我们运行这段代码!

Undertow无法监控到线程 无法监视外围设备输出_linux_07

好极了! 有效!

结论

本文主要介绍JavaScript和硬件,并重点介绍使用NodeJ与串行端口进行通信。 希望它能对您有所帮助,以防您像我以前那样陷入数据缓冲区问题。

非常感谢您保持镇定并阅读全文。 祝一切顺利,编码愉快! 如果有任何疑问或需要任何帮助,可以与我联系: 电子邮件:madhavbahl10@gmail.com 网址: http : //www.madhavbahl.tech/ GitHub: https : //github.com/MadhavBahlMD 领英(LinkedIn): https : //www.linkedin.com/in/madhavbahl/

翻译自: https://hackernoon.com/arduino-serial-data-796c4f7d27ce

nodejs 监视文件