Serial
port merupakan sebuah port yang terdapat pada komputer/laptop yang
dapat digunakan sebagai jalur komunikasi antara komputer/laptop dengan
hardware lainnya seperti mikrokontroller dan lain sebagainya.
pada
postingan kali ini, saya akan coba berbagi tentang program sederhana
yang dapat menerima dan mengirim data melalui komunikasi serial.
untuk
dapat melakukan komunikasi serial, dibutuhkan sebuah library yaitu RxTx
yang mana telah saya bahas mengenai cara instalasinya disini dan cara menambahkan pada project yang kita buat seperti postingan yang ada disini.
Secara umum, komunikasi yang menggunakan serial port pasti akan melalui langkah-langkah berikut ini :
- Pencarian port serial
- Koneksi ke port serial
- inisialisasi input dan output stream
- Memutuskan koneksi port serial
- Kirim data
- Terima data
sekarang akan coba dibahas sedikit mengenai program pada aplikasi kirim dan terima data serial ini.
1. Pencarian port serial
berikut ini program untuk mencari port serial yang sedang aktif pada komputer/laptop
public void
cekSerialPort() {
port =
CommPortIdentifier.getPortIdentifiers();
while (port.hasMoreElements()) {
CommPortIdentifier curPort =
(CommPortIdentifier) port.nextElement();
if (curPort.getPortType() ==
CommPortIdentifier.PORT_SERIAL) {
window.jCommPort.addItem(curPort.getName());
portMap.put(curPort.getName(),
curPort);
}
}
}
pada
program diatas, program akan mengecek setiap port yang aktif pada
komputer, yang kemudian port-port tersebut akan dicek tipe nya dengan
menggunakan .getPortType(). Jika port tersebut merupakan port
serial, maka identitas port tersebut akan didaftarkan atau ditambahkan
pada comboBox pada tampilan GUI.
2. Koneksi Port Serial
public void
connect() {
String selectedPort = (String)
window.jCommPort.getSelectedItem();
portIdentifier = (CommPortIdentifier)
portMap.get(selectedPort);
CommPort commPort = null;
try {
commPort =
portIdentifier.open(null, TIMEOUT);
serialPort = (SerialPort) commPort;
setConnected(true);
window.bConn.setText("Disconnect");
} catch (PortInUseException e) {
statusPort = selectedPort + "
is in use. (" + e.toString() + ")";
JOptionPane.showMessageDialog(null,
statusPort);
} catch (Exception e) {
statusPort = "Failed to open
" + selectedPort + "(" + e.toString() + ")";
JOptionPane.showMessageDialog(null,
statusPort);
}
}
Program
diatas digunakan untuk membuka koneksi dengan serial port yang
sebelumnya telah ditentukan dengan cara memilih salah satu serial port
yang tersedia pada comboBox. perintah yang digunakan untuk membuka
koneksi adalah .open()
3. Inisialisasi input/output stream
public boolean
initIOStream() {
boolean successful = false;
try {
inPut =
serialPort.getInputStream();
outPut =
serialPort.getOutputStream();
successful = true;
return successful;
} catch (IOException e) {
statusPort = "I/O Streams
failed to open. (" + e.toString() + ")";
JOptionPane.showMessageDialog(null,
statusPort);
return successful;
}
}
program
ini akan menginisialisasi input/output stream yang nantinya digunakan
untuk menampung data yang masuk ataupun data yang akan dikirim kan dari
aplikasi menuju perangkat lainnya.
4. Memutuskan koneksi serial
public void
disconnect() {
try {
serialPort.removeEventListener();
serialPort.close();
inPut.close();
setConnected(false);
statusPort = "PORT disconnect
successfully";
JOptionPane.showMessageDialog(null,
statusPort);
window.bConn.setText("Connect");
} catch (Exception e) {
statusPort = "Failed to close
" + serialPort.getName() + "(" + e.toString() + ")";
JOptionPane.showMessageDialog(null,
statusPort);
}
}
Program
tersebut akan memutuskan koneksi antara port serial dengan aplikasi.
pada saat memutuskan koneksi serial port harus di tutup dengan
menggunakan perintah .close(), begitu juga dengan input/output stream nya.
5. Kirim Data Serial
public void
kirimData(Byte a){
try {
outPut.write(a);
outPut.write(10);
outPut.flush();
} catch (IOException ex) {
System.out.println("Kirim
Gagal");
}
}
Program diatas akan mengirimkan data serial. tipe data yang bisa dikirimkan berupa "Byte" dan "Integer". pengiriman dilaksanakan saat ada perintah .write(a), kemudian .flush() digunakan untuk mengosongkan kembali outputstream.
6. Terima Data Serial
untuk
dapat menerima data serial setiap saat, maka dimanfaatkan event yang
khusus menangani data serial yang masuk. berikut merupakan program untuk
inisialisasi event beserta program event yang menangani data serial
yang masuk ke aplikasi.
public void
initListener() {
try {
serialPort.addEventListener(this);
serialPort.notifyOnDataAvailable(true);
} catch (TooManyListenersException e) {
JOptionPane.showMessageDialog(null,
e.toString());
}
}
public void serialEvent(SerialPortEvent
evt) {
char dataSerial = 0; // Untuk menampung
input dari serial port
if (evt.getEventType() ==
SerialPortEvent.DATA_AVAILABLE) {
try {
dataSerial = (char)
inPut.read();
window.txtDataIn.setText(String.valueOf(dataSerial));
} catch (IOException ex) {
JOptionPane.showMessageDialog(null, ex.toString());
}
}
}
contoh tampilan aplikasi yang saya buat :
saat aplikasi dijalankan maka tampilan awal aplikasi adalah sebagai berikut :
setelah tulisan "Search Port" ditekan maka tampilan akan berubah sebagai berikut :
untuk
mengkoneksikan aplikasi dengan serial port, arahkan kursor ke tombol
"connect" kemudian klik tombol tersebut. setelah itu jika berhasil
terkoneksi maka tampilan aplikasi akan sebagai berikut :
Jika koneksi gagal, maka akan muncul messageBox yang menjelaskan penyebab gagalnya koneksi.
untuk memutuskan koneksi tekan saja tombol "Disconnect".
Saat
aplikasi telah terkoneksi dengan serial port, maka aplikasi dalam
posisi stand by menerima data serial yang mana setiap data yang diterima
akan ditampilkan pada textBox. untuk mengirim data, tekan saja tombol
kirim data. pada aplikasi ini jika tombol kirim data ditekan, maka
aplikasi akan mengirimkan data "a".
Aplikasi lengkapnya dapat anda download disini.
Semoga bermanfaat..... :)