Mengenal Pi GPIO -->

Mengenal Pi GPIO

Sorayakit
21 November 2016

Mengenal Pi GPIO (General-purpose input/output)


Apa itu Pi gpio? Pi GPIO adalah pin atau terminal tambahan input output yang khusus dipasang  diboard raspberry pi untuk koneksi ke perangkat luar, gambar dilingkari merah, biasa disebut sebagai header GPIO.

Untuk bisa memanfaatkannya kita hanya butuh mengenal fungsi pin dan sedikit settingan dari sisi program. GPIO di raspi ada yang memiliki 26 pin dan 40 pin tergantung model dari raspi.


GPIO dimanfaatkan sebagai alternatif  komunikasi raspi ke dunia luar persis seperti USB port atau Ethernet. Yang membedakannya adalah lebih flexible dalam pengkabelan. Melalui terminal GPIO kita bisa menghidupkan lampu LED, memutar dinamo, membaca suhu dari sensor  dan banyak lagi. Isi utama dari header GPIO adalah.
1. Power supply (3.3 V dan 5 V, masing masing 2 set)
2. UART ( Universal asynchronous receiver transmitter, 1 set)
3. SPI (Serial Peripheral Interface)
4. I2C (Inter-Integrated Circuit) -EEPROM
5. GPIO (General Purpose Input Output)
6. PWM (Pulse width modulation) 
 

 




Konfigurasi  pin GPIO
Header GPIO memiliki pin isi 26 dan isi 40, keduanya memiliki konfigurasi yang sama. Pin gpio memiliki dua sistem penomoran 
  •  Broadcom (BCM) sistem penomoran di software.
  • GPIO Board, nomor yang langsung tampak di boar PCB.
Kita hanya boleh menggunakan salah satu sistem penomoran. Untuk menentukan pilihan dibutuhkan inisialisasi, yaitu dengan mendeklarasikan sistem penomoran di script program



Tabel diatas menunjukkan perbedaan penomoran BCM, pin di board dan Wiring pi. 

Menggunakan GPIO
Memanfaatkan GPIO I/O Raspberry Pi memerlukan sedikit pemrograman. Program yang direkomendasi raspi adalah python, opsi lainnya bisa dengan javascript atau bahasa lain yang mendukung.

Menghidupkan lampu LED
Tutorial kali ini penulis akan menunjukan pada Sobat bagaimana menghidupkan dan mengatur kecerahan sebuah lampu LED dan membuat tombol yang akan direspon oleh salah satu pin GPIO.

Sebelum memulai kita harus melihat GPIO Pinout yaitu layout kaki kaki GPIO, pin mana yang akan dipakai, kemudian mentukan sistem penomoran nya.


Karena menjalankan gpio melalui script,  kita perlu  pahami sedikit script yang akan di gunakan misal python, lalu perhatikan fungsi input dan output.


Setelah memahami kode script coba setup WiringPi dan lakukan uji coba script sederhana menggunakan gpio.

Apa saja yang kita butuhkan untuk uji coba pada tutorial kali ini, berikut daftarnya:

  • Tentunya Raspberry Pi dengan model sesuai yang sobat punya.
  • Bread Boardsebagai pengganti pcb mudah untuk bongkar pasang.
  • Kabel Jumper, sebagai koneksi ke kaki masing masing komponen
  • Pushbutton Switch, sebagai tombol on dan off yang akan memberi perintah ke pin GPIO dan melihat respon output di LED display
  • Resistor 330 Ohm 1/6 Watt, sebagai  pengatur arus kerja LED
  • LED, sebagai display untuk output dari gpio, kita juga akan mengatur kecerahan dari LED menggunakan port PWM.
Kebutuhan umum untuk tutorial ini :
  • Kartu SD dengan OS Raspbian, lekukan instalasi jika OS rasbian belum tersedia.
  • Koneksi internet untuk men-download WiringPi. Kita bisa menggunakan port Ethernet atau wifi yang tersedia di raspi. Untuk mengaktifkan WiFi di raspi cukup mudah, kita hanya perlu klik icon wifi yang biasanya terletak di pojok kanan atas.
  • IDE (Integrated Development Environment). Sebagai wadah script. Ide yang umum dipakai adalah Geany. Ini IDE favorit  untuk pemrograman pada Raspberry Pi.
  • Bahasa pemrograman. Ada banyak bahasa pemrograman dan setiap orang punya bahasa pemrograman favorit contohnya Python mungkin lebih mudah untuk sobat yang baru di dunia pemrograman dan tidak memerlukan kompilasi apapun seperti bahasa “C” . namun C lebih cepat dan mungkin lebih mudah bagi mereka yang juga telah terbiasa menggunakan bahasa C sebelumnya.

