作者:Abhiemanyu Pandit
编译:Tony
我们已经看到了许多使用不同的微控制器和不同的编程语言使LED闪烁的示例。今天,我们将使用非常流行的JavaScript框架Node.js来控制连接到Arduino Uno的LED。我们还将使用Node.js通过Arduino 控制网页上的LED亮度。通过少量的调整和使用ESP8266,就可以将其转换为一个IoT项目,可以在任何地方控制LED。
Node.js是一个广泛使用的基于JavaScript的框架,建立在谷歌Chrome的JavaScript V8引擎上,应用于开发I/O密集型的web应用程序,如单页应用程序,视频流网站等。
在本教程中,我们将使用两种方法控制LED,例如:
硬件:
软件:
电路图非常基础,我们只需要将LED与Arduino连接即可。
在开始编程和开发之前,必须下载并安装Node.js。按照如下简单步骤来下载安装Node.js环境。
**步骤1:**从官方网站下载Node.js的.exe文件。
**步骤2:**运行.exe并按照程序中给定的说明进行操作。
**步骤3:**按照Node.js文档中的建议重新启动计算机,并使用Node.js的所有功能。
步骤4:检查Node.js是否安装成功,打开命令提示符终端输入Node -v。
**步骤5:**安装成功将显示Node.js的版本信息。
下载Node.js之后,创建一个名为「LED_Control」的新文件夹,将所有项目文件保存在一个地方。每个项目文件都将保存在“ LED_Control ”文件夹中。现在,在「LED_Control」文件夹中下载Johnny-Five库。要下载,请按照以下步骤操作:
**步骤1:**打开命令提示符终端。
**步骤2:**通过「 cd 」命令转到「LED_Control」文件夹。
**步骤3:**运行命令「 npm install johnny-five」,这将安装Johnny-Five的所有依赖项。
**步骤4:**还需要安装三个用于控制LED亮度的必要库。
**步骤5:**逐行运行如下命令进行安装。
npm install express
npm install socket.io
npm install serialport
为了使Arduino UNO接受来自笔记本电脑的命令以控制LED,必须将Firmata固件加载到Arduino UNO中。要加载Firmata固件,只需执行以下简单步骤:
这会将Firmata Sketch加载到Arduino UNO上,现在Arduino UNO可以接受来自计算机的任何命令了。
要编写Node.js程序,请打开任何文本编辑器,然后粘贴本教程末尾附带的「 blink_led」代码,并将其保存为扩展名“ .js”,即「blink_led.js」,放在之前创建的「LED_Control」文件夹中。下面进行代码分析。
开始定义连接led的微控制器的引脚,在此示例中,LED连接到Arduino UNO的引脚5。Node.js中的“ var”表示变量声明。
var led_pin = 5;
「Johnny-Five」模块要被包含进程序,使用函数**require()**访问模块。
var johnny_five = require("johnny-five");
var arduino_board = new johnny_five.Board();
console.log语句类似于print语句,它会打印消息。LED引脚设置为输出模式,并将定义的延迟提供给闪烁LED。
console.log("LED已开始闪烁!");
var led = new johnny_five.Led(led_pin);
led.blink(100);
现在要运行程序,请按照以下步骤操作:
上传「arduino_control」程序,完整代码见教程末尾。下面进行代码分析。
首先,设置波特率为9600。
Serial.begin(9600);
串口始终监测输入字节,然后将接收到的字节写入具有PWM功能的数字引脚5。
while(!Serial.available());
AnalogWrite(5, Serial.read());
为了使用Web界面控制LED的亮度,编写了一小段HTML代码在浏览器中显示一个界面。具体参照如下简单步骤:
这将在网页上创建一个滑块,以使用Node.js和Arduino控制LED的亮度。
打开文本编辑器,粘贴教程末尾「brightness_control」代码,并将其保存为扩展名“ .js”,即「blink_led.js」,放在之前创建的「LED_Control」文件夹中。下面进行代码分析。
本节将使用前文提到的三个库。
var express = require('express');
app = express();
server = require('http').createServer(app);
io = require('socket.io').listen(server);
var SerialPort = require("serialport")//.SerialPort
设置端口号和波特率,端口号根据实际电脑上分配的进行修改。
var serialPort = new SerialPort("/COM4", { baudRate: 9600 });
开始从8080端口上监听服务。
server.listen(8080);
开始将亮度设置成0,然后通过socket将亮度数据映射到IO口。数据将通过Socket进行接收。
io.sockets.on('connection', function (socket) {
socket.on('led', function (data) {
brightness = data.value;
var buf = new Buffer(1);
buf.writeUInt8(brightness, 0);
serialPort.write(buf);
然后将从Socket上获取的LED亮度值设置到LED引脚。
io.sockets.emit('led', {value: brightness});
socket.emit('led', {value: brightness});
为了调试,在最后一行打印语句,在Node.js中使用Console.log进行打印输出。
console.log("Web Server Started go to 'http://localhost:8080' in your Browser.");
现在按照如下步骤运行程序:
文中相关代码及文件下载
链接:https://pan.baidu.com/s/1rQIWY2K3dc-9h1qV_7oQQA
提取码:ewy8
关注微信公众号:TonyCode
Arduino学习交流群:868283450
更多内容,欢迎关注我的公众号。 微信扫一扫下方二维码即可关注: