Selasa, 15 November 2016

Raspberry GPIO Board - BCM

Kursus Raspberry PI hari ke3 Materi1




Apa itu GPIO? GPIO merupakan singkatan dari General Purpose Input Output dengan kata lain adalah pin yang dapat digunakan baik sebagai masukan/input maupun sebagai keluaran/output. Untuk mengakses low-level hardware pada Raspberry Pi, dapat digunakan bahasa Python yang sudah terpasang pada distro Raspbian.


Keunggulan scripting dengan python dibanding dengan bash atau yang lain, kode-kode lebih mudah ditulis dan dibaca, dan juga Python menyediakan module-module yang beragam, sehingga untuk melakukan sesuatu yang komplek dapat dilakukan dengan mudah. Kekurangannya dengan python adalah tidak bisa realtime, maksudnya, penggunaan RPi tidak hanya untuk python saja, sehingga python tidak menjadi prioritas utama dalam menjalankan program, dan python merupakan script yang harus dibaca dan diterjemahkan kedalam bahasa mesin setiap kita menjalankan program python. Maksudnya ttidak bisa realtime adalah adanya delay namun tidak lama, untuk melakukan projek yang toleransi waktu satuan detik keterlambatan dan alat-alat yang tingkat kepresisiannya tidak tinggi, kita masih bisa menggunakan python.


Bila kita ingin membuat sesuatu yang tidak perlu realtime, dan melakukan scripting dengan mudah, maka python adalah pilihan yang terbaik. 
Langkah awal kita test dahulu Python GPIO module, apakah telah terinstall apa belum, dengan cara:
  1. Pada command line atau terminal kita tulis:
    sudo python
  2. Setelah python muncul, kita import module GPIO dengan:
    import RPi.GPIO as gpio
  3. Bila tidak terjadi error, maka semuanya baik-baik saja, dan kita bisa mengecek versinya dengan perintah : gpio.RPI_REVISION 
  4. Bila mendapatkan error karena tidak adanya module GPIO, kita harus install modulnya terlebih dahulu. Kita keluar dahulu dari python dengan menggunakan perintah exit() lalu kita masuk ke command line lagi. Kita update terlebih dahulu software RPi kita dengan :

    sudo apt-get update

    lalu kita install module RPi GPIO nya:

Method 1 – Install from repository

If the package exists in the Raspbian repository is can be installed using apt-get. First you need to update the available package versions :
sudo apt-get update
Then attempt to install the RPi.GPIO package :
sudo apt-get install rpi.gpio
If it isn’t already installed it will be installed. If it is already installed it will be upgraded if a newer version is available.

Method 2 – Manual Installation

The package is available from http://pypi.python.org/pypi/RPi.GPIO and the current version is 0.5.11 (February 2015). If this version is updated you will need to make appropriate changes to the version number in the commands below.

Step 1 – Download the library

wget https://pypi.python.org/packages/source/R/RPi.GPIO/RPi.GPIO-0.5.11.tar.gz

Step 2 – Extract the archive to a new folder

tar -xvf RPi.GPIO-0.5.11.tar.gz

Step 3 – Browse to the new directory

cd RPi.GPIO-0.5.11

Step 4 – Install the library

sudo python setup.py install

Step 5 – Remove the directory and archive file

cd ~
sudo rm -rf RPi.GPIO-0.*
This will now mean you can use the library within Python.

dan kemudian coba lagi masuk ke python, lalu import GPIO lagi. Bila tidak ada error maka semuanya baik-baik saja.

Kita menggunakan nomor-nomor pin sesuai dengan apa yang telah disediakan atau didesign oleh pabrik. 

MODE BOARD
GPIO.setmode(GPIO.BOARD) #Penomoran header

Kita bisa juga menggunakan standar yang lain dengan menggunakan GPIO.setmode(GPIO.BOARD). Mode ini adalah penamaan pin sesuai dengan urutan pin pada RPi board, jadi pin pertama adalah GPIO1, kedua adalah GPIO2 dan seterusnya.  


