Contents
Setelah sebelumnya kita belajar menghidupkan dan mematikan LED dengan Raspberry Pi, di tutorial kali ini kita akan mencoba belajar bagaimana mendeteksi tombol menggunakan bahasa pemrograman Python. Mungkin sedikit saya refresh tentang konsep pemrograman low level dengan Raspberry Pi bahwa ketika kita on/off LED kita sedang MENGELUARKAN tegangan digital (biner) di pin Raspberry Pi ke beban, sedangkan saat mendeteksi tombol dengan Raspi, kita sedang MENGAMBIL data (dalam bentuk tegangan digital 0 atau 1) melalui pin Raspberry Pi. Rentang tegangan digital untuk Raspberry Pi adalah 0V untuk logic ‘LOW’ dan 3.3V untuk logic ‘HIGH’, sama dengan NodeMCU dan berbeda dengan Arduino (0 dan 5V).
Setelah mengetahui konsepnya marilah kita belajar mendeteksi tombol dengan Raspberry Pi dengan bantuan modul Basic Trainer Kit buatan startup Indomaker ini. Mari kita cek dulu letak tombol di modul ini dan bagaimana gambar rangkaiannya.
Letak tombol ada di sini
Dan gambar rangkaiannya seperti ini
Perhatikan bahwa desain rangkaian akan mengeluarkan logic 0 (ACTIVE LOW) ketika tombol ditekan dan logic ‘1’ (HIGH) ketika terbuka/tidak ditekan. Yuk mari kita coba saja percobaannya 🙂
PERCOBAAN 1 : Mendeteksi Tombol dengan Raspberry Pi dan Python
Alat dan bahan yang dibutuhkan untuk percobaan yang pertama ini adalah:
- Papan modul Basic Trainer Kit
- kabel jumper female to female 4 pcs (kelengkapan kit)
- power supply 12V (kelengkapan kit)
- laptop/komputer
- koneksi WIFI (bisa menggunakan smartphone Anda)
- aplikasi Putty (teminal client) dan Notepad++ dan plugin NppFtp (software editing+FTP)
Hubungkan kabel jumper di bawah tombol (tactile switch) ke Vcc (3.3V), pin 3 Raspberry Pi (GPIO2) dan GND
Gambar rangkaian untuk percobaan di atas adalah sebagai berikut
Catatan: Pastikan semua tegangan yang berhubungan dengan GPIO Raspberry Pi maksimal 3.3V, kalau tidak dapat merusak Raspi Anda
Kemudian buka aplikasi Notepad++ Anda, dan tulis script Python sebagai berikut:
from gpiozero import Button button = Button(2) button.wait_for_press() print('tombol ditekan')
Simpan file di atas dengan nama “tombol.py” dan pastikan file sudah otomatis tersimpan di Raspberry Pi Anda melalui protokol SFTP. Jika belum bisa tersimpan di Raspi, silahkan pelajari caranya di artikel “persiapan Raspberry Pi“.
Penjelasan program:
- Baris [1]: memanggil library bawaan Raspi untuk menangani GPIO yakni library gpiozero dan mengimport class khusus untuk menangani digital input yakni class ‘Button
- Baris [2]: mendefinisikan digital input (tombol) di pin GPIO2 sesuai gambar rangkaian
- Baris [4]: built in function untuk menunggu perubahan status di pin tombol (GPIO2)
- Baris [5]: jika tombol terdeteksi ditekan (Active LOW) maka tampilkan tulisan ‘tombol ditekan’
Buka aplikasi Putty, dan jalankan script di atas dengan memanggil perintah “python tombol.py”. Untuk settingan Putty agar dapat terhubung dengan Raspberry dapat dibaca di artikel “Putty Raspberry Pi“.
Tekan tombol di papan modul Basic Trainer Kit, dan perhatikan di layar Putty Anda, seharusnya ada tulisan ‘tombol ditekan’ yang merupakan hasil pendeteksian tombol dengan Raspberry Pi dengan program Python.
Sampai tahap ini sudah paham kan, teknik dasar cara pendeteksian tombol dengan Raspberry Pi 3/4 ? Untuk mengasah skill Anda, mari kita lanjutkan dengan percobaan selanjutnya
PERCOBAAN 2 : Menghidupkan LED berdasarkan Penekanan Tombol
Untuk keperluan percobaan 2 ini, silahkan jumper pin header L1 ke pin 12 Raspi (GPIO18). Pin L1 ini terhubung ke kaki anoda LED-1, jadi untuk menghidupkan LED tersebut cukup kita kirim logic ‘1’ ke pin GPIO18. Berikut script-nya
from gpiozero import LED, Button from time import sleep led = LED(18) button = Button(2) button.wait_for_press() led.on() sleep(1) led.off()
Simpan kode program di atas dengan nama “tombolled.py” (Notepad++) dan eksekusi dengan perintah “python tombolled.py” (Putty)
Gambar rangkaian percobaan 2 adalah sebagai berikut:
Sekarang tekan tombol, maka seharusnya Led-1 akan menyala dan satu detik (baris 8) kemudian akan mati (baris 10).
Gimana? sudah semakin paham kan?
PERCOBAAN 3: Mendeteksi Event Tombol
Dalam pemrograman berbasis OOP (Object Oriented Program), diperkenalkan teknik/handling ‘event’, yakni proses menunggu suatu ‘kejadian’ daripada harus melakukan looping yang mengakibatkan blocking pada program. Dengan melakukan handling ‘event’ ini program Anda bisa lebih simpel dan dapat di-manage lebih mudah (non blocking).
Jika Anda perhatikan dalam percobaan 1 dan 2, kita menunggu tombol ditekan kemudian program akan berakhir. Bagaimana jika pendeteksian tombol tersebut berada di sebuah program besar yang task-nya ada banyak? tentu kita tidak bisa menggunakan teknik looping bukan, karena program dapat ‘terjebak’ dalam looping dan tidak dapat mengerjakan task lain. Solusinya adalah menggunakan teknik event. Berikut adalah contoh scriptnya dalam Python: (gambar rangkaian masih sama dengan percobaan 2)
from gpiozero import LED, Button from signal import pause led = LED(18) button = Button(2) button.when_pressed = led.on button.when_released = led.off pause()
Simpan program di atas dengan nama “tombolevent.py” (melalui Notepad++) dan jalankan dengan perintah “python tombolevent.py” melalui Putty.
Sekarang coba tekan tombol di papan modul dan perhatikan nyala LED-1. Tiap Anda tekan tombol, maka LED-1 akan nyala dan tiap tombol dilepas LED akan padam. Berikut penjelasan lengkap program di atas:
Penjelasan program
- Baris [1]: memanggil built-in library Raspi untuk handling GPIO sekaligus memanggil class “LED” untuk fungsi-fungsi output dan kelas ‘BUTTON’ untuk fungsi-fungsi input
- Baris [2]: memanggil built-in library ‘signal’ untuk handling internal non blocking looping
- Baris [4]: mendefinisikan pin GPIO18 sebagai digital output (terhubung dengan Led-1)
- Baris [5]: mendefinisikan pin GPIO2 sebagai digital input (terhubung dengan tombol)
- Baris [7]: mendefinisikan event saat tombol ditekan. Dalam hal ini adalah dengan menyalakan led (led.on)
- Baris [8]: mendefinisikan event saat tombol dilepas. Dalam hal ini adalah dengan mematikan led (led.off)
- Baris [10]: memanggil function ‘pause’ yakni non blocking loop di python
Demikian percobaan kali ini, sebagai summary, keuntungan menggunakan rangkaian ACTIVE LOW untuk mendeteksi tombol adalah untuk mengurangi kesalahan pendeteksian yang keliru terhadap level tegangan digital dan untuk mengurangi resiko bouncing ketika tombol ditekan. Pada pendeteksian tombol sebaiknya menggunakan teknik handling EVENT untuk menghindari blocking looping.
Seluruh percobaan di atas sudah saya videokan. Semoga dapat membantu pemahaman Anda tentang teknik pendeteksian tombol di Raspberry Pi 3/4 menggunakan Python
Modul Basic Trainer Kit adalah modul pembelajaran kendali elektronika yang didesain untuk memudahkan pemahaman tentang kendali digital. Tutorialnya disusun secara bertahap, dan harganya terjangkau. Controllernya pun bisa diganti-ganti, bisa pakai Raspi, Orange Pi, Raspberry Pi Pico, Arduino Uno, dan NodeMCU. Semua tutorialnya ada dan lengkap baik tulisan dan video. Jika tertarik Anda bisa membelinya di sini
a Technopreneur – writer – Enthusiastic about learning AI, IoT, Robotics, Raspberry Pi, Arduino, ESP8266, Delphi, Python, Javascript, PHP, etc. Founder of startup Indomaker.com