Node.js Raspberry Pi GPIO - Đèn LED chảy
Sử dụng mảng có đầu ra để tạo đèn LED chạy
Trong chương này, chúng ta sẽ sử dụng một số chân GPIO để tạo hiệu ứng "chảy" bằng cách bật và tắt chúng theo trình tự.
Chúng ta cần gì?
Đối với điều này bạn cần:
- Một Raspberry Pi có Raspian, internet, SSH, đã cài đặt Node.js
- Mô-đun bật tắt cho Node.js
- 1 x Bảng mạch
- Điện trở 8 x 220 Ohm
- 8 x đèn LED xuyên lỗ
- 9 x dây nhảy từ nữ sang nam
Lưu ý: Điện trở bạn cần có thể khác với điện trở chúng tôi sử dụng tùy thuộc vào loại đèn LED bạn sử dụng. Hầu hết các đèn LED nhỏ chỉ cần một điện trở nhỏ, khoảng 200-500 ohm. Nói chung, giá trị chính xác bạn sử dụng không quan trọng, nhưng giá trị của điện trở càng nhỏ thì đèn LED sẽ càng sáng.
Nhấp vào các liên kết trong danh sách ở trên để xem mô tả về các thành phần khác nhau.
Xây dựng mạch
Bây giờ là lúc xây dựng mạch trên Breadboard của chúng ta.
Nếu bạn chưa quen với thiết bị điện tử, chúng tôi khuyên bạn nên tắt nguồn cho Raspberry Pi. Và sử dụng thảm chống tĩnh điện hoặc dây nối đất để tránh làm hỏng nó.
Tắt Raspberry Pi đúng cách bằng lệnh:
pi@w3demopi:~ $ sudo shutdown -h now
Sau khi đèn LED ngừng nhấp nháy trên Raspberry Pi, hãy rút phích cắm nguồn ra khỏi Raspberry Pi (hoặc tắt dải nguồn mà nó được kết nối).
Chỉ cần rút phích cắm mà không tắt đúng cách có thể gây hỏng thẻ nhớ.
Nhìn vào hình minh họa ở trên của mạch.
- Trên Raspberry Pi, kết nối chân cái của dây nhảy với chân GND . Trong ví dụ của chúng tôi, chúng tôi đã sử dụng Chân vật lý 6 ( GND , hàng 3, cột bên phải)
- Trên Breadboard, nối chân đực của dây nhảy nối với nguồn GND , với Ground Bus ở phía bên phải. Toàn bộ cột của bảng mạch của bạn được kết nối, do đó, hàng nào không quan trọng. Trong ví dụ của chúng tôi, chúng tôi đã đính kèm nó vào hàng 1
- Đối với mỗi đèn LED: Nối đèn LED sao cho nối vào 2 hàng Tie-Point. Trong ví dụ của chúng tôi, chúng tôi đã kết nối:
- LED1 tới hàng 5 (cực âm) & cột 6 (cực dương) J
- LED2 đến hàng 8 (cực âm) & cột 9 (cực dương) J
- LED3 đến hàng 11 (cực âm) & cột 12 (cực dương) J
- LED4 đến hàng 14 (cực âm) & cột 15 (cực dương) J
- LED5 đến hàng 17 (cực âm) & cột 18 (cực dương) J
- LED6 đến hàng 20 (cực âm) & 21 (cực dương) cột J
- LED7 đến hàng 23 (cực âm) & 24 (cực dương) cột J
- LED8 đến hàng 26 (cực âm) & 27 (cực dương) cột J
- Đối với mỗi đèn LED: Kết nối một trong các chân của điện trở 220 ohm từ cột Ground Bus ở bên phải và chân còn lại với hàng Tie-Point bên phải nơi nó kết nối với chân cực âm của đèn LED. Trong ví dụ của chúng tôi, chúng tôi đã kết nối:
- LED1 đến hàng 5 cột I
- LED2 đến hàng 8 cột I
- LED3 đến hàng 11 cột I
- LED4 đến hàng 14 cột I
- LED5 đến hàng 17 cột I
- LED6 đến hàng 20 cột I
- LED7 đến hàng 23 cột I
- LED8 tới hàng 26 cột I
- Đối với mỗi đèn LED: Kết nối chân cái của dây nhảy với chân GPIO trên Raspberry Pi và chân đực của dây nhảy với hàng Tie-Point bên phải nơi nó kết nối với chân cực dương của đèn LED. Trong ví dụ của chúng tôi, chúng tôi đã kết nối:
- LED1 từ Chân vật lý 7 ( GPIO 4 , hàng 4, cột bên trái) đến Điểm liên kết hàng 6 cột F
- LED2 từ Chân vật lý 11 ( GPIO 17 , hàng 6, cột bên trái) đến Điểm liên kết hàng 9 cột F
- LED3 từ Chân vật lý 13 ( GPIO 27 , hàng 7, cột bên trái) đến Tie-point hàng 12 cột F
- LED4 từ Chân vật lý 15 ( GPIO 22 , hàng 8, cột bên trái) đến Điểm liên kết hàng 15 cột F
- LED5 từ Chân vật lý 12 ( GPIO 18 , hàng 6, cột bên phải) đến Tie-point hàng 18 cột F
- LED6 từ Chân vật lý 16 ( GPIO 23 , hàng 8, cột bên phải) đến Điểm liên kết hàng 21 cột F
- LED7 từ Chân vật lý 18 ( GPIO 24 , hàng 9, cột bên phải) đến Điểm liên kết hàng 24 cột F
- LED8 từ Chân vật lý 22 ( GPIO 25 , hàng 11, cột bên phải) đến Tie-point hàng 27 cột F
Mạch của bạn bây giờ đã hoàn tất và các kết nối của bạn sẽ trông khá giống với hình minh họa ở trên.
Bây giờ là lúc khởi động Raspberry Pi và viết tập lệnh Node.js để tương tác với nó.
Tập lệnh đèn LED chạy của Raspberry Pi và Node.js
Chuyển đến thư mục "nodetest" và tạo một tệp mới có tên " flowingleds.js
":
pi@w3demopi:~ $ nano
flowingleds.js
Tệp hiện đã mở và có thể được chỉnh sửa bằng Nano Editor tích hợp.
Viết hoặc dán nội dung sau:
flowleds.js
var Gpio = require('onoff').Gpio; //include onoff to interact with the GPIO
var LED04 = new Gpio(4, 'out'), //use declare variables for all the GPIO
output pins
LED17 = new Gpio(17, 'out'),
LED27 = new Gpio(27,
'out'),
LED22 = new Gpio(22, 'out'),
LED18 = new Gpio(18,
'out'),
LED23 = new Gpio(23, 'out'),
LED24 = new Gpio(24,
'out'),
LED25 = new Gpio(25, 'out');
//Put all the LED
variables in an array
var leds = [LED04,
LED17, LED27, LED22, LED18, LED23, LED24, LED25];
var indexCount = 0; //a
counter
dir = "up"; //variable for flowing direction
var
flowInterval = setInterval(flowingLeds, 100); //run the flowingLeds function
every 100ms
function flowingLeds() { //function for flowing Leds
leds.forEach(function(currentValue) { //for each item in array
currentValue.writeSync(0); //turn off LED
});
if (indexCount
== 0) dir = "up"; //set flow direction to "up" if the count reaches zero
if (indexCount >= leds.length) dir = "down"; //set flow direction to "down" if
the count reaches 7
if (dir == "down") indexCount--; //count
downwards if direction is down
leds[indexCount].writeSync(1);
//turn on LED that where array index matches count
if (dir ==
"up") indexCount++ //count upwards if direction is up
};
function unexportOnClose() {
//function to run when exiting program
clearInterval(flowInterval);
//stop flow interwal
leds.forEach(function(currentValue) { //for
each LED
currentValue.writeSync(0); //turn off LED
currentValue.unexport(); //unexport GPIO
});
};
process.on('SIGINT', unexportOnClose); //function to
run when user closes using ctrl+cc
Nhấn " Ctrl+x
" để lưu mã. Xác nhận bằng " y
" và xác nhận tên bằng " Enter
".
Chạy mã:
pi@w3demopi:~ $ node flowingleds.js
Bây giờ các đèn LED sẽ bật và tắt theo trình tự, tạo hiệu ứng chảy.
Kết thúc chương trình bằng Ctrl+c
.