Node.js: Node.js Raspberry Pi GPIO - Đèn LED và hiệu ứng dòng chảy

Sử dụng mảng với đầ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 "dòng chảy" bằng cách bật và tắt chúng theo trình tự.
Vậy chúng ta cần gì?
Đẻ làm được điều này, bạn cần:
- Raspberry Pi với Raspian, internet, SSH, đã cài đặt Node.js
- Mô-đun bật tắt cho Node.js
- Breaboard (x1)
- Điện trở 220 Ohm (x8)
- Đèn LED xuyên lỗ (x8)
- Dây cắm có hai đầu (đầu đực - đầu cái) (x9)
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 ohms. Nói chung, giá trị chính xác mà 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 càng sáng.
Xây dựng mạch
Bây giờ là lúc để xây dựng mạch trên Breadboard. Có một lời khuyên dành cho bạn là nếu bạn chưa quen với thiết bị điện tử thì bạn nên tắt nguồn 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:
Sau khi đèn LED ngừng nhấp nháy trên Raspberry Pi, rút phích cắm nguồn khỏi Raspberry Pi (hoặc vặn dải nguồn mà nó được kết nối).
Lưu ý: Chỉ 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 với chân GND. Trong ví dụ này, ta sẽ 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 nối với nguồn GND, với Ground Bus ở phía bên phải. Toàn bộ cột trong bảng mạch khung của bạn được kết nối với nhau, vì vậy hàng nào không quan trọng. Trong ví dụ này, chúng ta sẽ đính kèm nó vào hàng 1
- Đối với mỗi đèn LED: Nối đèn LED sao cho nối thành 2 hàng Tie-Point. Trong ví dụ của chúng tôi, chúng tôi đã kết nối:
1. LED1 đến hàng 5 (cực âm) & 6 (cực dương) cột J
2. LED2 đến hàng 8 (cực âm) & 9 (cực dương) cột J
3. LED3 đến hàng 11 (cực âm) & 12 (cực dương) cột J
4. LED4 đến hàng 14 (cực âm) & 15 (cực dương) cột J
5. LED5 đến hàng 17 (cực âm) & 18 (cực dương) cột J
6. LED6 đến hàng 20 (cực âm) & 21 (cực dương) cột J
7. LED7 đến hàng 23 (cực âm) & 24 (cực dương) cột J
8. 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ụ này, ta sẽ kết nối:
1. LED1 đến hàng 5 cột I
2. LED2 đến hàng 8 cột I
3. LED3 đến hàng 11 cột I
4. LED4 đến hàng 14 cột I
5. LED5 đến hàng 17 cột I
6. LED6 đến hàng 20 cột I
7. LED7 đến hàng 23 cột I
8. LED8 đến 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 với chân GPIO trên Raspberry Pi và chân đực của dâ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ụ này, ta sẽ kết nối:
1. LED1 từ Chân vật lý 7 (GPIO 4, hàng 4, cột bên trái) đến Điểm nối hàng 6 cột F
2. LED2 từ Chân vật lý 11 (GPIO 17, hàng 6, cột bên trái) đến Tie-point hàng 9 cột F
3. LED3 từ Chân vật lý 13 (GPIO 27, hàng 7, cột bên trái) đến Điểm nối hàng 12 cột F
4. LED4 từ Chân vật lý 15 (GPIO 22, hàng 8, cột bên trái) đến Điểm nối hàng 15 cột F
5. LED5 từ Chân vật lý 12 (GPIO 18, hàng 6, cột bên phải) đến Điểm nối hàng 18 cột F
6. LED6 từ Chân vật lý 16 (GPIO 23, hàng 8, cột bên phải) đến Điểm nối hàng 21 cột F
7. LED7 từ Chân vật lý 18 (GPIO 24, hàng 9, cột bên phải) đến Điểm nối hàng 24 cột F
8. LED8 từ Chân vật lý 22 (GPIO 25, hàng 11, cột bên phải) đến Điểm nối hàng 27 cột F
Bây giờ mạch của bạn đã 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ó.
Raspberry Pi và Node.js - Hiệu ứng "dòng chảy" (đoạn mã lệnh)
Chuyển đến thư mục "nodetest" và tạo một tệp mới có tên "flowingleds.js":
Tệp hiện đang mở và có thể được chỉnh sửa bằng Trình chỉnh sửa Nano tích hợp sẵn.
Viết hoặc dán đoạn mã sau:
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ã:
Bây giờ các đèn LED sẽ bật và tắt theo trình tự, tạo hiệu ứng "dòng chảy".
Kết thúc chương trình bằng Ctrl+c.