Monday, January 18, 2016

Membuat Aplikasi Pengontrol Lampu Rumah Melalui Port Printer Komputer


Aplikasi Pengontrol Lampu atau Perangkat Listrik Menggunakan Bahasa C Dan Linux Sebagai Sistem Operasinya Melalui Parallel Port atau Port Printer Pada Komputer

Sesuai inti pembahasan yang akan dilakukan yaitu Pengontrol Lampu Rumah via SMS dengan Kannel dengan memanfaatkan Port Printer, disini akan dijelaskan secara mandiri mengenai program pengontrol Port Parallel yang nantinya akan kita panggil melalui SMS Gateway.

Sebelum melanjutkan sebaiknya anda mengetahui dulu apa itu Port Parallel atau biasa disebut Port Printer. Artikel yang juga berkaitan yaitu Pengertian Relay Board.

Artikel terkait:
Pengertian Port ParallelPengertian Relay Board

Program untuk mengontrol Port Parallel ini ditulis menggunakan bahasa C, karena sudah tersedia metode untuk mengakses port di dalam library C. Program yang ditulis untuk tujuan ini sangatlah sederhana, dimana tugas utama program adalah mengakses port melalui hex address, kemudian memberikan nilai logika 1 bila ingin menyalakan switch dan memberikan logika 0 bila ingin mematikan switch pada pin output.

Membuat Aplikasi Pengontrol Lampu Rumah Melalui Port Printer Komputer

Outb merupakan metode linux yang digunakan untuk memberikan nilai logika kepada data output secara simultan. Outb memiliki dua argumen yaitu value dan base address. Value merupakan nilai logika yang akan diberikan kepada data output dan base address adalah hex address dari parallel port. Misalnya kita ingin mengirimkan nilai logika 1 kepada semua pin pada LPT1. Value yang akan diberikan adalah 11111111 (dalam biner) atau 0xff (dalam hex), sedangkan LPT1 memiliki hex address 0x378 sehingga pada programnya argumen yang diberikan adalah

outb(value, base)

dimana base address didefinisikan pada baris sebelumnya sebagai

#define base 0x378

dan value didefinisikan pada baris sebelumnya sebagai

#define value 0xff.

Karena kita bekerja dengan linux, maka untuk mengakses port diperlukan ijin. Untuk itu tersedia metode ioperm yang akan memberikan ijin kepada non-previledges task untuk memproses bytes yang berasal dari alamat port supaya diberikan nilai turn on. Jika berhasil, maka metode ioperm akan memberikan nilai 1 sedangkan kalau gagal akan memberikan pesan error melalui

(stderr, "Error: Tak dapat menemukan port %x\n").

Perintah perintah tersebut dapat dilihat pada cuplikan program C untuk mengakses Port Parallel dibawah ini:

#include <stdio.h> #include <stdlib.h> #include <unistd.h> #include <sys/io.h> #define base 0x378  #define value 0xff main(int argc, char **argv) { if (ioperm(base,1,1)) fprintf(stderr, "Tak dapat menemukan port %x\n", base), exit(1); outb(value, base); }

Namun dalam program yang akan dibuat nantinya, program akan dapat mengakses port melalui hex maupun melalui decimal sehingga akan lebih mudah digunakan. Perbedaan tersebut terletak pada bagian

outb((unsigned char)value, base).

Program hanya akan membutuhkan suatu parameter, yaitu data yang akan dikirimkan ke parallel port, dan data harus bernilai integer dalam format decimal (sebagai contoh 255) dan format hexadecimal (sebagai contoh 0xff). Program memiliki beberapa error checking yang akan memberikan pesan error ketika user salah dalam memasukkan parameter dan ketika program tidak mendapatkan previledges serta ketika program tidak dapat menemukan base address dari parallel port tersebut.

Karena kita bekerja didalam sistem operasi linux, dengan menggunakan ioperm syscall linux akan mengizinkan akses ke berbagai macam port. Berikut kode dari program tersebut:

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/io.h>
#define base 0x378 /* alamat printer port */
main(int argc, char **argv) {
int value;  if (argc!=2)  fprintf (stderr, "Error: Nomor yang anda masukkan salah. Program ini membutuhkan perintah berupa nomor antara 0 dan 255.\n"), exit(1);
 if (sscanf(argv[1],"%i",&value)!=1)
fprintf (stderr, "Error: Parameter bukan sebuah nomor.\n"), exit(1);
if ((value<0) || (value>255))
fprintf (stderr, "Error: Salah perintah. Perintah yang tersedia harus diantara 0 dan 255\n"), exit(1)
if (ioperm(base,1,1))
fprintf(stderr, "Error: Tak dapat menemukan port %x\n", base), exit(1); outb((unsigned char)value, base)
}


Penjelasan:

  1. int value, program mendefinisikan variabel bertipe integer yaitu value.
  2. if (argc!=2), program akan mengecek jika program dijalankan tanpa memberikan value apapun, maka ditampilkan pesan error. Karena argc adalah variabel bertipe integer yang harus menerima input berupa value.
  3. if (sscanf(argv[1],"%i",&value)!=1), program akan mengecek jika program dijalankan dengan memberikan value selain berupa nomor, maka ditampilkan pesan error. Program menunggu input yang berupa unsigned char dan menerjemahkanya dalam integer dengan "%i", selain angka maka dianggap error.
  4. if ((value<0) || (value>255)), program akan mengecek jika program dijalankan dengan memberikan value melebihi yang ditentukan yaitu antara 0 dan 255, maka ditampilkan pesan error.
  5. if (ioperm(base,1,1)), program akan mengecek ketersediaan alamat base address 0x378 pada Port Parallel sekaligus meminta permission atau previledges dengan ioperm untuk mengakses Port Parallel, jika tidak mendapatkan permission atau previledges dan jika alamat pada base address 0x378 tidak ada atau Port Parallel pada komputer tidak ada, maka ditampilkan pesan error.
  6. outb((unsigned char)value, base), proses pengiriman data ke Port Parallel.

Setelah program dikompilasi, program dapat dijalankan dengan cara memanggil melalui shell atau terminal didalam Ubuntu serta diikuti dengan memberikan value berupa decimal antara 0 dan 255 atau hexadecimal antara 0x00 dan 0xff. Untuk lebih jelasnya dapat dilihat dalam tabel berikut:


Tabel diatas adalah value dari masing-masing pin pada Port Parallel, jika ingin mengontrol pin 2 untuk diberikan logika 1 (high) maka program dipanggil dengan relay1, begitu juga dengan pin yang lain. Dan jika ingin memberikan logika 1 (high) pada pin 2, 5, dan pin 9 adalah relay 137 dimana 137 diperoleh dengan cara 1+8+128 = 137 yaitu value dari pin 2 + pin 5 + pin 9. "relay" adalah nama program setelah dikompilasi.


Emoticon Emoticon