Wednesday, March 7, 2007

SMS Gateway Part 2

MENGGUNAKAN RS232 DENGAN BAHASA PROGRAM JAVA

Bahasa pemrograman java mendukung komponen RS232 tersebut. Yang disebut dengan javacommapi yang terdiri dari comm.jar, javax.comm.properties, dan win32com.dll yang dapat diunduh/download pada web site http://java.sun.com/products/javacomm/index.jsp.

Untuk system operasi Ms. Windows 2000 dan XP, hasil install-an sering kali bermasalah. Cara penanganannya adalah sebagai berikut :

1. Copy comm.jar pada direktori \jre\lib\ext

2. Copy win32com.dll pada direktori \jre\bin

3. Copy javax.comm.properties pada direktori \jre\lib

Hal-hal yang perlu diketahui pada komunikasi yaitu kecepatan pengiriman, data bits, parity, stop bits, dan flow control.

1. Kecepatan pengiriman, 300 bps sampai dengan 921600

2. Data bits, 5 sampai dengan 8 bits

3. Parity terdiri dari even, odd dan none

4. Stop bits, 1, 1.5 dan 2

5. Flow Control None

Pada salah satu contoh program pada web site www.sun.com untuk menggunakan alat RS232 adalah SimpleRead.java dan SimpleWrite.java. SimpleRead.java adalah program untuk membaca data yang didapatkan dari RS232 dan SimpleWrite.java adalah program untuk mengirimkan data melalui RS232.

Dengan catatan kecepatan, data bit, stop bit, dan pariti harus sama antara satu dengan lainnya. Sebagai contoh jalankan program program penerima di komputer penerima dan program pengirim dikomputer pengirim.

Program Penerima

/*

* @(#)SimpleRead.java 1.12 98/06/25 SMI

* Copyright (c) 1998 Sun Microsystems, Inc. All Rights Reserved.

* Program untuk Menerima data

*/

import java.io.*;

import java.util.*;

import javax.comm.*;

public class SimpleRead implements Runnable, SerialPortEventListener {

static CommPortIdentifier portId;

static Enumeration portList;

InputStream inputStream;

SerialPort serialPort;

Thread readThread;

public static void main(String[] args) {

//Mengidentifikasikan jumlah port pada komputer

portList = CommPortIdentifier.getPortIdentifiers();

while (portList.hasMoreElements()) {

portId = (CommPortIdentifier) portList.nextElement();

if (portId.getPortType()

== CommPortIdentifier.PORT_SERIAL) {

//yang dibuka hanya port pertama atau COM1

if (portId.getName().equals("COM1")) {

//jika menggunakan Unix

//if (portId.getName().equals("/dev/term/a")) {

SimpleRead reader = new SimpleRead();

}

}

}

}

public SimpleRead() {

try {

serialPort = (SerialPort)

portId.open("SimpleReadApp", 2000);

} catch (PortInUseException e) {}

try {

inputStream = serialPort.getInputStream();

} catch (IOException e) {}

try {

serialPort.addEventListener(this);

} catch (TooManyListenersException e) {}

serialPort.notifyOnDataAvailable(true);

try {

//speed 9600, databit 8, stopbit 1, parity none

serialPort.setSerialPortParams(9600,

SerialPort.DATABITS_8,

SerialPort.STOPBITS_1,

SerialPort.PARITY_NONE);

} catch (UnsupportedCommOperationException e) {}

readThread = new Thread(this);

readThread.start();

}

public void run() {

try {

Thread.sleep(20000);

} catch (InterruptedException e) {}

}

public void serialEvent(SerialPortEvent event) {

switch(event.getEventType()) {

case SerialPortEvent.BI:

case SerialPortEvent.OE:

case SerialPortEvent.FE:

case SerialPortEvent.PE:

case SerialPortEvent.CD:

case SerialPortEvent.CTS:

case SerialPortEvent.DSR:

case SerialPortEvent.RI:

case SerialPortEvent.OUTPUT_BUFFER_EMPTY:

break;

case SerialPortEvent.DATA_AVAILABLE:

//Menangkap data yang masuk ke komputer

byte[] readBuffer = new byte[20];

try {

while (inputStream.available() > 0) {

int numBytes = inputStream.read(readBuffer);

}

//tampilkan ke layar

System.out.print(new String(readBuffer));

} catch (IOException e) {}

break;

}

}

}

