Arduino Mikro

Cara Membuat Projek GPIO Raspberry Pi Blink


Sebelumnya telah dibahas Apa Itu Raspberry Pi? dan termasuk Tutorial Bagaimana Cara Install Raspberry Pi. Sekarang mari mencoba cara membuat projek pengelolaan GPIO menggunakan Raspberry Pi. Adapun projek GPIO Raspberry Pi ini adalah projek blink. Apabila kalian sebelumnya sudah pernah membaca Pengenalan Tentang Arduino atau sudah pernah menggunakan Mikrokontroller Arduino, pastinya sudah sangat tidak asing lagi dengan projek ini. Jadi, projek blink ini seperti halnya projek menampilkan kalimat "Hello World" pada pemrograman untuk menampilkan text di layar display.

1. Mengetahui Pin Mapping RaspBerry Pi
Yang perlu diperhatikan sebelum memulai program, alangkah baiknya kita mengetahui pin maping dari Raspberry Pi. Pin mapping Raspberry Pi ini secara umum mempunyai pin header berjumlah 40 pin. Terkecuali khusus pada Raspberry Pi 1 Model B+ (2014) yang hanya mempunyai 24 pin header. Yang mana pin header ini terdiri dari pin tegangan 5v dan 3.3v, Ground dan GPIO. Dan dari semua GPIO Raspberry Pi dapat difungsikan sebagai Input atau Output oleh program.

Raspberry Pi Header Pin

Jika kalian melihat gambar diatas, Pin tegangan 3.3V dan pin tegangan 5V berada pada posisi sejajar. Jadi harap sangat berhati-hati jangan sampai pin tegangan 5v dan tegangan 3.3v terjadi kontak langsung, hal ini karena akan merusak raspberry Pi kalian.

1.1. Fungsi Pin Tambahan Pada GPIO
Apabila kalian pernah menggunakan papan Mikrokontroller Arduino, pastinya pernah mengenal pin digital dan pin analog. Yang mana ada beberapa pin digital yang mempunyai fungsi sebagai PWM (Pulse Width Modulation). Dan pada Raspberry Pi semua GPIO dapat digunakan sebagai PWM secara software, serta beberapa pin yang mendukung PWM secara hardware. Sehingga untuk sensor analog dapat menggunakan fungsi PWM tersebut. Adapun PWM merupakan teknik menghasilkan signal analog dengan metode digital. Berikut ini adalah keterangan 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)
SerialTX (GPIO14); RX (GPIO15)
1.2. GPIO BCM dan GPIO Board
Pada papan Raspberry Pi, Pin dapat didefinisikan dengan 2 cara yaitu menggunakan cara GPIO Board dan GPIO BCM.



Pin Raspberry Pi dengan 26 Pin

Untuk GPIO BCM mengacu pada pin bawaan chip Broadcom SOC channel. Keterangan pada contoh gambar diatas GPIO BCM dituliskan didalam kotak diluar garis merah. Sebagai contoh apabila akan mendefinisikan pin 17, maka program akan menjalankan pada GPIO17.

Sedangkan untuk GPIO Board mengacu pada penamaan pada papan Raspberry Pi. Terlihat pada gambar diatas dituliskan dalam lingkaran berwarna hijau didalam kotak merah. Untuk GPIO Board lebih mudah dalam mendefinisikan pin, hal ini karena cukup hanya menghitung jumlah pin. Sebagai contoh misalnya apabila pada GPIO BCM kita mendefinisikan Pin 17 untuk menjalankan GPIO17. Maka pada GPIO Board didefinisikan pin tadi dengan pin 11.

Kalian akan lebih mudah memahami tentang GPIO Board dan GPIO BCM apabila setelah membuat program blink nanti.

1.3. Skema Pinout
Jika anda ragu Pin maping Raspberry Pi anda, anda bisa melihat langsung skema pin dengan menggunakan perintah :

pinout
Silahkan ketikkan perintah diatas setelah login SSH atau selain itu melalui terminal di Raspberry Pi kalian. Contoh output untuk Raspberry Pi Zero adalah seperti gambar di bawah ini.


Tampilan Contoh Hasil Perintah pinout Raspberry Pi

2. Membuat Projek Raspberry Pi Blink
Baiklah, karena kalian sudah mengenal pin pada Raspberry Pi, maka selanjutnya mari mencoba membuat projeknya, yaitu projek Raspberry Pi Blink. Ketika memasang kabel jumper ke pin header Raspberry Pi ataupun breadboard, saya sarankan Raspberry Pi dalam kondisi off/shutdown untuk menghindari terjadinya short antar pin.

2.1. Persiapan Peralatan
Adapun peralatan yang harus di persiapkan :

1 Buah Raspberry Pi model apa saja yang kalian punya.
1 Buah Breadboard
2 Buah Kabel Jumper Male to Female
1 Buah Resistor 220 Ohm
1 Buah Led

