Arduino遇到Node.js:通過Web界面控制LED的亮度

作者:Abhiemanyu Pandit
編譯:Tony

我們已經看到了許多使用不同的微控制器和不同的編程語言使LED閃爍的示例。今天,我們將使用非常流行的JavaScript框架Node.js來控制連接到Arduino Uno的LED。我們還將使用Node.js通過Arduino 控制網頁上的LED亮度。通過少量的調整和使用ESP8266,就可以將其轉換爲一個IoT項目,可以在任何地方控制LED。

1. 什麼是Node.js

Node.js是一個廣泛使用的基於JavaScript的框架,建立在谷歌Chrome的JavaScript V8引擎上,應用於開發I/O密集型的web應用程序,如單頁應用程序,視頻流網站等。

在本教程中,我們將使用兩種方法控制LED,例如:

  • 通過在Node.js框架中編寫JavaScript代碼來使簡單的LED閃爍。
  • 使用Node.js框架和來自任何瀏覽器的Web界面進行LED亮度控制: Arduino UNO將充當Web服務器,HTML網頁將託管在PC或筆記本電腦上。

2. 所需組件

硬件:

  • Arduino UNO板
  • 發光二極管
  • 電阻

軟件:

  • Arduino IDE:用於將程序上傳到Arduino UNO板。
  • Firmata:它是一種協議,用於與計算機,智能手機等設備上的軟件與不同的微控制器進行通信。Firmata固件可以加載在任何微控制器板上(例如Arduino,Teensy),並且可以與任何筆記本電腦,PC或智能手機進行通訊。Firmata庫隨Arduino IDE一起提供,因此無需從任何地方下載。
  • Johnny-Five: Johnny-Five是基於JavaScript的機器人技術和物聯網平臺,用於以JavaScript編寫代碼,並用於在Arduino開發板和計算機之間架起橋樑。Johnny-Five已通過各種Arduino兼容板(例如Arduino UNO,NANO,Promini等)進行了測試。在本教程中,必須下載Johnny-Five庫才能使用其所有功能。安裝指南將在本教程的後面部分進行解釋。

3. 電路原理圖

電路圖非常基礎,我們只需要將LED與Arduino連接即可。

電路原理圖

4. 安裝Node.js框架

在開始編程和開發之前,必須下載並安裝Node.js。按照如下簡單步驟來下載安裝Node.js環境。

**步驟1:**從官方網站下載Node.js的.exe文件

**步驟2:**運行.exe並按照程序中給定的說明進行操作。

安裝Node.js

**步驟3:**按照Node.js文檔中的建議重新啓動計算機,並使用Node.js的所有功能。

步驟4:檢查Node.js是否安裝成功,打開命令提示符終端輸入Node -v

Node -v

**步驟5:**安裝成功將顯示Node.js的版本信息。

5. 安裝Johnny-Five庫

下載Node.js之後,創建一個名爲「LED_Control」的新文件夾,將所有項目文件保存在一個地方。每個項目文件都將保存在“ LED_Control ”文件夾中。現在,在「LED_Control」文件夾中下載Johnny-Five庫。要下載,請按照以下步驟操作:

**步驟1:**打開命令提示符終端。

**步驟2:**通過「 cd 」命令轉到「LED_Control」文件夾。

**步驟3:**運行命令「 npm install johnny-five」,這將安裝Johnny-Five的所有依賴項。

安裝Johnny-Five

**步驟4:**還需要安裝三個用於控制LED亮度的必要庫。

  • express:HTTP服務封裝庫。
  • socket.io:WebSockets庫。
  • serialport:串口封裝庫。

**步驟5:**逐行運行如下命令進行安裝。

npm install express
npm install socket.io
npm install serialport

安裝express

socket.io安裝

安裝serialport

6. 通過Node.js操作Arduino控制LED燈閃爍

  • 設置Arduino UNO 進行LED燈閃爍

爲了使Arduino UNO接受來自筆記本電腦的命令以控制LED,必須將Firmata固件加載到Arduino UNO中。要加載Firmata固件,只需執行以下簡單步驟:

  • 使用USB線連接 Arduino UNO
  • 打開 Arduino IDE,然後從工具中選擇Arduino UNO板(如果使用其他板,則選擇相應的一塊)
  • 選擇已連接的Arduino UNO的相應COM端口
  • 點擊菜單->文件->示例->固件-> StandardFirmata找到固件
  • 通過轉到文件->上傳,上傳「StandardFirmata」。

這會將Firmata Sketch加載到Arduino UNO上,現在Arduino UNO可以接受來自計算機的任何命令了。

  • 編寫Node.js程序

要編寫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);

現在要運行程序,請按照以下步驟操作:

  • 打開命令提示符終端
  • 通過執行cd命令找到「LED_Control」文件夾
  • 運行Node blink_led.js命令。如果成功執行,它將顯示“ LED已開始閃爍!”,如下圖所示。

運行blink_led

啓動程序

LED閃爍

7. 通過Arduino和Node.js從Web界面控制LED燈亮度

  • 設置Arduino UNO 控制LED亮度

上傳「arduino_control」程序,完整代碼見教程末尾。下面進行代碼分析。

首先,設置波特率爲9600。

Serial.begin(9600);

串口始終監測輸入字節,然後將接收到的字節寫入具有PWM功能的數字引腳5。

while(!Serial.available());
AnalogWrite(5, Serial.read());
  • 設置Web界面

爲了使用Web界面控制LED的亮度,編寫了一小段HTML代碼在瀏覽器中顯示一個界面。具體參照如下簡單步驟:

  • 在之前的「LED_Control」文件夾中新建「public」文件夾。

新建public文件夾

  • 下載「index.html」和「style.css」文件,放入「public」文件夾中,文件見教程末尾。

index和style

這將在網頁上創建一個滑塊,以使用Node.js和Arduino控制LED的亮度。

Web滑塊

  • 編寫Node.js程序

打開文本編輯器,粘貼教程末尾「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.");

現在按照如下步驟運行程序:

  • 打開命令提示符終端
  • 通過執行cd命令找到「LED_Control」文件夾
  • 運行Node brightness_control.js命令。如果成功執行,它將顯示“Web服務器已啓動,請在 瀏覽器中轉到” http:// localhost:8080 ”。

運行brightness_control

  • 在瀏覽器中輸入" localhost:8080"。
  • 移動滑塊改變亮度。

滑動控制

Web滑動

調節亮度

文中相關代碼及文件下載
鏈接:https://pan.baidu.com/s/1rQIWY2K3dc-9h1qV_7oQQA
提取碼:ewy8

關注微信公衆號:TonyCode
Arduino學習交流羣:868283450

更多內容,歡迎關注我的公衆號。 微信掃一掃下方二維碼即可關注:
掃碼加入微信公衆號:TonyCode

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章