Mudahnya Mengontrol Driver LPT-RELAY Menggunakan Python dan INPOUT32.DLL


lpt4rel_python

Python memang mudah!😀

Setelah pada tulisan-tulisan sebelumnya dibahas tentang bagaimana mudahnya mengontrol 1 unit USB-2REL bahkan 5 unit USB-2REL menggunakan Python + PyUSB, dan juga bagaimana mudahnya mengontrol modul SER-2REL menggunakan Python + PySerial, maka kali ini kita akan membahas tentang bagaimana mudahnya mengontrol modul LPT-RELAY menggunakan Python + InpOut32.DLL.

Jika Anda belum memiliki library InpOut32.dll pada komputer Anda, Anda dapat mengunduhnya melalui link berikut ini:

Download InpOut32.dll
( ~80KB )

Setelah download, letakkan file InpOut32.dll pada direktori c:\windows\system32 untuk memastikan library tersebut dapat diakses oleh program.

Selanjutnya kita bisa langsung bereksperimen dengan Python. Perhatikan screenshot Python Shell berikut ini.

image

Untuk dapat mengakses file .dll, terlebih dahulu kita import modul ctypes. Modul ini tidak tersedia pada paket Python versi di bawah 2.4. Oleh karenanya jika Anda menggunakan Python versi 2.3 ke bawah, Anda harus melakukan instalasi modul ctypes terlebih dahulu. Akan tetapi rasanya saat ini sudah jarang sekali yang menggunakan Python dengan versi dibawah 2.5.🙂

Python yang saya gunakan pada eksperimen ini adalah Python 2.5.4 oleh karenanya tidak diperlukan lagi instalasi modul ctypes.

Sekarang mari kita bahas masing-masing perintah di atas.

Setelah perintah:

>>> import ctypes

kita dapat langsung menulis data ke atau membaca data dari port LPT. Pada contoh di atas, nilai 255 ditulis ke port data LPT dengan alamat 378H. Adapun baris perintahnya adalah:

>>> ctypes.windll.inpout32.Out32(0x378, 255)

Setelah baris perintah tersebut dieksekusi, maka D0-D7 dari port LPT 378H akan berlogika tinggi (HIGH). Dan untuk mengeset D0-D7 dari port data LPT 378H dengan logika rendah (LOW), maka perintahnya adalah sebagai berikut:

>>> ctypes.windll.inpout32.Out32(0x378, 0)

Untuk sekedar meyakinkan, kita lakukan lagi beberapa eksperimen penulisan data ke port data LPT 378H sebagai berikut:

>>> ctypes.windll.inpout32.Out32(0x378, 2)
>>> ctypes.windll.inpout32.Out32(0x378, 0)

Sangat mudah, bukan?😀

Library InpOut32.dll memiliki fungsi untuk membaca port yakni Inp32(). Berikut adalah contoh penggunaannya seperti screenshot di atas.

>>> ctypes.windll.inpout32.Out32(0x378, 2)
>>> i = ctypes.windll.inpout32.Inp32(0x378)
>>> print i
2

Hasil pembacaan port data LPT 378H setelah port data tersebut ditulis dengan data 2 adalah 2. Hal ini membuktikan bahwa fungsi Inp32() berfungsi dengan baik.

Masih kurang percaya? Kita lakukan sekali lagi dengan data yang berbeda. Kali ini kita tulis data 0x55 atau 85 desimal, dan membaca kembali port data dan menampilkan hasilnya.

>>> ctypes.windll.inpout32.Out32(0x378, 0x55)
>>> i = ctypes.windll.inpout32.Inp32(0x378)
>>> print i
85

Bagaimana? Memang sangat mudah, kan?😀

Sebelum mengakhiri eksperimen ini, marilah kita buat sebuah program sederhana untuk menyalakan bit D0-D7 secara bergantian dengan delay-on dan delay-off = 1 detikan. Anda bisa memasang 8 buah LED ke port data LPT (D0 – D7) untuk menghasilkan efek lampu yang menyala bergantian.

