风筝
发表于: 2019-5-24 11:01:49 | 显示全部楼层

我们在之前已经使用许多不同微控制器和不同编程语言实现了LED闪烁示例。今天,我们将使用一个非常流行的JavaScript框架Node.js来控制连接到Arduino Uno的LED。我们还将使用Node.js使用Arduino从网页控制LED的亮度。通过少量调整和使用ESP8266,可以将其转换为物联网项目,可以从任何地方控制LED。


什么是Node.js?

Node.js是一个广泛使用的基于JavaScript的框架,构建于Google Chrome的JavaScript V8引擎之上,适用于开发I / O密集型Web应用程序,如单页面应用程序、视频流网站等。


在本篇文章中,我们将使用两种方法控制LED,即:

●    通过在Node.js框架中编写JavaScript代码实现简单的LED闪烁。

●    使用Node.js框架和浏览器的网页实现LED亮度控制:Arduino UNO将充当网络服务器,HTML网页将托管在PC或笔记本电脑上。


需要的组件:

●    Arduino UNO开发板

●    LED指示灯

●    电阻

●    Arduino IDE:用于将草图上传到Arduino UNO开发板。

●    Firmata:它是一种协议,用于通过计算机、智能手机等软件与不同的微控制器进行通信。Firmata固件可以加载到任何微控制器板(如Arduino、Teensy)中,并且可以与任何笔记本电脑、PC或智能手机通信。Arduino IDE自带Firmata库,因此无需从任何地方下载。

●    Johnny-Five:Johnny-Five是基于JavaScript的机器人和物联网平台,用于在JavaScript中编写代码并用于在Arduino开发板和计算机之间建立通讯。 Johnny-Five已经过各种Arduino兼容板的测试,如Arduino UNO、NANO、Promini等。在本文中,必须下载Johnny-Five库才能使用其所有功能。安装指南将在本文的后面部分进行说明。


电路原理图

电路图非常基础,我们只需要将一个LED与Arduino连接起来。

Circuit-Diagram-for-Controlling-an-LED-using-Nodejs-and-Arduino.png


设置Node.js框架

在开始编写代码和开发之前,必须下载并设置Node.js。要下载Node.js环境,只需按照简单的步骤操作即可。

第1步: - 从其官方网站下载Node.js的.exe文件

第2步: - 运行.exe并按照安装程序中的给定说明操作。

Setting-Up-Node.js-Framework.png

第3步: - 按照Node.js文档中的建议重新启动计算机,并使用Node.js的所有功能

第4步: - 要检查Node是否已安装,请打开命令提示符并键入Node -v

How-to-Check-Nodejs-is-Insatalled.png

第5步: - 将显示Node.js版本,指示已安装Node.js.


安装Johnny-Five库

现在,在下载Node.js之后,在Documents中创建一个名为“LED_Control”的新文件夹,以将所有项目文件保存在一个位置。每个项目文件都将保存在“LED_Control”文件夹中。现在下载“LED_Control”文件夹中的Johnny-Five Library。要下载,请按照以下步骤操作:

第1步: - 打开命令提示符

第2步: - 按照'cd'命令转到“LED_Control”文件夹。

第3步: - 运行命令'npm install johnny-five'

Installing-Johnny-Five-Express-Library_0.png

第4步: - 这将安装Johnny-Five的所有依赖项。

第5步: - 还安装本教程中用于控制LED亮度的必要库。这里使用了三个库:

     ●    express:HTTP服务器包装器

     ●    socket.io:WebSockets库

     ●    serialport:串口包装器


第5步: - 逐个运行以下命令以安装这三个库。

  1. npm install express
  2. npm install socket.io
  3. npm install serialport
复制代码

Installing-Johnny-Five-Serial-Port-Library_0.png

Installing-Johnny-Five-SocketIO-Library_0.png

Installing-Johny-Five-in-the-System_0.png