Apabila komponennya sudah siap, selanjutnya silahkan dirangkai pada breadboard kalian dengan skema seperti contoh pada gambar di bawah ini.


Gambar Skema Blink

Catatan :
- GND atau kaki negatif lampu Led pada Pin 6 Raspberry Pi
- Kaki Positif lampu Led ke pin 11 Raspberry Pi

Untuk Raspberry Pi, perintah gpio sudah include dengan sistem didalam operasi Raspbian. Sehingga kalian dapat memprogram GPIO dengan berbagai bahasa pemrograman seperti halnya python, java, C, php, bash atau dapat juga langsung menggunakan perintah direct. Selain itu GPIO Raspberry Pi juga dapat diprogram dengan menggunakan pemrograman Scratch yang merupakan bahasa pemrograman visual yang mana berguna untuk belajar pemrograman secara mudah.

2.2. Kode Perintah GPIO
Selanjutnya dengan perintah gpio, kalian dapat dengan mudah mengontrol pin baik untuk input maupun output. Adapun untuk cara penggunaan perintah gpio ketikkan kodenya seperti berikut :

man gpio
Dan untuk menyalakan lampu LED, kalian perlu memberikan signal High pada pin yang akan kalian pilih, sedangkan untuk mematikan lampu LED kalian dapat memberikan signal Low. Silahkan coba untuk mengetikkan perintah berikut.

gpio -g mode 17 out
gpio -g write 17 1
Seperti pada contoh kode perintah diatas, seharusnya lampu LED kalian sudah menyala. Karena pada baris pertama "gpio -g mode 17 out", opsi -g merupakan opsi untuk mendefinisikan pin secara GPIO BCM seperti yang sudah dijelaskan sebelumnya, sehingga dalam hal ini menunjuk GPIO17 pada pin 11 agar menjalankan mode Output.

Kemudian pada baris kedua "gpio -g write 17 1", artinya menuliskan signal di GPIO17 supaya menjadi High, yang mana lampu LED menyala.

Apabila untuk mendefinisikan pin secara GPIO Board kalian dapat menggunakan opsi -1, adapun contohnya sebagai berikut.

gpio -1 write 11 0
Sehingga dengan perintah diatas, seharusnya lampu LED kalian mati. Hal ini terjadi karena menulis pin 11 (atau GPIO17 pada BCM) Low. Kalian cukup mendefinisikan mode 1 kali saja. Sekali kalian definisikan mode, maka modenya akan tetap sama sampai kalian ubah kembali, atau sampai Raspberry Pi kalian di restart.

Kode perintah gpio dilengkapi dengan opsi blink. Kalian cukup mengetikkan satu perintah saja agar membuat lampu LED on dan off. Kemudian tekan CTRL+C untuk menghentikan perintah tersebut.

gpio -1 blink 11 
Untuk perintah diatas kalian memerintahkan pin 11 (BCM) untuk menjalankan blink, menyala 1 detik, mati 1 detik, dan seterusnya selama sampai kalian belum menekan CTRL+C.

2.3. Kode Bash Script
Dikarenakan Raspbian menyediakan perintah gpio, maka kalian dapat memprogram menggunakan bahasa pemrograman dasar linux, yaitu Bash. Kode program Bash script merupakan script sederhana yang dapat membantu menjalankan perintah-perintah linux. Adapun Bash script ini semacam Batch file apabila pada Sistem Operasi Windows.

Sehingga sebelum melanjutkan, kalian perlu mengetahui path dari perintah gpio, supaya kalian tidak salah. Dan caranya dengan menggunakan perintah which.

which gpio
Dimana output yang didapatkan untuk perintah gpio berada pada path /usr/bin/gpio. Jadi sekarang buatlah bash scriptnya. Adapun langkah pertama buatlah sebuah file sebagai contohnya blink.sh dengan perintah nano.

nano blink.sh
Kemudian kalian isi dengan script berikut :

#!/bin/bash

while :
do
        /usr/bin/gpio -1 toggle 11
        sleep 1
done
Selanjutnya tekan CTRL+X dan dilanjutkan konfirmasi dengan menekan tombol Y. Kemudian setelah itu buatlah script menjadi writable dengan perintah chmod.

chmod +x blink.sh
Kemudian coba jalankan programnya dengan perintah bash.

bash blink.sh
Atau dapat juga dengan perintah berikut :

./blink.sh
Dengan begitu seharusnya lampu LED kalian sudah terjadi blink. Yang mana untuk program diatas akan menjalankan infinite loop atau loop yang tidak ada habisnya dengan menjalankan perintah gpio dimana opsi toggle di pin 11 GPIO Board. dan Opsi toggle merupakan opsi untuk menuliskan kondisi sebaliknya. Sehingga apabila pin dalam keadaan Low, maka akan di tulis High, dan sebaliknya. Untuk baris dengan kode program sleep 1, maka akan mendelay selama 1 detik sebelum program di lanjutkan kembali.

