Wednesday 16 September 2015

Rpi Input dan Output dengan Python

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. Jangan terlalu terintimidasi oleh realtime disini, delay yang terjadi juga 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. 

Sebelum kita melakukan apa-apa dengan python, 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.

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:

'sudo apt-get install python-rpi.gpio'


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. 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)

Kita akan mengguakan pin dengan standar pabrik saja yaitu, GPIO.BCM, dimana pin-pin akan menggunakan nama pin standar, yaitu GPIO25 ada pada pin nomor 22.

Kita masih menggunakan rangkaian LED seperti yang sebelumnya
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. Bila kita belum masuk ke python, kita buka dahulu pythonnya 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.


Pada defaut, pertama kali masuk direktori kita dibawa ke direktori /home/pi, 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)
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.



No comments:

Post a Comment