Node.js Raspberry Pi GPIO - LED và nút nhấn


Sử dụng cả Đầu vào và Đầu ra

Trong chương trước, chúng ta đã học cách sử dụng Raspberry Pi và GPIO của nó để tạo đèn LED nhấp nháy.

Đối với điều đó, chúng tôi đã sử dụng chân GPIO làm "Đầu ra".

Trong chương này, chúng ta sẽ sử dụng một chân GPIO khác làm "Đầu vào".

Thay vì nhấp nháy trong 5 giây, chúng tôi muốn đèn LED sáng khi bạn nhấn một nút được kết nối với breadboard.


Chúng ta cần gì?

Trong chương này, chúng ta sẽ tạo một ví dụ đơn giản, trong đó chúng ta điều khiển đèn LED bằng Nút ấn.

Đối với điều này, bạn cần:

Nhấp vào liên kết trong danh sách ở trên để xem mô tả về các thành phần khác nhau.

Lưu ý: Điện trở bạn cần có thể khác với những gì 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 không quan trọng giá trị chính xác mà bạn sử dụng, nhưng giá trị của điện trở càng nhỏ thì đèn LED sẽ càng sáng.

Trong chương này, chúng ta sẽ xây dựng trên mạch mà chúng ta đã xây dựng trong chương trước, vì vậy bạn sẽ nhận ra một số bộ phận trong danh sách trên.


Xây dựng mạch

Bây giờ đã đến lúc xây dựng mạch trên Breadboard của chúng tôi. Chúng tôi sẽ sử dụng mạch mà chúng tôi đã tạo trong chương trước làm điểm khởi đầu.

Nếu bạn là người mới sử dụng 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 đeo tiếp đất để tránh làm hỏng thiết bị.

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 ra khỏi Raspberry Pi (hoặc vặn dải nguồn mà nó được kết nối).

Chỉ rút phích cắm mà không tắt đúng cách có thể làm hỏng thẻ nhớ.

Raspberry Pi 3 với Breadboard.  LED và nút mạch

Nhìn vào hình minh họa trên của mạch.

  1. Starting with the circuit we created in the last chapter:
    On the Raspberry Pi, connect the female leg of a jumper wire to a 5V power pin. In our example we used Physical Pin 2 (5V, row 1, right column)
  2. On the Breadboard, connect the male leg of the jumper wire connected to the 5V power, to the Power Bus on the right side. That entire column of your breadboard is connected, so it doesn't matter which row. In our example we attached it to row 1
  3. On the Breadboard, connect the push button so that it fits across the Trench. In our example it connects to rows 13 and 15, columns E and F
  4. On the Breadboard, connect one leg of the 1k ohm resistor to the Ground Bus column on the right side, and the other leg to the right side Tie-Point row where it connects to one of the right side legs of the push button. In our example we attached one side to Tie-Point row 13, column J, and the other side to the closest Ground Bus hole
  5. On the Breadboard, connect a male-to-male jumper wire from the right Power Bus, to the right Tie-Point row that connects to the other leg of the push button. In our example we attached one side to Tie-Point row 15, column J, and the other side to the closest Power Bus hole
  6. On the Raspberry Pi, connect the female leg of a jumper wire to a GPIO pin. In our example we used Physical Pin 11 (GPIO 17, row 6, left column)
  7. On the Breadboard, connect the male leg of the jumper wire to left Tie-Point row the Push Button leg that is directly across the Ground connection leg.  In our example we attached it to row 13, column A

Your circuit should now be complete, and your connections should look pretty similar to the illustration above.

Now it is time to boot up the Raspberry Pi, and write the Node.js script to interact with it.



Raspberry Pi and Node.js LED and Button Script

Go to the "nodetest" directory, and create a new file called "buttonled.js":

pi@w3demopi:~ $ nano buttonled.js

The file is now open and can be edited with the built in Nano Editor.

Write, or paste the following:

buttonled.js

var Gpio = require('onoff').Gpio; //include onoff to interact with the GPIO
var LED = new Gpio(4, 'out'); //use GPIO pin 4 as output
var pushButton = new Gpio(17, 'in', 'both'); //use GPIO pin 17 as input, and 'both' button presses, and releases should be handled

pushButton.watch(function (err, value) { //Watch for hardware interrupts on pushButton GPIO, specify callback function
  if (err) { //if an error
    console.error('There was an error', err); //output error message to console
  return;
  }
  LED.writeSync(value); //turn LED on or off depending on the button state (0 or 1)
});

function unexportOnClose() { //function to run when exiting program
  LED.writeSync(0); // Turn LED off
  LED.unexport(); // Unexport LED GPIO to free resources
  pushButton.unexport(); // Unexport Button GPIO to free resources
};

process.on('SIGINT', unexportOnClose); //function to run when user closes using ctrl+c

Press "Ctrl+x" to save the code. Confirm with "y", and confirm the name with "Enter".

Run the code:

pi@w3demopi:~ $ node buttonled.js

Now the LED should turn on when you press the button, and turn off when you release it.

End the program with Ctrl+c.