sehingga script kita menjadi:

import RPi.GPIO as GPIO
GPIO.setmode(GPIO.BOARD)



MODE BCM/GPIO
GPIO.setmode(GPIO.BCM)   #Penomoran Broadcom

Atau bisa juga kita menggunakan pin dengan standar pabrik saja yaitu, GPIO.BCM, dimana pin-pin akan menggunakan nama pin standar, yaitu GPIO25 ada pada pin nomor 22.(BCM - Broadcom pin number, sering disebut  "GPIO")



Praktek GPIO

Misalkan GPIO25 tersambung ke anoda LED (boleh menggunakan resistor boleh tidak (sebaiknya menggunakan resistor). LED masih bisa bertahan, tapi sebaiknya menggunakan resistor 10 ohm sampai 10k ohm tidak masalah). Dan Katoda LED tersambung dengan ground.

Script:

  1. masuk ke python dengan perintah
    'sudo python'.
  2. Lalu kita tulis : import RPi.GPIO as GPIO
    kita mengimport module GPIO
  3. GPIO.setmode(GPIO.BCM) 
    kita menset pin-pin pada RPi seperti apa adanya.
  4. GPIO.setup(25,GPIO.OUT)
    kita menset GPIO25 untuk output
  5. GPIO.output(25,1)
    Aktifkan output GPIO25 (LED menyala)
  6. GPIO.output(25,0)
    Nonaktifkan output GPIO25 (LED padam)

Untuk membuat input dengan tombol, dan indikator tombol ditekan dengan LED, jadi bila kita menekan tombol, LED (dalam keadaan mati). Kita gunakan script dengan membuat file python terlebih dahulu.

Komponen yang akan kita gunakan adalah:

  1. RPi
  2. Breadboard
  3. 1x LED
  4. 2x Resistor (10 -100 ohm dan 10k ohm).
  5. 1x Push button
  6. Beberapa kabel jumper ('male to female' dan 'male to male')