Berikut adalah listing programnya.

#——————————————————————————-
# Name:        Test-InpOut32.py
# Purpose:
# Author:      Chandra MDE
# Created:     19/04/2013
# Copyright:   (c) Chandra MDE 2013
# http://teknikelektrolinks.com
#——————————————————————————-

import ctypes, time

def SetBit(port, bit):
    dataread = ctypes.windll.inpout32.Inp32(port)
    datawrite = dataread | (1 << bit)
    ctypes.windll.inpout32.Out32(port, datawrite)

def ResetBit(port, bit):
    dataread = ctypes.windll.inpout32.Inp32(port)
    datawrite = dataread & ~(1 << bit)
    ctypes.windll.inpout32.Out32(port, datawrite)

def main():
    print "Testing library InpOut32.dll"
    print "Output = Lampu Berjalan dari D0-D7"
    print "——————————————–"

    for i in range(8):
        SetBit(0x378, i)
        x = ctypes.windll.inpout32.Inp32(0x378)
        print "Port data LPT setelah bit ke", i, " set = ", x
        time.sleep(1)
        ResetBit(0x378, i)
        x = ctypes.windll.inpout32.Inp32(0x378)
        print "Port data LPT setelah bit ke", i, " reset = ", x
        time.sleep(1)

if __name__ == ‘__main__’:
    main()

Jika dieksekusi, program akan menghasilkan display LED yang menyala bergantian mulai dari LED D0 sampai LED D7 dan tampilan pada monitor sebagai berikut:

Testing library InpOut32.dll
Output = Lampu Berjalan dari D0-D7
——————————————–
Port data LPT setelah bit ke 0  set =  1
Port data LPT setelah bit ke 0  reset =  0
Port data LPT setelah bit ke 1  set =  2
Port data LPT setelah bit ke 1  reset =  0
Port data LPT setelah bit ke 2  set =  4
Port data LPT setelah bit ke 2  reset =  0
Port data LPT setelah bit ke 3  set =  8
Port data LPT setelah bit ke 3  reset =  0
Port data LPT setelah bit ke 4  set =  16
Port data LPT setelah bit ke 4  reset =  0
Port data LPT setelah bit ke 5  set =  32
Port data LPT setelah bit ke 5  reset =  0
Port data LPT setelah bit ke 6  set =  64
Port data LPT setelah bit ke 6  reset =  0
Port data LPT setelah bit ke 7  set =  128
Port data LPT setelah bit ke 7  reset =  0
>>>

Nah, berkaitan dengan modul LPT-4REL seperti pada foto di atas, berikut adalah perintah untuk mengaktifkan RELAY-1, mematikan RELAY-1, mengaktifkan RELAY-2, mematikan RELAY-2, dan seterusnya sampai RELAY-4.

SetBit(0x378, 1)  #RELAY-1 ON
ResetBit(0x378, 1)  #RELAY-1 OFF
SetBit(0x378, 2)  #RELAY-2 ON
ResetBit(0x378, 2)  #RELAY-2 OFF
SetBit(0x378, 3)  #RELAY-3 ON
ResetBit(0x378, 3)  #RELAY-3 ON
SetBit(0x378, 4)  #RELAY-4 ON
ResetBit(0x378, 4)  #RELAY-4 OFF

Semoga bermanfaat.

Selamat belajar dan selamat berkarya!

🙂

Tinggalkan Balasan

Isikan data di bawah atau klik salah satu ikon untuk log in:

Logo WordPress.com

You are commenting using your WordPress.com account. Logout / Ubah )

Gambar Twitter

You are commenting using your Twitter account. Logout / Ubah )

Foto Facebook

You are commenting using your Facebook account. Logout / Ubah )

Foto Google+

You are commenting using your Google+ account. Logout / Ubah )

Connecting to %s