Mengontrol USB Relay 1-Channel USB-1REL Secara Remote Melalui Koneksi TCP Menggunakan Freepascal dan ZeroMQ


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
  begin
    if 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.

USB1RNET_FPC Usage
USB1RSVR Usage
USB1RSVR Running dengan port koneksi 9999

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.

USB1RNET_FPC yang mengirim perintah ke USB1RSVR

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.

Satu respons untuk “Mengontrol USB Relay 1-Channel USB-1REL Secara Remote Melalui Koneksi TCP Menggunakan Freepascal dan ZeroMQ

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 )

Foto Google

You are commenting using your Google 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 )

Connecting to %s

This site uses Akismet to reduce spam. Learn how your comment data is processed.