Node.js Raspberry Pi GPIO - LED dan Tombol Tekan
Menggunakan Input dan Output
Pada bab sebelumnya kita telah mempelajari cara menggunakan Raspberry Pi dan GPIO-nya untuk membuat LED berkedip.
Untuk itu kami menggunakan pin GPIO sebagai "Output".
Dalam bab ini kita akan menggunakan pin GPIO lain sebagai "Input".
Alih-alih berkedip selama 5 detik, kami ingin LED menyala saat Anda menekan tombol yang terhubung ke papan tempat memotong roti.
Apa yang kita butuhkan?
Dalam bab ini kita akan membuat contoh sederhana di mana kita mengontrol lampu LED dengan Push Button.
Untuk ini, Anda perlu:
- Raspberry Pi dengan Raspian, internet, SSH, dengan Node.js terinstal
- Modul aktif untuk Node.js
- 1 x papan tempat memotong roti
- 1x68 Ohm resistor
- 1x1k Ohm resistor
- 1 x Melalui Lubang LED
- 1 x Tombol Tekan
- 4 x Kabel jumper wanita ke pria
- 1 x Kabel jumper Pria ke Pria
Klik tautan dalam daftar di atas untuk deskripsi berbagai komponen.
Catatan: Resistor yang Anda butuhkan dapat berbeda dari yang kami gunakan tergantung pada jenis LED yang Anda gunakan. Kebanyakan LED kecil hanya membutuhkan resistor kecil, sekitar 200-500 ohm. Umumnya tidak penting nilai pasti yang Anda gunakan, tetapi semakin kecil nilai resistor, semakin terang LED akan bersinar.
Dalam bab ini kita akan membangun sirkuit yang kita buat di bab terakhir, jadi Anda akan mengenali beberapa bagian dalam daftar di atas.
Membangun Sirkuit
Sekarang saatnya untuk membangun sirkuit di Breadboard kita. Kami akan menggunakan sirkuit yang kami buat di bab terakhir sebagai titik awal.
Jika Anda baru mengenal elektronik, kami sarankan Anda mematikan daya untuk Raspberry Pi. Dan gunakan alas anti-statis atau tali pengikat untuk menghindari kerusakan.
Matikan Raspberry Pi dengan benar dengan perintah:
pi@w3demopi:~ $ sudo shutdown -h now
Setelah LED berhenti berkedip pada Raspberry Pi, kemudian cabut steker listrik dari Raspberry Pi (atau putar soket ekstensi yang terhubung).
Hanya mencabut steker tanpa mematikan dengan benar dapat menyebabkan kerusakan pada kartu memori.
Perhatikan ilustrasi rangkaian di atas.
- 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) - 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
- 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
- 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
- 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
- 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)
- 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
.