Budiy • Upvote 0 • Downvote 0

Komunikasi Software Serial Pada Arduino

Pada umumnya kita bisa membuat perangkat arduino milik kita dapat berkomunikasi dengan arduino lain menggunakan komunikasi serial secara hardware serial. Komunikasi serial dapat dilakukan dengan menggunakan kabel. Sebelum membahas mengenai software serial, akan saya jelaskan terlebih dahulu mengenai hardware serial.


Hardware Serial

Komunikasi hardware serial dapat dilakukan dengan menggunakan pin TX dan RX pada arduino. Jika arduino ingin berkomunikasi dengan perangkat lain maka sambungan kabel yang digunakan harus disesuaikan. Pin TX berfungsi untuk mengirim data, sedangkan pin RX berfungsi untuk menerima data. Di bawah ini adalah contoh jika ingin menggunakan hardware serial sebagai metode komunikasi data.


Pin TX pada arduino (server) dihubungkan dengan pin RX pada arduino (client). Pin RX pada arduino (server) dihubungkan dengan pin TX pada arduino (client).

Software Serial

Jumlah pin TX dan RX pada arduino sangat terbatas sehingga tidak mungkin untuk dapat menghubungkan arduino dengan banyak arduino sekaligus menggunakan hardware serial. Untuk mengatasi masalah keterbatan jumlah pin TX dan pin RX maka digunakanlah software serial. Untuk melakukan komunikasi dengan menggunakan software serial pada arduino bisa dilakukan tanpa menggunakan pin TX dan pin RX. Dengan menggunakan software serial, kita bisa menggunakan pin digital lainnya sebagai pengganti pin TX dan pin RX.


Perbedaan utama antara hardware serial dan software serial adalah pada kecepatan data. Kecepatan baudrate maksimal pada software serial yaitu 56700 bps. Sedangkan pada hardware serial dapat melakukan komunikasi dengan kecepatan yang lebih tinggi. Akan tetapi jumlah pin TX dan pin RX pada arduino sangat terbatas sehingga tidak memungkinkan untuk berkomunikasi dengan banyak perangkat menggunakan hardware serial.


Implementasi Software Serial

Saya akan mencontohkan ketika arduino ingin mengirim pesan ke arduino lainnya. Di sini saya akan menggunakan arduino UNO karena merupakan mikrokontroller yang paling populer. Arduino UNO banyak digunakan karena harganya yang sangat terjangkau. Pada umumnya pin RX berada pada pin D0 sedangkan pin TX berada pada pin D1. Karena kita akan menggunakan software serial jadi kita bisa menggunakan pin digital lainnya yaitu pin D2 sampai dengan pin D13.


rangkaian arduino uno
Source: pixabay Seven_au

Berikut ini contoh source code pada arduino yang bertindak sebagai server atau pengirim pesan.


#include <SoftwareSerial.h>
SoftwareSerial mySerial(2,3);
void setup(){
Serial.begin(9600);
mySerial.begin(9600);
}
void loop(){
if(mySerial.available()){
String data="";
while(mySerial.available()){
char inputan=(char)mySerial.read();
delay(10);
data=data+inputan;
}
Serial.println(data);
}
Serial.println("hello Client");
mySerial.print("hello Client");
delay(2000);
}

Penjelasan:

Pada kode di atas software serial yang akan digunakan adalah pin D2 dan pin D3. Pin D2 dijadikan sebagai pengganti pin TX. Pin D3 dijadikan sebagai pengganti pin RX. Arduino yang bertindak sebagai server akan memeriksa apakah ada data serial yang diterima melalui pin D3 dan mengirim data serial melalui pin D2.


Serial.println("hello Client");

Perhatikan kode di atas baik-baik. Kode di atas digunakan untuk mencetak "hello Client" ke serial monitor pada layar komputer.


mySerial.print("hello Client");

Kode di atas digunakan untuk mengirim pesan "hello Client" ke arduino lainnya (client).


if(mySerial.available()){
String data="";
while(mySerial.available()){
char inputan=(char)mySerial.read();
delay(10);
data=data+inputan;
}
Serial.println(data);
}

Kode di atas digunakan untuk memeriksa apakah ada data komunikasi serial di server yang diterima dari client melalui pin D3. Jika ada data dari client maka data akan ditampung pada variabel data dalam tipe data string. Kode while digunakan untuk memeriksa dan mengambil data sampai data terakhir. Jadi jika dimisalkan client mengirim pesan "hello Server" dan tidak menggunakan while maka hanya karakter pertama saja yang disimpan yaitu huruf "h". Jadi kode while dibutuhkan agar arduino dapat menyimpan seluruh data yang tersedia. Apabila seluruh data komunikasi serial sudah didapatkan maka akan dicetak ke serial monitor pada layar komputer.


