作者: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並按照程序中給定的說明進行操作。
**步驟3:**按照Node.js文檔中的建議重新啓動計算機,並使用Node.js的所有功能。
步驟4:檢查Node.js是否安裝成功,打開命令提示符終端輸入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的所有依賴項。
**步驟4:**還需要安裝三個用於控制LED亮度的必要庫。
- express:HTTP服務封裝庫。
- socket.io:WebSockets庫。
- serialport:串口封裝庫。
**步驟5:**逐行運行如下命令進行安裝。
npm install express
npm install socket.io
npm install 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已開始閃爍!”,如下圖所示。
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」文件夾。
- 下載「index.html」和「style.css」文件,放入「public」文件夾中,文件見教程末尾。
這將在網頁上創建一個滑塊,以使用Node.js和Arduino控制LED的亮度。
- 編寫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 ”。
- 在瀏覽器中輸入" localhost:8080"。
- 移動滑塊改變亮度。
文中相關代碼及文件下載
鏈接:https://pan.baidu.com/s/1rQIWY2K3dc-9h1qV_7oQQA
提取碼:ewy8
關注微信公衆號:TonyCode
Arduino學習交流羣:868283450
更多內容,歡迎關注我的公衆號。 微信掃一掃下方二維碼即可關注: