WWW.USBINOV.COMPiranti USB untuk PC, Laptop dan Raspberry Pi.

Contoh Program Mengontrol GPIO Raspberry Pi (Blinking LED) Menggunakan Clojure

Sistem operasi Raspbian versi terbaru telah menyertakan Oracle Java Development Kit dalam paket programnya. Pada Raspbian Wheezy yang dirilis tanggal 5 Mei 2015, telah tersedia paket oracle-java8-jdk. Oleh karenanya kita dapat memrogram Raspberry Pi menggunakan bahasa pemrograman Java atau bahasa pemrograman lain dengan target Java Virtual Machine. Salah satu bahasa pemrograman dengan target JVM adalah Clojure.

Sebagai pemula bahasa Clojure, tentu saya sangat penasaran bagaimana cara mengontrol GPIO Raspberry Pi menggunakan Clojure. Setelah browsing sana-sini, akhirnya saya berhasil membuat program Blinking LED pada GPIO-2. Rangkaian LED untuk eksperimen ini adalah sebagai berikut:

raspberry pi led gpio

 

Rangkaian kontrol LED di atas adalah aktif-rendah, maksudnya LED akan menyala jika GPIO-2 berlogika rendah (LOW) dan LED akan padam jika GPIO-2 berlogika tinggi (HIGH). Perhatikan grafik di atas.

Clojure

Untuk dapat melakukan pemrograman dengan bahasa Clojure, cara termudah adalah dengan menginstalasi program utilitas Leiningen (lein). Leiningen adalah skrip untuk otomasi proses pembuatan/pengembangan program Clojure. Dengan Leiningen, kita dapat dengan mudah membuat project Clojure, melakukan testing, kompilasi, deploying dan penciptaan file aplikasi JAR.

Berikut adalah langkah-langkah instalasi skrip utilitas Leiningen.

  1. Pastikan Raspberry Pi Anda terkoneksi dengan internet.
  2. Download file lein menggunakan perintah berikut:
    $ wget https://raw.githubusercontent.com/technomancy/leiningen/stable/bin/lein
  3. Jadikan executable dengan perintah:
    $ chmod +x lein
  4. Letakkan pada direktori yang masuk pada $PATH. Saya meletakkan lein pada direktori /usr/bin dengan perintah sebagai berikut:
    $ cp lein /usr/bin
  5. Jalankan skrip lein dengan perintah:
    $ lein
  6. Maka skrip akan mengunduh file leiningen-2.5.3-standalone.jar dan meletakkannya pada folder /home/pi/.lein/self-installs.
  7. Instalasi Leiningen selesai.

Membuat Project Clojure – led

Setelah instalasi Leiningen sukses, sekarang kita buat project Clojure dengan nama project: led dengan skrip lein, caranya adalah:

$ lein new app led

Tunggu beberapa saat dan voila, sebuah folder led tercipta dengan beberapa folder dan file di dalamnya.

Langkah selanjutnya, masuk ke direktori led dengan perintah $ cd led dan edit file project.clj. Kemudian tambahkan baris berikut ini:

[clj-gpio "0.2.0"]

sehingga file keseluruhannya nampak seperti screenshot berikut ini:

project.clj

clj-gpio adalah library Clojure untuk mengakses GPIO Raspberry Pi secara lebih mudah. Library ini dibuat oleh peterschwarz. Dengan menggunakan library ini, maka kita dapat meng-export, mengatur arah (input/ouput) dan membaca-nilai/menulis-nilai GPIO dengan lebih singkat/sederhana dibanding jika kita melakukan sendiri prosesnya menggunakan operasi file.

Kita cukup menyertakan library clj-gpio dalam file project.clj dan library ini akan secara otomatis diunduh dan disertakan pada proses kompilasi oleh Leiningen. Asik bukan? Tapi yang bikin gak asik adalah kita harus terkoneksi dengan internet untuk melakukan kompilasi. Tapi tidak masalah, belajar memang memerlukan biaya, betul?

Nah, langkah selanjutnya adalah mengedit file core.clj yang ada pada direktori src/led/. Buka file core.clj dan edit sehingga persis seperti listing program (Blinking LED) secara keseluruhan berikut ini.

(ns led.core
  (:gen-class)
  (:require [gpio.core :as gpio]))

(defn -main[]
  (println "Clojure Blinking LED")
  (def port (gpio/open-port 2))
  (gpio/set-direction! port :out)
  (loop [x 8]
    (when (>= x 1)
      (gpio/write-value! port :low)
      (println "LED is ON")
      (Thread/sleep 1000)
      (gpio/write-value! port :high)
      (println "LED is OFF")
      (Thread/sleep 1000)
      (recur (- x 1))))
  (gpio/close! port))

Hati-hati dengan jumlah kurung-tutup dan kurung-buka. Setiap perintah Clojure selalu diawali dengan kurung-buka “(” dan kurung-tutup “)”. Awalnya memang agak susah juga menghitung-hitung jumlah “(” dan “)”, tapi setelah mengerti triknya, hal itu tidak lagi sulit dilakukan.

Penjelasan Program Singkat

Program di atas sebagaimana tata-cara akses GPIO, langkah pertama adalah melakukan export GPIO yang akan digunakan, dalam hal ini adalah GPIO-2. Perintah yang melakukan hal itu adalah:

(def port (gpio/open-port 2))

Baris perintah tersebut mendefinisikan port sebagai GPIO-2. Kita bebas saja menggunakan nama lain selain port misalnya pin2 atau gpio2. Dengan definisi tersebut, maka selanjutnya kita mengakses GPIO-2 melalui port.

Catatan

Dari hasil eksperimen, saya menemukan kekurangan pada fungsi open-port yakni tidak adanya pengecekan apakah GPIO yang diproses sudah ada (exists) ataukah belum. Oleh karenanya, penerapan open-port pada GPIO yang sudah aktif akan menyebabkan error. Jadi, jangan lupa untuk selalu meng-close (unexport) GPIO yang sudah kita gunakan pada akhir program.

Nah, baris program selanjutnya berfungsi untuk mengatur arah port (GPIO-2) menjadi keluaran (output), baris perintah tersebut adalah:

(gpio/set-direction! port :out)

Baris-baris program selanjutnya adalah sebuah perulangan (sebanyak 8 kali) untuk menyalakan dan mematikan LED pada GPIO-2 dengan durasi nyala-padam 1 detik.

  (loop [x 8]
    (when (> x 1)
      (gpio/write-value! port :low)
      (println "LED is ON")
      (Thread/sleep 1000)
      (gpio/write-value! port :high)
      (println "LED is OFF")
      (Thread/sleep 1000)
      (recur (- x 1))))

Setelah melakukan perulangan sebanyak 8 kali, kita perlu meng-unexport GPIO yang kita gunakan dengan perintah:

(gpio/close! port)

Menjalankan Program

Setelah selesai proses edit-mengedit, kita dapat menjalankan project led dengan menggunakan perintah:

$ lein run

Eit, tunggu dulu, Mas!

Memang betul kita bisa menjalankan project Clojure yang kita buat menggunakan Leiningen dengan perintah tersebut, tapi jangan lupa, kita perlu akses root untuk mengakses GPIO Raspberry Pi. Jadi, sebaiknya kita langsung saja melakukan kompilasi hingga tercipta file aplikasi JAR menggunakan perintah:

$ lein uberjar

Tunggu dengan sabar karena prosesnya sangat lama. Dan jika tidak ada kesalahan pengetikan kode program dan proses kompilasi yang memerlukan proses download file-file library (dependensi) lancar, maka akan tercipta file led-0.1.0-SNAPSHOT-standalone.jar.

Untuk menjalankan file aplikasi tersebut, masuk ke direktori target/uberjar dan mengeksekusinya menggunakan program java dengan perintah sebagai berikut:

$ cd target/uberjar
$ sudo java -jar led-0.1.0-SNAPSHOT-standalone.jar

Dan lagi-lagi kita harus bersabar untuk menunggu Raspberry Pi menjalankan program tersebut. Lama banget memang, tapi hasilnya tidak mengecewakan. LED GPIO-2 berkedip-kedip delapan kali dengan durasi nyala-padam 1 detik.

clojure-led-console

raspi-led-gpio2

Saya akui membuat program Clojure pada Raspberry Pi B+ sangatlah melelahkan. Lelah nungguin proses kompilasi dan lelah nungguin proses eksekusi. Namanya juga eksperimen, hehehe…

Kesimpulan

  1. Dengan disertakannya Oracle Java Development Kit pada Raspbian versi terbaru, maka semakin mudah bagi programmer Java dan/atau programmer bahasa dengan target JVM (salah satunya adalah Clojure) untuk memrogram Raspberry Pi.
  2. Proses kompilasi dan eksekusi program (pada Raspi B+) membutuhkan waktu yang lama, oleh karena itu sebaiknya menggunakan Raspberry Pi 2 yang kisaran 8 kali lebih cepat dibanding Raspi B+.
  3. Proses eksekusi memang membutuhkan waktu loading yang lama, tapi hal itu tidak menjadi masalah karena aplikasi Raspberry Pi toh seyogyanya dieksekusi sekali saja.
  4. Mungkin sebagian orang akan mengatakan bahwa mengontrol Raspberry Pi dengan Clojure adalah hal yang kurang kerjaan atau kurang bijaksana dibanding dengan menggunakan C atau Python. Namun demikian, tidak ada salahnya kita menggunakan Clojure ataupun bahasa lain seperti REBOL asalkan semua parameter kebutuhan aplikasi masih bisa dipenuhi.

Nah, sekian dulu Catatan Eksperimen Raspberry Pi kali ini. Sampai jumpa pada catatan eksperimen yang lain.

Selamat belajar.

 

One Comment

Add a Comment

Your email address will not be published. Required fields are marked *