Setting Hardware
Sekarang kita mulai dengan merakit sirkuitnyaDibutuhkan 2 LED untuk testing fungsi output yaitu output digital dan output PWM, Satu buah switch untuk testing fungsi input.

Dua LED display dikoneksikan ke sistem konfigurasi BCM yaitu GPIO 18 dan GPIO 23 jika menggunakan Wiring PI berarti koneksi di pin 12 dan pin 16. Kemudian switch kita koneksikan ke GPIO 17 di wiring Pin 11



Modul Python (RPi.GPIO) API
Baiklah kita akan memanfaatkan modul RPi.GPIO. Modul ini bawaan dari os raspbian jadi tidak perlu didownload bila sebelumnya kita sudah menginstall os raspbian karena memang dikususkan untuk bahasa python.
Kita akan coba untuk melakukan panggilan pada module RPI.GPIO.


Deklarasi module
Untuk menggunakan module kita perlu mendeklarasikan nama module seperti berikut, kita ketikkan paling atas dari script python kita.

import RPi.GPIO as GPIO

Import RPi.GPIO adalah memasukkan modul RPi.GPIO ke lokal dan mereferensikan kalau RPi.GPIO sebagai GPIO, jadi setelah kita import nama setelah “as” kita rubah boleh dengan nama apa saja yang disukai dalam hal ini penulis namakan GPIO.

Deklarasi Nomor pin
Setelah kita memasukkan modul RPi.GPIO, langkah selanjutnya adalah memilih salah satu dari dua sistem penomoran yang akan kita pakai :

 
1.
GPIO.BOARD – Yaitu skema penomoran dari board PCB. Penomoran dari pin mengikuti penomoran dari header board pcb

2. GPIO.BCM – Yaitu nomor pin Broadcom. Penomoran dari pin mengikuti sistem penomoran level bawah didefinisikan oleh Broadcom raspberry

Saat menggunakan  PCB, sistem penomoran GPIO.BOARD mungkin lebih mudah jika kita menggunakan langsung di header board. Untuk menentukan sistem, kita gunakan fungsi GPIO.setmode() seperti contoh dibawah:

GPIO.setmode(GPIO.BCM)

Dengan setmode tersebut berarti kita telah mengaktifkan nomor sistem penomoran BCM.

Setting Pin Mode
Untuk setting mode pin gunakan fungsi setup[pin], [GPIO.IN, GPIO.OUT] jadi jika kita menggunakan pin 18 sebagai output contoh kodenya adalah:

GPIO.setup(18, GPIO.OUT)

Ingat kita memasukkan pin 18 dengan sistem penomoran BCM, namun jika kita lihat di tabel sistem penomoran maka pin 18 di board ada di pin 12.


Digital Output
Untuk menuliskan value pin ‘high” atau “low”,kita gunakan fungsi GPIO.output([pin],[GPIO.LOW, GPIO.HIGH]).
Biar mudah kita lihat  contohnya ya, kita menginginkan value pin 18 adalah high, jadi kita bisa menuliskan script:

GPIO.output(18, GPIO.HIGH)

Dengan mengisi status pin GPIO.HIGH maka pada output pin 18 akan di set mengeluarkan tegangan 3,3 V, jika GPIO.LOW akan diset menjadi  tegangan 0 V. Adapun alternatif status yang bisa kita berikan bisa menggunakan 1, true untuk High 0 atau false untuk Low.


PWM (“Analog”) OutputPWM pada Raspberry Pi terbatas untuk pin : 18 (yaitu pin 12 di pi board) Untuk menginisialisasi  PWM, gunakan fungsi GPIO.PWM([pin], [frequency]). Untuk mempermudah kita membaca script buatkan satu variabel ‘pwm’ menjadi sbb:

pwm = GPIO.PWM(18, 1000)
pwm.start(50)

Kita akan mengatur pin PWM dengan frekuensi 1kHz/1000 hz, dan menetapkan bahwa output ke start di siklus 50%.