Program Pengirim

/*

* @(#)SimpleWrite.java 1.12 98/06/25 SMI

* Copyright (c) 1998 Sun Microsystems, Inc. All Rights Reserved.

* Program Untuk Mengirim Data

*/

import java.io.*;

import java.util.*;

import javax.comm.*;

public class SimpleWrite {

static Enumeration portList;

static CommPortIdentifier portId;

static String messageString = "Hello, world!\n";

static SerialPort serialPort;

static OutputStream outputStream;

public static void main(String[] args) {

portList = CommPortIdentifier.getPortIdentifiers();

while (portList.hasMoreElements()) {

portId = (CommPortIdentifier) portList.nextElement();

if (portId.getPortType() ==

CommPortIdentifier.PORT_SERIAL) {

// if (portId.getName().equals("COM1")) {

if (portId.getName().equals("/dev/term/a")) {

try {

serialPort = (SerialPort)

portId.open("SimpleWriteApp", 2000);

} catch (PortInUseException e) {}

try {

outputStream = serialPort.getOutputStream();

} catch (IOException e) {}

try {

//speed 9600, databit 8,

//stopbit 1, parity none

serialPort.setSerialPortParams(9600,

SerialPort.DATABITS_8,

SerialPort.STOPBITS_1,

SerialPort.PARITY_NONE);

} catch (UnsupportedCommOperationException e) {}

try {

//kirim Hello, World!

outputStream.write(messageString.getBytes());

} catch (IOException e) {}

}

}

}

}

}


RS232 DAN MODEM

Apabila interface RS232 di gunakan secara lengkap, maka penggunaannya lebih cenderung pada penggunaan modem. Dan pada modem, umumnya, telah disediakan perintah-perintah yang dapat digunakan oleh pengembang program. Perintah–perintah tersebut disebut dengan sebutan AT Command. Adapun perintah AT, bukan At atau at, adalah sebagai berikut :

+++

Mode data dirubah menjadi mode perintah tanpa harus melakukan pemutusan hubungan. Perintah ini harus disertai dengan Enter

A/

Mengulangi perintah terakhir

ATA

Menjawab panggilan secara manual

ATBn

Memilih protocol Bell or CCITT (ITU-T), model ini hanya berpengaruh pada modem dengan model V.22 atau V.21

n=0, CCITT V.22 atau V.21

n=1, Bell212 atau 103

ATDTn

Melakukan kontak ke nomor telpon

Contoh : ATDT021777777

ATEn

Perintah Echo. Semua perintah yang dilakukan akan tampil kembali pada layar

n=0, menon-aktifkan echo

n=1, mengaktifkan echo

ATHn

Hangup

n=0, Hang Up

n=1, off

ATIn

Pendeteksi identitas pabrikan dan setting

n=0, product code/merk

n=1, pengkalkulasian pertama/IMEI

n=2..3, prakiraan

n=4, OEM String

n=5..11, nilai ok

n=12, Pengkakulasian ROM

n=13, Versi RC

n=14, Nama Pabrik Pembuat

n=15, Pilihan Negara

n=17, GSM Option

n=18, Cek GSM Support

ATLn

Speaker Volume

n=0, Suara Terkecil

n=1, Suara Kecil

n=2, Suara Sedang

n=3, Suara Keras

ATMn

Pengontrolan Speaker

n=0, speaker tidak bersuara

n=1, speaker aktif jika terdapat penerimaan/pengiriman

n=2, speaker selalu aktif

n=3 speaker hanya aktif jika modem menjawab

ATQn

Respon balik modem ke computer

n=0, modem melakukan respon pada computer

n=1, modem tidak melakukan respon

ATSn

Melakukan penge-set-an dan membaca register atau melakukan autoanswer

ATSn=x, Melakukan penge-set-an variable n dengan nilai 1

ATSn?, membaca register n

ATZn

Reset modem

n=0, restore ke profil 0

n=1, restore ke profil 1

Perintah-perintah modem yang terdapat pada tabel merupakan sebagian dari perintah modem.

2 comments:

Anonymous said...

bos, bisa ajari by email caranya mbikin sms gateway g? help me. Thanks.

Anonymous said...

kita belajar lewat sini saja biar ilmu kita saling ke share, OK?!