如前所述,该项目分为两部分:

首先,Arduino使用Node.js闪烁LED

其次,使用Arduino和Node.js从Web界面控制LED亮度。


使用Arduino和Node.js闪烁LED

要使LED闪烁,必须将Arduino设置为与计算机通信。


设置Arduino UNO闪烁LED:

为了使Arduino UNO接受从Laptop到Control LED的命令,必须将Firmata固件加载到Arduino UNO中。要加载Firmata固件,只需按照以下简单步骤操作:

●    使用USB线连接Arduino UNO

●    打开Arduino IDE并从Tools中选择Arduino UNO板(如果使用其他板然后选择相应的板)。

●    选择已连接的Arduino UNO的相应COM端口

●    现在使用菜单 - >文件 - >示例 - > Firmata  - > StandardFirmata找到Firmata Sketch。

●    通过转到文件 - >上传来上传“StandardFirmata”草图。

这将把Firmata Sketch加载到Arduino UNO上,现在Arduino UNO已准备好接受来自计算机的任何命令。


编写用于闪烁LED的Node.js程序:

要编写Node.js程序,请打开任何文本编辑器(记事本、Notepad ++等)并粘贴本教程末尾附带的'blink_led'代码,并使用'.js'扩展名保存,即(blink_led.js)在之前创建的“LED_Control”文件夹中。我们将讨论blink_led.js代码文件中的重要步骤。


最初定义连接LED的微控制器引脚。在此示例中,LED连接到Arduino UNO的引脚5。 Node.js中的'var'表示变量声明。

  1. var led_pin=5;
复制代码

需要包含johnny-five模块并且需要选择板。 Node.js中的模块是库。函数'require()'将访问模块。

  1. var johnny_five=require("johnny-five");
  2. var arduino_board=new johnny_five.Board();
复制代码

console.log语句类似于print语句,它将打印消息。并且LED引脚设置为输出模式,定义的延迟设置为闪烁LED。

  1. console.log("LED has Started Blinking!");  
  2. var led = new johnny_five.Led(led_pin);  
  3. led.blink(100);
复制代码

现在运行该程序,请按照以下步骤操作:

●    打开命令提示符

●    按照'cd'命令找到“LED_Control”文件夹

●    运行'Node led_blink.js'命令。如果成功执行,它将显示“LED has Started Blinking!”如下图所示。

Writing-Nodejs-Program-for-Blinking-LED.png

●    LED将在Arduino UNO Pin 5中开始闪烁。

●    这完成了我们教程的第一部分,即使用Node.js闪烁LED


使用Arduino和Node.js Webserver控制LED亮度

与使用Node.js闪烁LED类似,本节还将包含一些部分,例如设置Arduino UNO、设置Web界面和编写Node.js程序。


设置Arduino UNO来控制LED的亮度:

要设置Arduino UNO,只需将草图“arduino_control.ino”上传到Arduino UNO板就可以了。这将建立Arduino开发板。 “arduino_control.ino”代码包含以下重要步骤。


首先将波特率设置为9600。

  1. Serial.begin(9600);
复制代码

串行端口始终查询输入字节,字节写入PWM引脚5。

  1. while(!Serial.available());
  2. analogWrite(5, Serial.read());
复制代码

以上将设置Arduino将字节锁存到PWM引脚,并将改变LED的亮度。


设置Web界面:

为了使用Web界面控制LED的亮度,编写了一小段HTML代码以在浏览器中具有界面。要使界面遵循以下简单步骤:

●    在之前创建的“LED_Control”文件夹中创建一个名为“public”的新文件夹。

Setting-up-Web-Interface-for-Nodejs-and-Arduino.png

●    现在下载“index.html”和“style.css”文件,并将这两个文件移到上面第一步中创建的“public”文件夹中。

Designing-the-Web-Interface-for-Controlling-LED-using-Nodejs-and-Arduino.png