Rangkaian pada breadboard:
  1. Hubungkan RPi pin 3,3v ke breadboard (+) atau langsung ke push button, bila jumper masuk ke positif (+) sambungkan lagi dengan jumper dari (+) ke kaki push button, dan ground ke breadboard (-).
  2. Hubungkan RPi GPIO25 ke breadboard, terhubung dengan LED anoda, dan LED katoda terhubung kesalahsatu ujung resistor (10 ohm - 100 ohm) dan ujung yang lain terhubung dengan ground.
  3. Lalu tempelkan push button ditengah breadboard dan salah satu kakinya terhubung dengan resistor (10k ohm), kaki resistor yang lain terhubung dengan ground. 
  4. Hubungkan RPi GPIO24 ke kaki push button yang terhubung dengan resistor.
  5. Pada defaut, pertama kali masuk direktori kita dibawa ke direktori /home/adiarray, pada direktori tersebut buat sebuah file kosong dengan nama 'tombolOnDanOff.py', dengan perintah pada command line:
    'touch tombolOnDanOff.py'
    lalu kita gunakan text editor nano untuk membuat script-nya dengan perintah:
    'nano tombolOnDanOff.py'
    lalu ketikan (Pada python spasi untuk blok-blok (seperti blok if ) merupakan syarat, jadi pastikan menekan tombol Tab jangan kurang atau lebih pada setiap bloknya) :
    1. import RPi.GPIO as GPIO
    2. import time

    3. GPIO.setmode (GPIO.BCM)
    4. GPIO.setup (25,GPIO.OUT)
    5. GPIO.setup (24,GPIO.IN)

    6. GPIO.output(25,GPIO.LOW)
    7. LEDState=False

    8. while True:
    9. inputButton = GPIO.input(24)
    10. if (inputButton == True):
    11. if (LEDState == False):
    12. GPIO.output (25, GPIO.HIGH)
    13. LEDState = True
    14. print ('push button ditekan, LED menyala ')
    15. time.sleep(0.2)
    16. else :
    17. GPIO.output (25, GPIO.LOW)
    18. LEDState = False
    19. print ('push button ditekan, LED mati ')
    20. time.sleep(0.2)
    Simpan dengan cara ketik CTRL+X+Y dan ENter, lalu jalankan dengan mengetik : sudo python tombolOnDanOff.py

    atau bisa didownload disini 

    Yang terjadi pada script diatas adalah:
    1. baris 1, kita mengimport module GPIO untuk RPi dengan nama panggilan GPIO.
    2. baris 2, kita mengimport module waktu (time).
    3. baris 4, setting peta pin RPi standar pabrik, bukan berdasarkan nomor pin.
    4. baris 5, mengsetting GPIO25 sebagai output.
    5. baris 6, mengsetting GPIO24 sebagai input.
    6. baris 8, mengsetting GPIO24 dalam keadaan mati.
    7. baris 9, boolean untuk keadaan LED mati.
    8. baris 11, baris ini akan menbuat blok looping terus menerus, karena kondisi akan selalu True (kita tandai ini adalah awal dari blok 1).
    9. baris 12, membuat variable inputButton yang merupakan steatment GPIO.input(24) 
    10. baris 13, jika adanya input dari push button maka inputButton akan bernilai True, dan blok ini akan dijalankan. Awal blok 2 yang merupakan bagian dari blok 1)
    11. baris 14, Bila LEDState merupakan False (LED mati), blok ini yang akan dijalankan. Awal blok 3
    12. baris 15, set GPIO25 dengan nilai HIGH, sehingga LED mendapakan aliran listrik.
    13. baris 16, mengganti variable LEDState menjadi True (karena LED menyala).
    14. baris 17, mencetak string.
    15. baris 18, tidak menlakukan apa-apa selama 0,2 detik. Akhir dari blok 3.
    16. baris 19, bila nilai LEDState bukan nilai dari blok if diatasnya.Awal blok 4.
    17. baris 20, menset GPIO25 menjadi LOW, sehingga LED akan mati.
    18. baris 21, menset variable LEDState menjadi False.
    19. baris 22, mencetak string.
    20. baris 23, tidak melakukan apa-apa selama 0.2 detik. Akhir dari blok 4
    blok 1,dan blok 2 berakhir secara otomatis karena tidak ada perintah lagi dibawah baris 23.
===========

NB
SAAT PENDEKLARASIAN FUNGSI PIN