2.4. Kode Program Python
Bahasa pemrograman Python adalah bahasa pemrograman utama Raspberry Pi. Apabila kalian mengikuti Tutorial Bagaimana Cara Install Raspberry Pi pada artikel sebelumnya. Didalam Raspberry Pi sudah menyiapkan Python 2 dan Python 3 secara default. Sehingga kalian tidak perlu bingung untuk menginstalkannya lagi.

Didalam program Python sangat kaya akan library, untuk percobaan kali ini akan mencoba menggunakan library yang berbeda, yaitu menggunakan library Rpi.GPIO dan gpiozero.

2.4.1. Library Python RPi.GPIO
Ketika membuat projek blink dengan Library RPi.GPIO, kalain memerlukan module tambahan, yaitu time. Coba buatlah sebuah file dengan extensi .py dengan perintah nano, sebagai contohnya saya akan membuat file blinkrpi.py.

nano blinkrpi.py
Kalian isikan kode program 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)
Kemudian simpan file dengan menekan tombol CTRL+X dan dilanjutkan dengan menekan tombol Y. Selanjutnya jalankan program dengan perintah di bawah ini. Yang mana untuk menghentikan program tekan CTRL+C.

python blinkrpi.py
Apabila tidak ada kesalahan, lampu LED kalian akan mulai berkedip. Untuk program diatas akan menjalankan infinite loop menuliskan pin 11 (GPIO Board) menjadi high, berhenti selama 1 detik, kemudian menuliskan pin 11 menjadi low dan berhenti 1 detik.

Agar lebih paham lagi, silahkan kalian coba merubah mode board menjadi BCM. Dan dengan BCM pin yang ditulis akan menjadi 17.

2.4.2. Library gpiozero
Library gpiozero adalah library dengan fungsi yang cukup lumayan sangat lengkap. Karena Raspberry Pi sangat merekomendasikan menggunakan library ini. Adapun dokumentasi tentang gpizero dapat kalian lihat dan klik disini. Didalam library ini secara default pin Raspberry Pi akan didefinisikan dengan metode BCM. Sehingga tidak seperti halnya pada RPi.GPIO library, gpizero tidak dapat dikonfigurasi pada penomoran pin. Akan tetapi apabila kalian sudah familiar dengan GPIO Board, maka kalian dapat menuliskannya secara langsung, adapun contohnya seperti di bawah ini.

- led = LED(17) => Merupakan default BCM atau sama dengan BCM17.
- led = LED("GPIO17") => Ini sama dengan BCM17.
- led = LED("BCM17") => Ini sama dengan diatas.
- led = LED("BOARD11") = Untuk mendefinisikan pin dengan nomor 11 format GPIO Board.

Gpiozero dapat dioptimalkan untuk program Python 3, meskipun dapat berjalan pada program Python 2, hal ini belum tentu juga dapat berjalan untuk semua fungsinya. Pada percobaan kali ini akan menggunakan program Python 3.

Jadi, kalian cobalah membuat projek Raspberry Pi blink dengan menggunakan library gpiozero. dan buatlah sebuah file dengan extensi .py, sebagai contoh misalnya blinkzero.py dengan perintah nano. Kemudian kalian isi dengan program berikut ini.

from gpiozero import LED
from time import sleep

led = LED(17)

while True:
    led.on()
    sleep(1)
    led.off()
    sleep(1)
Apabila sudah selesai, silahkan simpan program, dan jalankan dengan perintah berikut.

python3 blinkzero.py
Sekarang lampu LED kalian seharusnya sudah berkedap kedip. Apabila kalian melihat, gpizero lebih mudah dan lebih praktis. Untuk program diatas sama seperti halnya program sebelumnya yang menjalankan infinite loop dengan menggunakan sleep. Akan tetapi kalian dapat memprogramnya dengan cara lain. Untuk library gpiozero dengan fungsi lampu LED sudah di lengkapi dengan fungsi blink. Adapun program diatas dapat juga digantikan dengan program seperti di bawah ini, yang lebih pendek dan lebih ringkas.

from gpiozero import LED
from signal import pause

led = LED(17)
led.blink()
pause()
Pada program Phyton diatas tidak menggunakan loop, akan tetapi menggunakan fungsi pause() dari library signal. Hal ini akan sama saja dengan infinite loop, akan tetapi lebih pendek.

Apabila kalian ingin menggunakan metode GPIO Board, kalian hanya perlu merubah pada baris led = LED(17) menjadi led = LED(BOARD17). Sampai disini harusnya kalian sudah memahami dan dapat membuatnya untuk melakukan percobaan tersebut.

Posting Komentar untuk "Cara Membuat Projek GPIO Raspberry Pi Blink"