Setelah kita mengetahui tentang Raspberry Pi termasuk cara Install Raspberry Pi. Kita akan coba membuat proyek pertama pengelola'an GPIO menggunakan Raspberry Pi. Proyek pertama ini adalah proyek blink. Jika anda sebelumnya pernah menggunakan Arduino, pasti sudah tidak asing lagi dengan proyek ini. Proyek blink seperti proyek menampilkan Hello World pada pemrograman untuk menampilkan text di layar.
Mengenal Pin Mapping RaspBerry Pi
Sebelum kita memulai program, ada baiknya kita mengetahui pin maping dari Raspberry Pi. Raspberry Pi secara umum memiliki pin header berjumlah 40 pin. Kecuali pada Raspberry Pi 1 Model B+ (2014) yang hanya memiliki 24 pin header. Pin header terdiri dari pin Voltage 5v dan 3.3v, Ground dan GPIO. Semua GPIO bisa di di fungsikan sebagai Input atau Output oleh program.
Seperti anda lihat di gambar di atas Pin 3.3V dan pin 5V ada pada posisi sejajar. Harap berhati-hati jangan sampai pin 5v dan 3.3v terjadi kontak, karena akan merusak raspberry Pi anda.
Fungsi Pin Tambahan
Jika anda pernah menggunakan papan Arduino, anda pasti pernah mengenal pin digital dan pin analog. Dan juga ada beberapa pin digital yang memiliki fungsi PWM (Pulse Width Modulation). Pada Raspberry Pi semua GPIO bisa di fungsikan sebagai PWM secara software, dan beberapa pin mendukung PWM secara hardware. Untuk sensor analog bisa menggunakan fungsi PWM tersebut. Berikut adalah beberapa pin spesial Raspberry Pi.
PWM (Pulse Width Modulation) |
- Software PWM tersedia pada semua Pin - PWM Hardware tersedia pada GPIO12, GPIO13, GPIO18, GPIO19 |
SPI (Serial Peripheral Interface) | - SPI0: MOSI (GPIO10); MISO (GPIO9); SCLK (GPIO11); CE0 (GPIO8), CE1 (GPIO7) - SPI1: MOSI (GPIO20); MISO (GPIO19); SCLK (GPIO21); CE0 (GPIO18); CE1 (GPIO17); CE2 (GPIO16) |
I2C (Inter Integrated Circuit) |
- Data: (GPIO2); Clock (GPIO3) - EEPROM Data: (GPIO0); EEPROM Clock (GPIO1) |
Serial | TX (GPIO14); RX (GPIO15) |
GPIO BCM dan GPIO Board
Pada Raspberry Pi, Pin bisa di definisikan dengan 2 cara yaitu mengunakan cara GPIO Board dan GPIO BCM.
GPIO BCM mengacu pada pin bawaan chip Broadcom SOC channel. Pada gambar diatas GPIO BCM dituliskan di dalam kotak diluar garis merah. Misal jika kita mendefinisikan pin 17, makan program akan menjalankan pada GPIO17.
Sedangkan GPIO Board mengacu pada penamaan di papan Raspberry Pi. 聽Pada gambar diatas dituliskan dalam lingaran berwarna hijau di dalam kotak merah. GPIO Board lebih mudah dalam mendefinisian pin, karena kita hanya tinggal menghitung jumlah pin. Misalnya jika pada GPIO BCM kita mendefinisikan Pin 17 untuk menjalankan GPIO17. Pada GPIO Board kita mendefinisikan pin tadi dengan pin 11.
Kita akan lebih mudah memahami tentang GPIO Board dan GPIO BCM setelah kita membuat program blink nanti.
Pinout
Jika anda ragu Pin maping Raspberry Pi anda, anda bisa melihat langsung skema pin dengan menggunakan perintah:
pinout
Ketikan perintah diatas setelah login SSH atau melalui terminal di Raspberry Pi anda. Contoh output untuk Raspberry Pi Zero adalah seperti gambar di bawah ini.
Proyek Blink
OK, setelah mengenal pin pada Raspberry Pi, selanjutnya mari kita membuat proyek pertama kita, yaitu proyek blink. Saat memasang kabel jumper ke pin header Raspberry Pi ataupun breadboard, di sarankan Raspberry Pi dalam keadaan off untuk menghindari short antar pin.
Persiapan
Berikut adalah beberapa alat yang harus di persiapkan.
- 1 Raspberry Pi model apa saja
- 1 Breadboard
- 2 Kabel Jumper Male to Female
- 1 Resistor 220 Ohm
- 1 Led
Setelah selesai silahkan rangkai pada breadboard anda dengan skema seperti pada gambar di bawah ini.
- GND atau negatif Led pada Pin 6 Raspberry Pi
- Positif ke pin 11 Raspberry Pi
Pada raspberry Pi, perintah gpio sudah include dengan sistem operasi Raspbian. Jadi kita bisa memprogram GPIO dengan berbagai bahasa pemrograman seperti python, java, C, php, bash atau bisa langsung menggunakan perintah. GPIO Raspberry Pi juga bisa di program dengan pemrograman Scratch yang merupakan bahasa pemrograman visual untuk belajar pemrograman secara mudah.
Perintah GPIO
Dengan perintah gpio, kita dengan mudah akan mengontrol pin baik input maupun output. Untuk cara penggunaan perintah gpio ketikan kode berikut.
man gpio
Untuk menyalakan LED, kita perlu memberikan signal High pada pin yang kita pilih, sedangkan untuk mematikan LED kita akan memberikan signal Low. Coba untuk mengetikan perintah berikut.
gpio -g mode 17 out
gpio -g write 17 1
Pada perintah di atas, seharusnya LED anda sudah menyala. Pada baris pertama 'gpio -g mode 17 out', opsi -g adalah opsi untuk mendefinisikan pin secara GPIO BCM seperti yang sudah di jelaskan sebelumnya, dalam hal ini kita menunjuk GPIO17 pada pin 11 agar menjalankan mode Output.
Pada baris kedua "gpio -g write 17 1", kita menuliskan signal di GPIO17 agar menjadi High, sehingga LED menyala.
Untuk mendefinisikan pin secara GPIO Board anda bisa menggunakan opsi -1, contohnya sebagai berikut.
gpio -1 write 11 0
dengan perintah diatas, seharusnya LED anda padam. Karena kita menulis pin 11 (atau GPIO17 pada BCM) low. Kita cukup mendefinisikan mode 1 kali saja. Sekali kita definisikan mode, selanjutnya modenya akan tetap sama sampai kita rubah kembali, atau sampai Raspberry Pi anda di restart.
Perintah gpio dilengkapi dengan opsi blink. Kita cukup mengetikan satu perintah agar membuat LED on dan off. Tekan CTRL+C untuk menghentikan perintah.
gpio -1 blink 11
Pada perintah diatas kita memerintahkan pin 11 (BCM) untuk blink, menyala 1 detik, mati 1 detik, dan seterusnya selama kita belum menekan CTRL+C.
Bash Script
Nah, karena Raspbian menyediakan perintah gpio, kita bisa memprogram menggunakan bahasa pemrograman dasar linux, yaitu Bash. Bash script merupakan script sederhana yang bisa membantu menjalankan perintah-perintah linux. Bash script semacam Batch file jika pada Sistem Operasi Windows.
Sebelum melanjutkan, kita perlu mengetahui path dari perintah gpio, agar kita tidak salah. Caranya dengan menggunakan perintah which.
which gpio
Output yang saya dapatkan untuk perintah gpio ada pada path /usr/bin/gpio. Sekarang ayo kita membuat bash scriptnya. Langkah pertama buat sebuah file misalnya blink.sh dengan perintah nano.
nano blink.sh
lalu isi dengan script berikut:
#!/bin/bash
while :
do
/usr/bin/gpio -1 toggle 11
sleep 1
done
Tekan CTRL+X dilanjutkan dengan konfirmasi dengan menekan tombol Y. Setelah itu buat script menjadi writable dengan perintah chmod.
chmod +x blink.sh
lalu jalankan programnya dengan perintah bash.
bash blink.sh
atau
./blink.sh
Seharusnya LED anda sudah blink. Pada program diatas akan menjalankan infinite loop atau loop yang tidak ada habisnya dengan menjalankan perintah gpio dengan opsi toggle di pin 11 GPIO Board. Opsi toggle adalah opsi untuk menuliskan kondisi sebaliknya. Jadi jika pin dalam keadaan Low, maka akan di tulis High, dan sebaliknya. Pada baris dengan program sleep 1, akan mendelay selama 1 detik sebelum program di lanjutkan.
Python
Python merupakah bahasa pemrograman utama Raspberry Pi. Jika anda mengikuti Cara Install Raspberry Pi pada artikel sebelumnya. Raspberry Pi sudah menyiapkan Python 2 dan Python 3 secara default. Jadi anda tidak perlu menginstalkannya lagi.
Python sangat kaya akan library, dalam percobaan kali ini kita akan mencoba menggunakan library yang berbeda, yakni library Rpi.GPIO dan gpiozero.
Library RPi.GPIO
Untuk membuat proyek blink dengan Library RPi.GPIO, kita membutuhkan module tambahan, yaitu time. Buat sebuah file dengan extensi .py dengan perintah nano, misalnya saya akan mebuat file blinkrpi.py.
nano blinkrpi.py
Isikan kode berikut:
import RPi.GPIO as GPIO
from time import sleep
GPIO.setwarnings(False)
GPIO.setmode(GPIO.BOARD)
GPIO.setup(11, GPIO.OUT, initial=GPIO.LOW)
while True:
GPIO.output(11, GPIO.HIGH)
sleep(1)
GPIO.output(11, GPIO.LOW)
sleep(1)
Simpan file dengan menekan CTRL+X dilanjutkan dengan menekan tombol Y. Jalankan program dengan perintah di bawah ini. Untuk menghentikan program tekan CTRL+C.
python blinkrpi.py
Jika tidak ada kesalahan, LED anda akan mulai berkedip. Pada program diatas akan menjalankan infinite loop menuliskan pin 11 (GPIO Board) menjadi high, berhenti selama 1 detik, lalu menuliskan pin 11 menjadi low dan berhenti 1 detik.
Untuk lebih memahami, silahkan anda coba rubah mode board menjadi BCM. Dengan BCM pin yang di tulis akan menjadi 17.
Library gpiozero
Gpiozero merupakan library dengan fungsi yang sangat lengkap. Raspberry sangat merekomendasikan menggunakan library ini. Dokumentasi tentang gpizero bisa anda temukan pada halaman https://gpiozero.readthedocs.io/en/stable/. Pada library ini secara default pin akan di definisikan dengan metode BCM. Tidak seperti pada RPi.GPIO library, gpizero tidak bisa di konfigurasi untuk penomoran pin. Namun jika anda familiar dengan GPIO Board, anda bisa menuliskannya langsung, contohnya seperti di bawah ini.
- led = LED(17) => Default BCM atau sama dengan BCM17.
- led = LED("GPIO17") 聽=> Sama dengan BCM17.
- led = LED("BCM17") 聽=> Sama dengan diatas.
- led = LED("BOARD11") = Mendefinisikan pin dengan nomor 11 format GPIO Board.
Gpiozero di optimalkan untuk python3, walaupun bisa berjalan di python2, belum tentu bisa berjalan semua fungsinya. Dalam percobaan kali ini kita akan menggunakan python3.
OK, kita coba membuat proyek blink dengan library gpiozero. Buat sebuah file dengan extensi .py, misalnya blinkzero.py dengan perintah nano. Lalu isikan program berikut.
from gpiozero import LED
from time import sleep
led = LED(17)
while True:
led.on()
sleep(1)
led.off()
sleep(1)
Setelah selesai simpan program, lalu jalankan dengan perinyah berikut.
python3 blinkzero.py
LED anda seharuanya sudah berkedap kedip. Jika anda lihat, gpizero lebih mudah dan lebih simple. Pada program diatas sama seperti program sebelumnya yang menjalankan infinite loop dengan sleep. Namun anda bisa memprogram dengan cara lain. Library gpiozero dengan fungsi LED sudah di lengkapi dengan fungsi blink. Program diatas bisa digantikan seperti di bawah ini, yang lebih pendek dan lebih ringkas.
from gpiozero import LED
from signal import pause
led = LED(17)
led.blink()
pause()
Program diatas tidak menggunakan loop, namun menggunakan fungsi pause() dari library signal. Ini akan sama saja dengan infinite loop, namun lebih pendek.
Jika anda ingin menggunakan metode GPIO Board, anda hanya perlu merubah baris led = LED(17) menjadi led = LED(BOARD17)
Lebih mudah bukan?.
Kesimpulan
Dari percobaan diatas bisa kita simpulkan bahwa pengelolaan GPIO pada Raspberry Pi tidak terlalu sulit. Pemahaman metode penomoran pin harus menjadi prioritas. Anda harus menentukan yang mana dari GPIO Board dan GPIO BCM yang mudah di gunakan menurut anda agar lebih familiar.
Pengelolaan pin bisa menggunakan berbagai bahasa pemrograman. Kita tidak terlalu terpaku harus menggunakan Python. Pada artikel selanjutnya kita akan coba menggunakan bahasa pemrograman PHP untuk mengontrol LED menggunakan website.