这将在网页上创建一个滑块,以使用Node.js和Arduino控制LED的亮度。

Web-Interface-for-Controlling-LED-using-Nodejs-and-Arduino.png

从网页控制LED很有趣,可以通过创建网络服务器并在网络服务器上托管网页,与其他微控制器一起完成。


编写Node.js程序来控制LED的亮度:

下一步是使用Node.js编写“brightness_control.js”草图并执行代码。代码的执行与使用Node.js闪烁LED有点类似。


要编写Node.js程序,请打开任何文本编辑器(记事本、Notepad ++等)并粘贴本教程末尾附带的'brightness_control'代码,并使用'.js'的扩展名保存它,即(brightness_control.js)在之前创建的“LED_Control”文件夹中。


与Blink Led Node.js程序类似,本节也将使用模块(库)。包括'express'、'http'和'serial port'模块。

  1. var express = require('express');
  2. app = express();
  3. server = require('http').createServer(app);
  4. io = require('socket.io').listen(server);
  5. var SerialPort = require("serialport")//.SerialPort
复制代码

现在设置COM端口和波特率。请注意,在Windows中,它将始终为COM带数字的扩展名(COM6、COM4、COM24等),因此在“/”之后根据需要设置如下。同时设置波特率。

  1. var serialPort = new SerialPort("/COM4", { baudRate: 9600 });
复制代码

开始在端口8080上侦听服务器。

  1. server.listen(8080);
复制代码

最初将亮度设置为0。然后使用套接字模块将亮度数据锁存到IO,这是一个websocket模块。 Web Interface使用套接字协议接收数据。

  1. io.sockets.on('connection', function (socket) {
  2. socket.on('led', function (data) {
  3. brightness = data.value;
  4. var buf = new Buffer(1);
  5. buf.writeUInt8(brightness, 0);
  6. serialPort.write(buf);
复制代码

现在将套接字中的LED亮度值发送到LED引脚。

  1. io.sockets.emit('led', {value: brightness});   
  2. });
  3. socket.emit('led', {value: brightness});
  4. });
复制代码

现在只需要调试,最后添加一个print语句。 Console.log是Node.js中的print语句。

  1. console.log("Web Server Started go to 'http://localhost:8080' in your Browser.");
复制代码

现在按照以下步骤运行程序:

●    打开命令提示符

●    按照'cd'命令找到“LED_Control”文件夹

●    运行'Node brightness_control.js'命令。如果成功执行,它将在浏览器中显示“Web Server Started to”http:// localhost:8080“。。

Writing-Nodejs-Program-to-Control-Brightness-of-LED.png

●    现在转到您的浏览器并在网址中输入“localhost:8080”。

●    要更改亮度,只需将滑块从0到255的值移动即可。

Controlling-an-LED-using-Nodejs-and-Arduino.jpg

这两部分的完整代码如下。如果您有任何疑问或建议,那么您可以在本帖下面进行回复。


代码

本文使用的完整代码如下: main.rar (779 Bytes, 下载次数: 55)

跳转到指定楼层
回复

使用道具 举报

amy
发表于: 2019-6-11 15:48:41 | 显示全部楼层

感谢分享
回复

使用道具 举报

nbdnbb
发表于: 2020-5-6 18:49:27 | 显示全部楼层

“index.html”和“style.css”文件没有给
回复

使用道具 举报

11zhangjing11
发表于: 2020-6-15 11:50:00 | 显示全部楼层

运行blink_led.js的时候,为什么com总识别到com1,和arduino uno使用的com不对
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题 714 | 回复: 1501



手机版|

GMT+8, 2024-12-22 16:01 , Processed in 0.076109 second(s), 9 queries , Gzip On, MemCache On. Powered by Discuz! X3.5

YiBoard一板网 © 2015-2022 地址:河北省石家庄市长安区高营大街 ( 冀ICP备18020117号 )

快速回复 返回顶部 返回列表