Selain contoh diatas kita bisa menyesuaikan nilai output PWM lebih fleksibel, gunakan fungsi pwm.ChangeDutyCycle([duty cycle]. [Siklus] dapat berupa nilai antara 0 (kalau 0% / LOW) dan 100 (kalau 100% / TINGGI). Jadi untuk mengatur pin menjadi 75%, Sobat bisa menulis:

pwm.ChangeDutyCycle(75)


Untuk mengaktifkan PWM pada pin yang off, menggunakan perintah pwm.stop ()
Cukup sederhana! Hanya jangan lupa untuk mengatur pin sebagai output sebelum Sobat menggunakannya untuk PWM.

Inputs
Jika pin dikonfigurasi sebagai input, Sobat dapat menggunakan fungsi GPIO.input([pin]) untuk membaca nilai masukkan.  Fungsi input() akan mengembalikan dua nilai True atau False menunjukkan apakah pin TINGGI atau RENDAH. Sobat dapat menggunakan statement  if untuk memberikan respon yang diperlukan. Sebagai contoh :

if GPIO.input(17):
    print("Pin 11 switch di tekan")
else:
    print("Pin 11 switch di lepas")

jadi dari script diatas kita bisa membaca status pin 11 sebagi False atau True, jangan lupa pin 17 pada konfigurasi BCM di script sama dengan pin 11 di board, karena kita mengguanak mode BCM diawal script tadi.

Pull-Up/Down Resistors
Ingat kembali  fungsi GPIO.setup () di mana kami menyatakan apakah pin adalah input atau output? Ada tiga parameter opsional untuk fungsi ini yang dapat kita gunakan untuk mengatur pull-up atau pull-down resistor. Untuk menggunakan resistor pull-up pada pin, tambahkan pull_up_down = GPIO.PUD_UP sebagai parameter ketiga di GPIO.setup. Atau, jika kita membutuhkan resistor pull-down, dan bukan menggunakan pull_up_down = GPIO.PUD_DOWN.
Misalnya, menggunakan resistor pull-up pada GPIO 17, maka kita bisa menulis di script:


GPIO.setup (17, GPIO.IN, pull_up_down = GPIO.PUD_UP)

Jika tidak ada deklarasi dalam ketiga nilai tersebut, maka kedua pull-ressistor tidak akan diaktifkan.

Delays
Jika kita ingin memperlambat script Python, kita dapat menambahkan delay. Untuk memasukkan delay ini, harus menyertakan modul time, kita import dibawah script import GPIO yang telah kita buat sebelumnya, Script:

Import time

Kemudian sepanjang isi script, Sobat dapat menuliskan statement time.sleep([seconds]) untuk memberikan delay. Kita dapat menggunakan angka desimal untuk secara tepat mengatur delay. Misalnya untuk delay 250 milidetik, maka script sbb:

time.sleep(0.25)

Mengumpulkan sampah
Setelah script kita berjalan dan sudah dipraktikkan, Ada baiknya kita tambahkan fungsi GPIO.cleanup () perintah pada akhir script Sobat untuk membersihkan script di Pi. Fungsi ini bekerja jika nanti kita menggunakan GPIOs. jika lupa Pi Sobat akan bertahan dengan statusnya.


Mulai Membuat Script
Sekarang waktunya kita gabung semua penjelasan script diatas, dan melakukan uji coba. Langakanya adalah sbb:

1. Buka Terminal LXTT
Untuk memulai kita butuh file Python. Sobat dapat membuat file dari GUI file explorer. Atau jika mau menggunakan terminal, buka LXTTerminal.
Setelah terminal terbuka kita bisa mulai membuat folder lalu file.

2. Membuat Folder
- Ketikan “mkdir python” = membuat folder bernama “python”
- Setelah folder “python” kita buat masukkan lagi perintah “cd python”=   pindah direktori, kita pindah ke folder python yang baru saja kita buat.
pi@raspberrypi ~/code $ mkdir python
pi@raspberrypi ~/code $ cd python

3.    Buat file
-  Buat sebuah file bernama “blinker”. Kita bisa buka text editor apa saja yang kita suka kalau di raspi bisa pakai Nano works sebagai text editor default atau bisa pakai Leafpad
      - Ketikan “touch blinker.py” = membuat file bernama   “blinker” dengan   extension “.py”
- Ketikkan leafpad” blinker.py & ”=  ????

pi@raspberrypi ~/code/python $ touch blinker.py
pi@raspberrypi ~/code/python $ leafpad blinker.py &


4.    Ketik Kode blinker
Berikut ini adalah script yang kita gabung dari script yang telah kita ulas sebelumnya. Dimana ada input dan output, dan juga PWM. Dan pastikan Sobat telah melakukan koneksi  sirkuit sesuai dengan yang telah kita ulas sebelumnya. Okey mari kita ketik ulang script dibawah ini untuk latihan,  atau jurus copas instant bagi yang udah di luar kepala.. J

# External module imports
import RPi.GPIO as GPIO
import time

# Pin Definitons:
pwmPin = 18 # Broadcom pin 18 (P1 pin 12)
ledPin = 23 # Broadcom pin 23 (P1 pin 16)
butPin = 17 # Broadcom pin 17 (P1 pin 11)

dc = 95 # duty cycle (0-100) for PWM pin

# Pin Setup:
GPIO.setmode(GPIO.BCM) # Broadcom pin-numbering scheme
GPIO.setup(ledPin, GPIO.OUT) # LED pin set as output
GPIO.setup(pwmPin, GPIO.OUT) # PWM pin set as output
pwm = GPIO.PWM(pwmPin, 50)  # Initialize PWM on pwmPin 100Hz frequency
GPIO.setup(butPin, GPIO.IN, pull_up_down=GPIO.PUD_UP) # Button pin set as input w/ pull-up

# Initial state for LEDs:
GPIO.output(ledPin, GPIO.LOW)
pwm.start(dc)

print("Here we go! Press CTRL+C to exit")
try:
    while 1:
        if GPIO.input(butPin): # button is released
            pwm.ChangeDutyCycle(dc)
            GPIO.output(ledPin, GPIO.LOW)
        else: # button is pressed:
            pwm.ChangeDutyCycle(100-dc)
            GPIO.output(ledPin, GPIO.HIGH)
            time.sleep(0.075)
            GPIO.output(ledPin, GPIO.LOW)
            time.sleep(0.075)
except KeyboardInterrupt: # If CTRL+C is pressed, exit cleanly:
    pwm.stop() # stop PWM
    GPIO.cleanup() # cleanup all GPIO

Setelah Sobat selasai mengetik script jangan lupa di save ya

5.    Menjalankan Script dan uji coba tombol
Untuk menjalankan script Modul RPi.GPIO membutuhkan hak administrator, jadi kita harus menambahkan “sudo”  didepan script Python. Untuk menjalankan script "blinker.py" , ketik:

pi@raspberrypi ~/code/python $ sudo python blinker.py

Setelah kode berjalan, tekan switch untuk menyalakan LED. LED PWM-ing juga akan membalikkan kecerahan saat Sobat menekan tombol.

P
ress CTRL+C untuk keluar dari script.

Setelah selesai pembuatan script  yang menggunakan text editor biasa, saatnya kami akan perkenalkan  sebuat script editor yang memungkinkan sobat lebih interaktif dalam pemrograman.

Menggunakan IDE!
Sejauh ini kita telah menggunakan text editor Leafpad atau Nano untuk menulis program Python, namun menggunakan text editor tersebut rawan akan kesalahan ketik dan apapun yang kita input apa adanya tiada beda mana variabel, mana syntax atau mana string. Jadi programmer berpengalaman mungkin membutuhkan  banyak fitur. Jika Sobat ingin memasukkan salah satu fitur tersebut, kami sarankan menggunakan IDE (integrated development environment). Salah satu favorit Pi IDE adalah Geany.

Geany tidak include dengan Raspbian, jadi kita perlu untuk mendownloadnya terlebih dahulu, sobat bisa pakai utility download ajaib apt-get perintahnya sbb:

pi@raspberrypi ~/code $ sudo apt-get update
pi@raspberrypi ~/code $ sudo apt-get install geany

Setelah diinstall sobat menuju ke menu “start” dan lihat “programming Atau, dari terminal, Sobat dapat mengetik sudo Geany. Sobat bahkan dapat membuka file di Geany, langsung dari baris perintah. ketik sudo Geany blinker.py

Menggunakan Geany
Setelah Geany running, Sobat dapat membuat file baru dengan pergi ke File> New. Menyimpan file sebagai "py" (atau ekstensi file bahasa umum lainnya) akan segera menginformasikan Geany untuk bekerja dengan exstention yang kita pilih, sehingga dapat mulai menyorot teks Sobat.


Geany dapat digunakan dengan kebanyakan bahasa, termasuk Python yang baru saja dibuat. Beberapa tweak untuk pilihan default IDE yang diperlukan, meskipun. Berikut ini adalah ikhtisar dari menggunakan Geany dengan masing-masing bahasa.

Geany dengan Python
M
enggunakan Geany dengan Python. Untuk menguji IDE Grany kita buka file "blinker.py" file yang kita buat sebelumnya. Sobat akan disambut dengan beberapa penyorotan konteks pleasnt.

Geany memiliki banyak fitur diluar apa yang telah kita bahas di sini. Periksa tab di bagian bawah. Check out menu di bagian atas. Bereksperimen dan lihat bagaimana IDE Geany dapat membuat pengalaman pemrograman sobat lebih baik!
salam.

Mau belajar di rumah juga bisa, klik disini