Archive
Berkenalan Dengan pdScript, Interpreter Pascal Buatan Precision Software And Consulting – Membuat Program Kontroler Modul Relay LPT-8REL
pdScript (Precision Delphi Script) adalah sebuah program interpreter bahasa skrip Delphi/Pascal yang didukung dengan fasilitas pemrograman GUI yang cukup lengkap. Interpreter pdScript bersifat freeware untuk keperluan pribadi, pendidikan, ataupun korporasi.
Interpreter pdScript dapat mengeksekusi skrip Delphi/Pascal langsung dari lingkungan Windows, dari command-line, atau dari interpreter dynamic-library yang dijalankan dari dalam suatu program aplikasi (embedded script).
Dengan pdScript, kita juga dapat menghasilkan file executable dengan pilihan enkripsi untuk keperluan proteksi program. Untuk program-program aplikasi sederhana kita bisa menggunakan pdScript, sehingga dapat menjadi alternatif dari Delphi. Mantab, bukan?
Berikut adalah aplikasi pdScript (simply copy-pasted from pdScript website):
- Tasks automation – easy to use, yet powerful way to solve the current and/or recurring tasks
- Externally used scripts – can be used as an independent (external) extension for your own applications
- Integrated scripting – can serve as a scripting engine for your application’s plug-in mechanism
- Development – can be used to design and run a simple, but ready to use, applications
- At school – possibility of learning the Object Pascal language in simplified Delphi like environment
Untuk mendukung interpreter pdScript, Precision Software & Consulting juga menyediakan produk pdScript IDE. Lisensi pdScript IDE versi Lite dapat dibeli seharga 11 euro. Kalau dirupiahkan sekitar 140an ribu. Sangat terjangkau bukan?
Memang tidak semua fitur Delphi ada pada pdScript karena memang pdScript tidak ditujukan untuk menggantikan Delphi. Yang sangat menarik adalah, pdScript IDE memiliki visual designer seperti layaknya Delphi. Komponen bawaannya juga banyak, sangat memadai untuk aplikasi desktop. Dan komponen penting yang jarang ditemukan pada IDE yang lain adalah komponen TStringGrid dan TSpeedButton. Keduanya adalah komponen favorit saya.
Untuk membuktikan sedikit kemampuan dari pdScript, marilah kita mencoba membuat program sederhana yakni program kontrol modul relay LPT-8REL.
Desain user-interface dari program kontrol modul relay LPT-8REL ditunjukkan oleh gambar di samping. Sangat sederhana, hanya terdiri dari 8 pasang button ON/OFF untuk masing-masing relay (RELAY-1 s/d RELAY-8) dan beberapa label, image, dan timer.
Untuk menyederhanakan skrip, maka kita berikan nomor tag pada setiap button. Untuk button RELAY-1: ON dan RELAY-1: OFF, kita berikan nilai properti Tag=1. Untuk button RELAY-2: ON dan RELAY-2: OFF, kita berikan nilai properti Tag=2. Dan seterusnya hingga button RELAY-8.
Nomor Tag ini nantinya akan digunakan untuk mengidentifikasi button manakah yang di-klik oleh user. Dengan teknik ini, skrip akan jauh lebih sederhana. Perhatikan listing program selengkapnya berikut ini.
//Controller LPT-8RELAY – Chandra MDE – http://teknikelektrolinks.com
program LPT8Relay;var
LPTAddress: Word;
LPTValue: Byte;
RelayOn: array[1..8] of Byte;
RelayOff: array[1..8] of Byte;
function Inp32(PortAdr: word): byte; external ‘Inp32@inpout32.dll stdcall’;
function Out32(PortAdr: word; Data: byte): byte; external ‘Out32@inpout32.dll stdcall’;procedure Relay(n: Byte; s: Byte);
begin
LPTValue:= Inp32(LPTAddress);
if s=0 then
LPTValue:= LPTValue AND RelayOff[n]
else
LPTValue:= LPTValue OR RelayOn[n];
Out32(LPTAddress, LPTValue);
end;procedure ButtonClick(Sender: TObject);
begin
if TButton(Sender).Caption=’ON’ then
begin
Relay(TButton(Sender).Tag, 1);
end else if TButton(Sender).Caption=’OFF’ then
begin
Relay(TButton(Sender).Tag, 0);
end;
end;procedure Timer1_OnTimer(Sender: TObject);
begin
Label3.Caption:= ‘Today: ‘ + FormatDateTime(‘dd/mm/yyyy – hh:mm:ss’, Now);
end;procedure AssignEvents;
begin
Button1.OnClick := @ButtonClick;
Button2.OnClick := @ButtonClick;
Button3.OnClick := @ButtonClick;
Button4.OnClick := @ButtonClick;
Button5.OnClick := @ButtonClick;
Button6.OnClick := @ButtonClick;
Button7.OnClick := @ButtonClick;
Button8.OnClick := @ButtonClick;
Button9.OnClick := @ButtonClick;
Button10.OnClick := @ButtonClick;
Button11.OnClick := @ButtonClick;
Button12.OnClick := @ButtonClick;
Button13.OnClick := @ButtonClick;
Button14.OnClick := @ButtonClick;
Button15.OnClick := @ButtonClick;
Button16.OnClick := @ButtonClick;
Timer1.OnTimer := @Timer1_OnTimer;
end;var
n: Byte;
begin
RelayOn[1]:= 1;
RelayOn[2]:= 2;
RelayOn[3]:= 4;
RelayOn[4]:= 8;
RelayOn[5]:= 16;
RelayOn[6]:= 32;
RelayOn[7]:= 64;
RelayOn[8]:= 128;
for n:= 1 to 8 do RelayOff[n]:= 255-RelayOn[n];
LPTValue:= 0;
LPTAddress:= $378;
AssignEvents;
end.
Jika Anda perhatikan, pada prosedur AssignEvents, Button1 s/d Button16 memiliki prosedur event-handler yang sama yakni ButtonClick. Dan pada prosedur ButtonClick dilakukanlah seleksi/identifikasi button manakah yang di-klik oleh user. Bandingkan jika masing-masing button memiliki prosedur event-handler sendiri-sendiri, pasti skripnya jauh lebih panjang.
Satu lagi yang perlu diketahui adalah pada pdScript kita tidak bisa menginisialisasi nilai variabel pada saat pendeklarasian seperti layaknya Delphi. Itulah sebabnya nilai array RelayOn dan RelayOff diisi secara manual menggunakan baris-baris perintah program.
Skrip di atas menggunakan library InpOut32.dll untuk mengakses port paralel LPT. Untuk itu perlu adanya pendeklarasian fungsi eksternal sebagai berikut:
function Inp32(PortAdr: word): byte; external ‘Inp32@inpout32.dll stdcall’;
function Out32(PortAdr: word; Data: byte): byte; external ‘Out32@inpout32.dll stdcall’;
Deklarasi tersebut sedikit berbeda dengan pendeklarasian pada Delphi/Lazarus.
Nah, bagaimanakah hasilnya jika skrip di atas kita running? Berikut adalah screenshot hasil interpretasi skrip di atas oleh pdScript.
Sederhana tapi mantab, bukan?
Semoga bermanfaat!
Program Kontrol Modul USB-2REL Menggunakan Lazarus/Free Pascal Dengan LibUSB.Pas
Pada tulisan terdahulu, program kontrol modul USB-2REL versi Lazarus/Free Pascal masih menggunakan fungsi ShellExecute untuk mengeksekusi program USB2R.EXE. Tapi (alhamdulillaah) tidak demikian dengan program yang akan kita bahas pada tulisan ini.
Program kita kali ini akan langsung mengakses port USB menggunakan library libusb0.dll yang merupakan bawaan paket driver libusb-win32.
Special thanks to Stephan Meyer, Johannes Erdfelt, and Yvo Nelemans for providing the special unit LibUSB.Pas.
File LibUSB.Pas yang saya dapat dari sebuah forum berbahasa Jerman ini dibuat menggunakan Delphi, oleh karenanya perlu dilakukan sedikit modifikasi agar sesuai dengan aturan kompiler Free Pascal. Untuk versi Delphi, silakan baca di sini.
File libusb.pas untuk Lazarus/Free Pascal lengkap dengan project Lazarus USB-2REL dapat Anda miliki dengan memberikan komentar pada tulisan ini. Cantumkan nama dan alamat email yang benar dan secepatnya akan saya emailkan link untuk mengunduh file project Lazarus yang dimaksud.
![]()
Agar program dapat berkomunikasi dengan modul USB-2REL, maka program harus memiliki handle (pointer) dari modul USB-2REL. Untuk keperluan itu, kita buat sebuah fungsi untuk mencari dan mendapatkan handle suatu piranti USB sebagai berikut:
function USBFindDevice(VID, PID: word): pUSB_Device;
var
bus: PUSB_BUS;
dev: PUSB_device;
begin
result := nil;
usb_init();
usb_find_busses();
usb_find_devices();
bus:=USB_get_Busses;
while (bus<>nil) do
begin
dev:= bus^.devices;
while (dev<>nil) do begin
if (dev^.descriptor.idVendor=VID) and (dev^.descriptor.idProduct=PID) then
result:=dev;
dev:=dev^.next;
end;
bus:=bus^.next;
end;
end;
Dengan menggunakan fungsi USBFindDevice(), program mencari dan mendapatkan handle dari modul USB-2REL ketika form diciptakan. Berikut adalah rutin dari event FormCreate:
procedure TForm1.FormCreate(Sender: TObject);
begin
USB2REL_Device:= USBFindDevice(5824, 1500);
USB2REL_Handle:= usb_open(USB2REL_Device);
end;
Jika rutin di atas berhasil, maka handle dari modul USB-2REL akan tersimpan pada variabel USB2REL_Handle.
Catatan: Pada contoh program ini tidak dilakukan proses validasi apakah fungsi berhasil mendapatkan handle ataukah tidak. Silakan ditambahkan sendiri ya.
![]()
Untuk mengontrol relay-relay modul USB-2REL, digunakan fungsi usb_control_msg() sebagai berikut:
procedure TForm1.btnRelay1OnClick(Sender: TObject);
begin
usb_control_msg(USB2REL_Handle, $40, 1, 1, 1, buffer, sizeof(buffer), 5000);
grpRelay1.Caption:= ‘ RELAY-1 = ON ‘;
end;procedure TForm1.btnRelay1OffClick(Sender: TObject);
begin
usb_control_msg(USB2REL_Handle, $40, 1, 0, 1, buffer, sizeof(buffer), 5000);
grpRelay1.Caption:= ‘ RELAY-1 = OFF ‘;
end;procedure TForm1.btnRelay2OnClick(Sender: TObject);
begin
usb_control_msg(USB2REL_Handle, $40, 1, 1, 2, buffer, sizeof(buffer), 5000);
grpRelay2.Caption:= ‘ RELAY-2 = ON ‘;
end;procedure TForm1.btnRelay2OffClick(Sender: TObject);
begin
usb_control_msg(USB2REL_Handle, $40, 1, 0, 2, buffer, sizeof(buffer), 5000);
grpRelay2.Caption:= ‘ RELAY-2 = OFF ‘;
end;procedure TForm1.btnAllRelayOnClick(Sender: TObject);
begin
usb_control_msg(USB2REL_Handle, $40, 2, 0, 0, buffer, sizeof(buffer), 5000);
grpRelay1.Caption:= ‘ RELAY-1 = ON ‘;
grpRelay2.Caption:= ‘ RELAY-2 = ON ‘;
end;procedure TForm1.btnAllRelayOffClick(Sender: TObject);
begin
usb_control_msg(USB2REL_Handle, $40, 3, 0, 0, buffer, sizeof(buffer), 5000);
grpRelay1.Caption:= ‘ RELAY-1 = OFF ‘;
grpRelay2.Caption:= ‘ RELAY-2 = OFF ‘;
end;
Project selengkapnya dapat Anda miliki dengan memberikan komentar Anda pada tulisan ini. Cantumkan nama dan alamat email yang benar dan secepatnya akan kami kirimkan download link untuk mengunduh file project Lazarus yang dimaksud.
Modul USB-2REL dapat Anda peroleh di: http://teknikelektrolinks.com.
Selamat belajar dan selamat berkarya!
Program Kontrol Modul USB-2REL Menggunakan Delphi Dengan libusb.pas
Gambar di samping adalah screenshot program demo pengontrolan modul USB-2REL menggunakan Delphi yang mengakses port USB menggunakan library dari paket program driver libusb-win32.
Tidak seperti program Delphi sebelumnya yang menggunakan fungsi ShellExecute untuk mengeksekusi program USB2R.EXE untuk mengontrol relay pada modul USB-2REL, kali ini akan saya berikan contoh program Delphi untuk mengontrol LED dan RELAY pada modul USB-2REL yang langsung mengakses port USB menggunakan library libusb0.dll.
Thanks to Stephan Meyer, Johannes Erdfelt, and Yvo Nelemans for providing the special unit LIBUSB.PAS
![]()
Project Delphi yang kita buat ini mengikutsertakan unit libusb.pas yang berisi definisi/deklarasi fungsi-fungsi yang ada dalam libusb0.dll. Selain fungsi-fungsi, libusb.pas juga mendeklarasikan struktur-struktur data, konstanta-konstanta, dan variabel-variabel yang berkaitan dengan implementasi port USB.
Untuk dapat mengontrol LED dan RELAY pada modul USB-2REL, pertama-tama kita harus mendapatkan handle dari USB-2REL. Berikut adalah penggalan programnya.
var
Form1: TForm1;
USB2REL_Device: pUSB_Device;
USB2REL_Handle: pUSB_Dev_Handle;
buffer: array[0..100] of byte;implementation
{$R *.dfm}
function USBFindDevice(VID, PID: word): pUSB_Device;
var
bus: PUSB_BUS;
dev: PUSB_device;
begin
result := nil;
usb_init();
usb_find_busses();
usb_find_devices();
bus:=USB_get_Busses;
while (bus<>nil) do
begin
dev:=bus.devices;
while (dev<>nil) do begin
if (dev.descriptor.idVendor=VID) and (dev.descriptor.idProduct=PID) then
result:=dev;
dev:=dev.next;
end;
bus:=bus.next;
end;
end;procedure TForm1.FormCreate(Sender: TObject);
begin
USB2REL_Device:= USBFindDevice(5824, 1500);
USB2REL_Handle:= usb_open(USB2REL_Device);
end;
Fungsi USBFindDevice() adalah fungsi yang saya dapatkan di sebuah forum berbahasa Jerman http://www.entwickler-ecke.de yang telah saya modifikasi sedikit.
Perintah: USB2REL_Device:= USBFindDevice(5824, 1500); berfungsi untuk mendapatkan pointer dari device USB-2REL. Modul USB-2REL memiliki VID=5824 dan PID=1500. Sedangkan perintah: USB2REL_Handle:= usb_open(USB2REL_Device); berfungsi untuk membuka piranti USB dengan pointer device yang dimaksud (dalam hal ini adalah USB-2REL) untuk mendapatkan handle dari modul USB-2REL. Jika kedua fungsi ini berhasil dengan baik, maka kita siap mengirimkan perintah kepada modul USB-2REL.
Kok gak ada validasinya, Pak?
![]()
Tambah sendiri aja deh…![]()
Dan berikut adalah rutin-rutin untuk mengontrol USB-2REL yang sesuai dengan event untuk masing-masing button seperti pada screenshot di atas.
procedure TForm1.Relay1OnClick(Sender: TObject);
begin
usb_control_msg(USB2REL_Handle, $40, 1, 1, 1, buffer, sizeof(buffer), 5000);
grpRelay1.Caption:= ‘ RELAY-1 = ON ‘;
end;procedure TForm1.Relay1OffClick(Sender: TObject);
begin
usb_control_msg(USB2REL_Handle, $40, 1, 0, 1, buffer, sizeof(buffer), 5000);
grpRelay1.Caption:= ‘ RELAY-1 = OFF ‘;
end;procedure TForm1.Relay2OnClick(Sender: TObject);
begin
usb_control_msg(USB2REL_Handle, $40, 1, 1, 2, buffer, sizeof(buffer), 5000);
grpRelay2.Caption:= ‘ RELAY-2 = ON ‘;
end;procedure TForm1.Relay2OffClick(Sender: TObject);
begin
usb_control_msg(USB2REL_Handle, $40, 1, 0, 2, buffer, sizeof(buffer), 5000);
grpRelay2.Caption:= ‘ RELAY-2 = OFF ‘;
end;procedure TForm1.AllOnClick(Sender: TObject);
begin
usb_control_msg(USB2REL_Handle, $40, 2, 0, 0, buffer, sizeof(buffer), 5000);
grpRelay1.Caption:= ‘ RELAY-1 = ON ‘;
grpRelay2.Caption:= ‘ RELAY-2 = ON ‘;
end;procedure TForm1.AllOffClick(Sender: TObject);
begin
usb_control_msg(USB2REL_Handle, $40, 3, 0, 0, buffer, sizeof(buffer), 5000);
grpRelay1.Caption:= ‘ RELAY-1 = OFF ‘;
grpRelay2.Caption:= ‘ RELAY-2 = OFF ‘;
end;
Sangat mudah, bukan?
Jika Anda berminat untuk mendapatkan file project Delphi secara lengkap, silakan menuliskan komentar di bawah tulisan ini beserta nama dan alamat email yang benar dan kami akan menginformasikan download link-nya.
Modul USB-2REL dapat dipesan di http://teknikelektrolinks.com.
Selamat belajar dan selamat berkarya!
Mengontrol Relay USB-2REL Via Web/Internet Menggunakan Python-CGI
Mengontrol relay via web/internet tidak pernah semudah ini saya rasakan. Pada tulisan terdahulu tentang pengontrolan modul USB-2REL via web/internet menggunakan PHP, saya menggunakan program utilitas USB2R.EXE untuk mengontrol USB-2REL. Program tersebut dieksekusi oleh PHP menggunakan fungsi exec().
Dengan Python-CGI, kita tidak memerlukan lagi program USB2R.EXE karena Python memiliki library yang siap-pakai dan handal untuk mengakses port USB. Modul yang digunakan adalah PyUSB 1.0. Modul ini dapat Anda download melalui situsnya di: http://sourceforge.net/projects/pyusb/.
Langsung saja, berikut adalah listing program pyusb2rel.cgi yang selengkapnya.
# pyusb2rel.cgi
# Kontrol relay USB-2REL via web
# Chandra MDE (22/04/2013)
# Teknik Elektro Links
# http://teknikelektrolinks.comimport cgi
import usb.core
usb2rel = usb.core.find(idVendor=5824, idProduct=1500)
fields = cgi.FieldStorage()print "Content-type: text/html\r\n\r\n"
print "<html>"
print "<head>"
print "<h2>Kontrol USB-2REL Via Web (Python-CGI)</h2>"
print "<hr/>"
print "</head>"
print ‘<body style="font-family:Tahoma">’
print ‘<br />’
print ‘<table>’
print ‘<tr>’
print ‘ <form action="pyusb2rel.cgi" method="GET">’
print ‘ <td align="center">’
print ‘ <input type="submit" name="BTN" style="width: 120px; height: 40px;" value="RELAY-1 ON"><br /><br />’
print ‘ <input type="submit" name="BTN" style="width: 120px; height: 40px;" value="RELAY-2 ON"><br /><br />’
print ‘ <input type="submit" name="BTN" style="width: 120px; height: 40px;" value="RELAY1,2 ON"><br /><br />’
print ‘ </td>’
print ‘ <td></td><td></td><td></td>’
print ‘ <td align="center">’
print ‘ <input type="submit" name="BTN" style="width: 120px; height: 40px;" value="RELAY-1 OFF"><br /><br />’
print ‘ <input type="submit" name="BTN" style="width: 120px; height: 40px;" value="RELAY-2 OFF"><br /><br />’
print ‘ <input type="submit" name="BTN" style="width: 120px; height: 40px;" value="RELAY1,2 OFF"><br /><br />’
print ‘ </td>’
print ‘ <td></td><td></td><td></td>’
print ‘ </form>’
print ‘ <td><img src="usb2rel.jpg" width="200" height="150" style="border:2px solid black"><br /><br /></td>’
print ‘</tr><tr></tr><tr></tr>’
print ‘</table>’
print ‘<hr/>’
print ‘<h4>Chandra MDE – <a href="http://teknikelektrolinks.com">http://teknikelektrolinks.com</a></h4>’
print ‘</body>’
print ‘</html>’# proses permintaan user
if fields["BTN"].value == "RELAY-1 ON":
usb2rel.ctrl_transfer(0×40, 1, 1, 1, None)
elif fields["BTN"].value == "RELAY-1 OFF":
usb2rel.ctrl_transfer(0×40, 1, 0, 1, None)
elif fields["BTN"].value == "RELAY-2 ON":
usb2rel.ctrl_transfer(0×40, 1, 1, 2, None)
elif fields["BTN"].value == "RELAY-2 OFF":
usb2rel.ctrl_transfer(0×40, 1, 0, 2, None)
elif fields["BTN"].value == "RELAY1,2 ON":
usb2rel.ctrl_transfer(0×40, 2, 0, 0, None)
elif fields["BTN"].value == "RELAY1,2 OFF":
usb2rel.ctrl_transfer(0×40, 3, 0, 0, None)
Skrip mengimport modul cgi dan usb.core untuk berinteraksi dengan web browser melalui CGI dan berinteraksi dengan modul USB-2REL.
Skrip menampilkan 6 buah button submit dengan nama yang sama yakni name="BTN". Pemberian nama yang sama untuk keenam button submit ini bertujuan untuk memudahkan proses penyeleksian tombol manakah yang ditekan oleh user.
Ukuran button submit adalah 120px x 40px yang diatur menggunakan parameter style sebagai berikut:
print ‘<input type="submit" name="BTN" style="width: 120px; height: 40px;" value="RELAY-1 OFF"><br /><br />’
Parameter value diisi nilai string sesuai dengan fungsi button. Button untuk mengaktifkan RELAY-1 diberi value="RELAY-1 ON". Untuk button yang berfungsi untuk mematikan RELAY-1 diberi value="RELAY-2 OFF". Demikian seterusnya.
Untuk mengambil data yang di-submit oleh user, perintah:
fields = cgi.FieldStorage()
dan untuk menyeleksi button manakah yang ditekan oleh user programnya adalah sebagai berikut:
# proses permintaan user
if fields["BTN"].value == "RELAY-1 ON":
usb2rel.ctrl_transfer(0×40, 1, 1, 1, None)
elif fields["BTN"].value == "RELAY-1 OFF":
usb2rel.ctrl_transfer(0×40, 1, 0, 1, None)
elif fields["BTN"].value == "RELAY-2 ON":
usb2rel.ctrl_transfer(0×40, 1, 1, 2, None)
elif fields["BTN"].value == "RELAY-2 OFF":
usb2rel.ctrl_transfer(0×40, 1, 0, 2, None)
elif fields["BTN"].value == "RELAY1,2 ON":
usb2rel.ctrl_transfer(0×40, 2, 0, 0, None)
elif fields["BTN"].value == "RELAY1,2 OFF":
usb2rel.ctrl_transfer(0×40, 3, 0, 0, None)
Di sinilah letak keuntungan dari pemberian parameter name yang sama untuk keenam button sumbit meskipun fungsinya berbeda-beda. Dengan name yang sama kita dapat dengan mudah mengidentifikasi tombol manakah yang ditekan oleh user.
Pada awal skrip, handle untuk modul USB-2REL didapatkan dengan perintah:
usb2rel = usb.core.find(idVendor=5824, idProduct=1500)
Setelah handle didapat, maka skrip dapat mengirimkan perintah ke modul USB-2REL dengan perintah:
usb2rel.ctrl_transfer(0×40, 1, 1, 1, None) #RELAY-1 ON
Pad eksperimen ini saya menggunakan web server Mongoose versi 3.6. Setting untuk program Mongoose pada eksperimen ini adalah sebagai berikut:
Yang terpenting adalah parameter cgi_interpreter harus diarahkan pada file python.exe yang ada pada komputer yang digunakan sebagai server. Pada komputer saya, python.exe terletak pada direktori c:\python25\python.exe.
Python itu cespleng, bukan?
Jika Anda berminat untuk bereksperimen dengan modul USB-2REL, Anda bisa mendapatkannya di: http://teknikelektrolinks.com.
Dan jika Anda menginginkan file-file hasil eksperimen ini, yakni yang terdiri dari file pyusb2rel.cgi lengkap dengan web server Mongoose yang siap digunakan, silakan memberikan komentar pada tulisan ini disertai alamat email yang benar.
Semoga bermanfaat. Selamat belajar dan selamat berkarya!
Program Kontrol Modul USB-2REL Versi Python GUI (Tkinter)
Sudah semingguan saya "tergila-gila" dengan Python. Betul-betul terpesona karena telah membuktikan sendiri bagaimana mudahnya membuat program dengan Python. Program yang terasa rumit ketika saya kerjakan menggunakan bahasa pemrograman yang lain seperti VB.NET, Delphi/Lazarus, FreeBASIC, XBLite, dan C, terasa sangat mudah ketika saya kerjakan dengan Python.
Python itu cespleng.
Hampir setiap tutorial dan buku pemrograman Python yang saya baca, selalu menyatakan bahwa Python adalah bahasa pemrograman yang gamblang, mudah dipelajari dan mudah digunakan. Dinyatakan juga bahwa dengan Python kita dapat berkonsentrasi pada bagaimana menyelesaikan masalah pemrograman dan bukannya berkonsentrasi pada pemrograman.
Python mempunyai julukan: "Programming at the speed of thought". Mungkin karena saking mudahnya mengimplementasikan ide/pemikiran menjadi sebuah program, makanya Python mendapat julukan tersebut.
Nah, jika Anda tertarik dengan Python, maka saya sarankan untuk banyak membaca pengantar pemrograman Python dari berbagai sumber agar semakin termotivasi untuk segera mempelajari dan menggunakannya.
![]()
Satu hal lagi yang membuat saya semakin tergila-gila adalah karena Python juga handal digunakan untuk pemrograman CGI, bahkan dengan kekayaan library yang dimiliki Python, interpreter ini memiliki kelebihan dibanding pemrograman CGI lain seperti PHP, Lua, atau Ruby. Setidaknya, begitulah menurut kebutuhan saya.
Satu-satunya hal yang cukup menghambat laju pengembangan program aplikasi python adalah GUI. Pemrograman GUI pada Python cukup mengasikkan (baca=mengerikan).
Tapi lantaran ingin sekali membuat program GUI untuk antarmuka kontrol modul RELAY USB, RELAY SERIAL, dan RELAY LPT, akhirnya kemarin saya luangkan waktu hampir seharian untuk belajar pemrograman GUI pada Python. Screenshot di atas adalah aplikasi Python GUI pertama yang pernah saya buat menggunakan Tkinter.
Sebelumnya, saya sudah bereksperimen dengan Python dan PyUSB 1.0 untuk mengontrol modul USB-2REL (baca di sini dan di sini). Dan alhamdulillaah kemarin sudah berhasil membuat versi GUI-nya.
Nah, berikut adalah source code program kontrol modul USB-2REL menggunakan bahasa Python yang didukung library PyUSB 1.0 dan library GUI Tkinter. Selamat menikmati
#——————————————————————————-
# Name: USB-2REL_GUI.py
# Purpose: Demo program kontrol modul USB-2REL
# Author: Chandra MDE
# Created: 19/04/2013
# Copyright: (c) Chandra MDE 2013
#——————————————————————————-import Tkinter
import tkMessageBox
import usb.coredef main():
Form1 = Tkinter.Tk()
Form1.title(‘Python USB-2REL by Chandra MDE’)
Form1.resizable(0, 0)ws = Form1.winfo_screenwidth()
hs = Form1.winfo_screenheight()
x = (ws/2) – (340/2)
y = (hs/2) – (220/2)
Form1.geometry(’340×220+%d+%d’ % (x, y))label1 = Tkinter.Label(Form1, fg=’blue’, font=’Arial 12 bold’, text=’Demo Program Kontrol Modul USB-2REL’).place(x=10, y=10)
btnRelay1On = Tkinter.Button(Form1, command=Relay1On, fg=’darkblue’, font=’Tahoma 9 bold’, width=10, height=1, text=’RELAY-1 ON’, padx=15, pady=4).place(x=40, y=50)
btnRelay1Off = Tkinter.Button(Form1, command=Relay1Off, fg=’darkblue’, font=’Tahoma 9 bold’, width=10, height=1, text=’RELAY-1 OFF’, padx=15, pady=4).place(x=40, y=85)btnRelay2On = Tkinter.Button(Form1, command=Relay2On, fg=’darkgreen’, font=’Tahoma 9 bold’, width=10, height=1, text=’RELAY-2 ON’, padx=15, pady=4).place(x=180, y=50)
btnRelay2Off = Tkinter.Button(Form1, command=Relay2Off, fg=’darkgreen’, font=’Tahoma 9 bold’, width=10, height=1, text=’RELAY-2 OFF’, padx=15, pady=4).place(x=180, y=85)btnRelay2On = Tkinter.Button(Form1, command=Relay12On, fg=’red’, font=’Tahoma 9 bold’, width=10, height=1, text=’ALL RELAY ON’, padx=15, pady=4).place(x=40, y=130)
btnRelay2Off = Tkinter.Button(Form1, command=Relay12Off, fg=’red’, font=’Tahoma 9 bold’, width=10, height=1, text=’ALL RELAY OFF’, padx=15, pady=4).place(x=180, y=130)label2 = Tkinter.Label(Form1, font=’Tahoma 8′, text=’TEKNIK ELEKTRO LINKS’).place(x=10, y=180)
label3 = Tkinter.Label(Form1, font=’Tahoma 8′, text=’Website: http://teknikelektrolinks.com’).place(x=10, y=195)label4 = Tkinter.Label(Form1, fg=’yellow’, bg=’red’, font=’Tahoma 10 bold’, text=’ (PyUSB, Tkinter) ‘).place(x=207, y=185)
#dapatkan handle dari USB-2REL
global usb2rel
usb2rel = usb.core.find(idVendor=5824, idProduct=1500)
if usb2rel == None:
tkMessageBox.showinfo(‘Error!’, "USB-2REL tidak ditemukan!")
Form1.destroy()Form1.mainloop()
def Relay1On():
print "Relay 1 on"
usb2rel.ctrl_transfer(0×40, 1, 1, 1, None)def Relay1Off():
print "Relay 1 off"
usb2rel.ctrl_transfer(0×40, 1, 0, 1, None)def Relay2On():
print "Relay 2 on"
usb2rel.ctrl_transfer(0×40, 1, 1, 2, None)def Relay2Off():
print "Relay 2 off"
usb2rel.ctrl_transfer(0×40, 1, 0, 2, None)def Relay12On():
print "Relay 1, 2 on"
usb2rel.ctrl_transfer(0×40, 2, 0, 0, None)def Relay12Off():
print "Relay 1, 2 off"
usb2rel.ctrl_transfer(0×40, 3, 0, 0, None)if __name__ == ‘__main__’:
main()
Program berfungsi dengan baik sekali sesuai dengan yang saya harapkan. Berikut adalah tampilan program Python GUI untuk modul USB-2REL pada platform Windows XP.
Modul USB-2REL dapat Anda dapatkan di: http://teknikelektrolinks.com.
Selamat belajar dan selamat berkarya!
Assalamu'alaikum... Namaku 



Recent Comments