Jika tidak ingin mencetak pesan ke serial monitor pada komputer maka kode di bawah ini dapat dihilangkan.

Serial.begin(9600);
Serial.println(data);
Serial.println("hello Client");

Berikut ini contoh source code pada arduino yang bertindak sebagai client atau penerima pesan.


#include <SoftwareSerial.h>
SoftwareSerial mySerial(2,3);
void setup(){
Serial.begin(9600);
mySerial.begin(9600);
}
void loop(){
if(mySerial.available()){
//isi variabel data bisa diganti dengan data dari sensor yang dipakai
String data="hello Server";
//kirim data ke server
mySerial.print(data);
}
}

Penjelasan:

Hampir sama seperti konfigurasi pada arduino server. Pin D2 dijadikan sebagai pengganti pin TX. Pin D3 dijadikan sebagai pengganti pin RX. Jadi pin D2 pada server dihubungkan ke pin D3 pada client menggunakan kabel jumper. Pin D3 pada server dihubungkan ke pin D2 pada client menggunakan kabel jumper.


Sambungan kabel:

Pin D2 SERVER dihubungkan ke pin D3 Client 1

Pin D3 SERVER dihubungkan ke pin D2 Client 1


mySerial.print(data);

Kode di atas digunakan untuk mengirim data dari client ke server melalui pin D2.


Apabila kita ingin arduino berkomunikasi lebih dari satu perangkat arduino (client) maka kita harus menambah kode software serial lainnya. Misalnya kita tambah dua pin lain yang berbeda untuk komunikasi serial yaitu pin D4 dan pin D5. Jadi pin D4 untuk mengirim data serial. Pin D5 untuk menerima data serial.


Berikut ini contoh kode arduino (server) setelah ditambahkan kode software serial lainnya.


#include <SoftwareSerial.h>
SoftwareSerial mySerial(2,3);
SoftwareSerial mySerialTwo(4,5);
void setup(){
Serial.begin(9600);
mySerial.begin(9600);
mySerialTwo.begin(9600);
}
void loop(){
if(mySerial.available()){
String data="";
while(mySerial.available()){
char inputan=(char)mySerial.read();
delay(10);
data=data+inputan;
}
Serial.println(data);
}
Serial.println("hello Client");
mySerial.print("hello Client");
delay(2000);
if(mySerialTwo.available()){
String data2="";
while(mySerialTwo.available()){
char inputan2=(char)mySerialTwo.read();
delay(10);
data2=data2+inputan2;
}
Serial.println(data2);
}
Serial.println("hello Client 2");
mySerialTwo.print("hello Client 2");
delay(2000);
}

Penjelasan:

Kode di atas berfungsi untuk menerima data serial dari client 1 dan client 2 secara bergantian.


Sambungan kabel:

Pin D2 SERVER dihubungkan ke pin D3 pada CLIENT 1

Pin D3 SERVER dihubungkan ke pin D2 CLIENT 1

Pin D4 SERVER dihubungkan ke pin D5 CLIENT 2

Pin D5 SERVER dihubungkan ke pin D4 CLIENT 2


Berikut ini contoh source code pada arduino yang bertindak sebagai client 2 atau penerima pesan ke 2.


#include <SoftwareSerial.h>
SoftwareSerial mySerial(4,5);
void setup(){
Serial.begin(9600);
mySerial.begin(9600);
}
void loop(){
if(mySerial.available()){
//isi variabel data bisa diganti dengan data dari sensor yang dipakai
String data="hello Server";
//kirim data ke server
mySerial.print(data);
}
}

Catatan:

Komunikasi serial berarti harus berjalan secara serial yang berarti hanya dapat menerima data atau mengirim data dari atau ke perangkat lain dalam satu waktu. Artinya komunikasi tidak bisa berjalan bersamaan jadi harus bergantian. Jadi dapat diartikan juga jangan meminta data sensor ke seluruh node dalam waktu bersamaan, ingat: harus gantian.


Contoh urutan algoritme program antara server dan client kira-kira seperti ini:

SERVER : minta data ke CLIENT 1

CLIENT 1 : memberi data

SERVER : simpan data dari CLIENT 1

SERVER : minta data ke CLIENT 2

CLIENT 2 : memberi data

SERVER : simpan data dari CLIENT 2

SERVER : minta data ke CLIENT N

CLIENT N : memberi data

SERVER : simpan data dari CLIENT N

SERVER : proses seluruh data dari semua CLIENT


Setiap client melakukan looping untuk ngecek apakah server meminta data. Cek dengan komunikasi serial apakah ada data yang masuk. Jika ada permintaan data, kasih data ke server. Jika tidak, lanjutkan looping menunggu ada permintaan data dari server.

Share thread ini ke sosial media
Popice • Upvote 0 • Downvote 0#1

gg

Anda harus sudah login untuk berkomentar di thread ini