USB-1REL (www.usbinov.com/usb-1rel) adalah modul USB Relay 1-Channel yang praktis dan mudah digunakan. Dengan modul ini, kita bisa mengontrol 1 buah relay melalui program komputer dengan cara mengakses atau memberikan perintah kepada modul USB-1REL melalui port USB.
Modul USB-1REL kami lengkapi dengan contoh program yang dilengkapi source code dalam beberapa bahasa pemrograman. Selain contoh program, kami juga menyediakan beberapa program utilitas antara lain:
- USB1RC – yakni program CLI (Command-Line Interface) untuk mengakses modul melalui console atau command prompt. Program ini dapat dipanggil melalui skrip/program apapun.
- USB1RSVR dan USB1RNET – yakni program bantu yang memungkinkan kita mengakses modul USB-1REL yang tertancap pada PC Host dari PC Client melalui jaringan komputer. USB1RSVR aktif pada PC Host. Program ini akan menunggu koneksi dan perintah dari USB1RNET yang dijalankan pada PC Client.
Program-program utilitas tersebut kami buat menggunakan pemrograman bahasa C. Program tersedia untuk platform Windows dan Linux. Dan untuk program USB1RSVR dan USB1RNET, kami menggunakan library messaging ZeroMQ untuk menunjang kinerja pengiriman pesan antar program.
Nah, pada tulisan ini, saya akan membagikan hasil eksperimen saya membuat program USB1RNET dengan menggunakan Freepascal. Dan tentunya menggunakan library messaging ZeroMQ.
ZeroMQ (https://zeromq.org/) adalah messaging libray asinkron dengan kinerja tinggi yang ditujukan untuk aplikasi terdistribusi (distributed application). ZeroMQ menyediakan layanan antrian pesan tanpa broker.
Untuk dapat menggunakan library ZeroMQ pada pemrograman Freepascal, maka kita perlu mengunduh file binding untuk Freepascal. Binding ZeroMQ untuk Freepascal tersedia pada link berikut ini: https://github.com/DJMaster/zeromq-fpc
Langsung saja, berikut ini adalah kode program Freepascal untuk program USB1RNET.
program usb1rnet_fpc; {$mode objfpc}{$H+} uses Classes, SysUtils, CustApp, zmq, zmq_utils; type TUSB1RNET = class(TCustomApplication) protected procedure DoRun; override; public constructor Create(TheOwner: TComponent); override; destructor Destroy; override; procedure Usage(); virtual; end; procedure TUSB1RNET.DoRun; var context: pointer; requester : pointer; rc, n, d: integer; s, usb1rsvr_addr: String; ms: TMemoryStream; begin if ParamCount <= 2 then begin Usage; Terminate; end; context := zmq_ctx_new(); requester := zmq_socket(context, ZMQ_REQ); writeln('Menghubungi server USB1RSVR…'); usb1rsvr_addr:= 'tcp://' + ParamStr(1) + ':' + ParamStr(2); rc := zmq_connect(requester, PChar(usb1rsvr_addr)); if (rc<>0) then begin writeln('Gagal menghubungi server.'); Exit; end; for n:=3 to ParamCount do beginif ParamStr(n)='ON' then
begin
writeln('SEND: ', ParamStr(n));
zmq_send(requester, PChar('ON'), 2, 0)
end else if ParamStr(n)='OFF' then
begin
writeln('SEND: ', ParamStr(n));
zmq_send(requester, PChar('OFF'), 3, 0)
end else if ParamStr(n)[1]='D' then
begin
s:= RightStr(ParamStr(n), length(ParamStr(n))-1);
d:= strtoint(s);
writeln('LOCAL DELAY: ', 10 * d);
sleep(10 * d);
end;
ms := TMemoryStream.Create;
ms.Position := 0;
zmq_recv_stream(requester, ms);
writeln('RECV: ', pchar(ms.Memory));
end; zmq_close(requester); zmq_ctx_destroy(context); Terminate; end; constructor TUSB1RNET.Create(TheOwner: TComponent); begin inherited Create(TheOwner); StopOnException:=True; end; destructor TUSB1RNET.Destroy; begin inherited Destroy; end; procedure TUSB1RNET.Usage; begin writeln('USB1RNET_FPC - USB1REL Network Remote Control Versi Freepascal'); writeln('Penggunaan: usb1rnet_fpc dst.'); writeln(' - ip : IP Address komputer dengan modul USB-1REL, contoh: 192.168.1.200'); writeln(' - port : port komunikasi, contoh: 8000, 8001, dst.'); writeln(' - CMD1 CMD2 CMD3 dst:'); writeln(' - ON : Relay On'); writeln(' - OFF : Relay Off'); writeln(' - Dn : Delay 10*n ms'); writeln('Contoh:'); writeln('C:\>usb1rnet_fpc 192.168.1.200 8008 ON (mengaktifkan relay USB-1REL pada PC Host'); writeln(' dengan IP 192.168.1.200 port 8008)'); writeln('C:\>usb1rnet_fpc 192.168.1.200 8119 OFF (mematikan relay USB-1REL pada PC'); writeln(' dengan IP 192.168.1.200 port 8119)'); writeln('C:\>usb1rnet_fpc 192.168.1.200 8001 ON D50 OFF (relay on--delay 500ms--relay off)'); writeln; writeln('Diprogram oleh Chandra MDE'); writeln('Freepascal + ZeroMQ'); writeln('USBINOV - Low-Speed USB Control & Sensing'); writeln('www.usbinov.com'); end; var Application: TUSB1RNET; begin Application:=TUSB1RNET.Create(nil); Application.Title:='USB1RNET-ZMQ'; Application.Run; Application.Free; end.
Berikut ini adalah tampilan program ketika dijalankan.



Ketika aktif, program USB1RSVR akan menunggu koneksi dari USB1RNET_FPC pada port 9999. Perintah dari PC Client akan diteruskan ke modul USB-1REL yang dalam eksperimen ini saya menggunakan modul USB-1REL dengan ID: USB1REL-281.
Berikut ini adalah tampilan program USB1RNET_FPC ketika mengontrol USB-1REL yang ada di PC Host.

Dari hasil eksperimen, maka dapat disimpulkan: untuk mode REQ/REP, binding zeromq-fpc bekerja dengan baik.
Aplikasi
Modul USB-1REL dengan program USB1RSVR dan USB1RNET dapat diaplikasikan untuk:
- mengontrol (ON/OFF) beban seperti lampu atau fan yang ada di ruangan lain secara remote melalui jaringan
- mereset power modem atau HUB yang ada di ruang server dari PC Client

Jika Anda berminat dengan USB Relay 1-Channel atau 2-channel atau lebih, silakan mengunjungi situs kami di teknikelektrolinks.com atau www.usbinov.com.
Anda juga bisa menghubungi saya melalui WA: 0882-3560-7047.
Semoga bermanfaat. Selamat belajar. Selamat berkarya.
[…] Mengontrol USB Relay 1-Channel USB-1REL Secara Remote Melalui Koneksi TCP Menggunakan Freepascal dan… […]