Apakah pin akan dijadikan sebagai input atau output? Jika input, apakah menggunakan pull-up/down resistor internal/tidak? Pengguna Arduino tidak akan asing dengan fungsi pinMode([pin], [arah]). Pada Raspberry Pi digunakan sintaks
GPIO.setup([pin], GPIO.OUT)                 #Sebagai output
GPIO.setup([pin], GPIO.IN)                  #Sebagai input
GPIO.setup([pin], GPIO.IN, GPIO_PD.UP)      #Sebagai input dengan pull-up resistor
GPIO.setup([pin], GPIO.IN, GPIO_PD.DOWN)    #Sebagai input dengan pull-down resistor
Apa itu pull-up dan pull-down resistor?
Simpelnya, mereka adalah resistor yang dipasang agar sebuah pin memiliki nilai logika 1 (pull-up) atau 0 (pull-down). Tanpa pull-up/down resistor, pin tidak akan memiliki nilai logika yang pasti.
Wah, jadi harus ada dong?
Tidak juga. jika memakai push button atau toggle switch, mungkin perlu. jika memakai sensor, tidak perlu.
Lho? Kenapa?
Push button dan toggle switch memiliki dua kondisi, terbuka (open-circuit) dan tertutup (closed-circuit). Ketika berada dalam kondisi terbuka dan tidak ada pull-up/down resistor, maka nilai logika menjadi tidak pasti. Oleh karena itu, pull-up dan pull-down resistor internal yang dimiliki Raspberry Pi dapat dimanfaatkan.
Untuk memberikan nilai logika, dapat digunakan sintaks dibawah.
GPIO.OUTPUT([pin], GPIO.LOW)    #Logic 0
GPIO.OUTPUT([pin], GPIO.HIGH)   #Logic 1
GPIO.LOW dapat diganti dengan 0 atau False, sedangkan GPIO.HIGH dapat diganti dengan 1 atau High. Pada Arduino, sintaks diatas dikenal dengan fungsi digitalWrite([pin], [HIGH|LOW]).
Jika pada Arduino dikenal fungsi digitalRead([pin]) untuk membaca nilai logika, di Raspberry Pi dikenal sintaks
GPIO.READ([pin])
Beberapa pin pada Raspberry Pi dapat difungsikan untuk PWM (Pulse Width Modulation/Modulasi Lebar Pulsa). Hal yang perlu diperhatikan untuk menggunakan fitur PWM adalah nomor pin karena tidak semua pin mendukung PWM. Pin yang dapat berfungsi sebagai PWM memiliki keterangan PWMx di situs pinout.xyz. Untuk memfungsikan PWM di Raspberry Pi memang tidak semudah Arduino yang hanya menggunakan analogWrite([pin], [nilai]), tapi tidak sulit. Sintaks dibawah dapat digunakan untuk menggunakan PWM. Jangan lupa, atur pin PWM sebagai output.
pwm = GPIO.PWM([pin], [frekuensi])
pwm.start([duty cycle])           #Untuk mulai menggunakan PWM
pwm.ChangeDutyCycle([duty cycle]) #Untuk mengubah duty cycle (0-100)
pwm.stop()                        #Untuk selesai menggunakan PWM
Untuk membuat delay, dapat menuliskan sintaks dibawah pada bagian awal program
import time
Untuk menggunakannya, dapat menggunakan sintaks
time.sleep([detik])
Jika sudah selesai, sebaiknya pin Raspberry Pi dikembalikan ke kondisi awal dengan sintaks
GPIO.cleanup()
Jika sudah selesai dan ingin keluar dari editor nano, dapat menekan kombinasi tombol Ctrl+X. Dan untuk menjalankan programnya, dapat menggunakan perintah dibawah.
sudo python nama_berkas.py
Oh iya, saat menekan enter, akan keluar prompt permintaan password seperti dibawah.
[sudo] password for pi:
Masukkan saja password-nya. Memang tidak terlihat karakternya. Ini salah satu fitur keamanan Linux.🙂
Jika sudah selesai, dapat menekan tombol kombinasi Ctrl+C. Jika ingin memutuskan koneksi namun ingin program tetap berjalan, dapat menggunakan tmux yang dapat diinstall dengan memasukkan perintah

sudo apt install tmux
NB agar lebih mudah python bisa menggunakan IDE. misalkan Geany.
apt-get install geany
geany tombolOnDanOff.py



Selamat Mencoba

Reff:
http://kepython.blogspot.co.id/2015/09/rpi-input-dan-output-dengan-python.html
https://codesaya.com/python/



GPIO Timer:


import RPi.GPIO
# imports
import RPi.GPIO as GPIO
import time
#pin definition
ledPin = 23
#pin setup
GPIO.setmode(GPIO.BCM)
GPIO.setup(ledPin, GPIO.OUT)
GPIO.output(ledPin, GPIO.LOW)
print (“lets go”)

try:
     while 1:
          GPIO.output(ledPin,GPIO.LOW)
          time.sleep(0.075)
          GPIO.output(ledPin,GPIO.HIGH)
          time.sleep(0.075)
          GPIO.output(ledPin, GPIO.LOW)
          time.sleep(0.075)

Tidak ada komentar:

Posting Komentar