Komunikasi serial digunakan untuk bertukar data antar device menggunakan protokol serial. Sebenarnya ada dua macam tipe komunikasi serial yang dapat dibangun dengan Arduino, yakni serial sinkron (SPI, I2C/IIC dan TWI) dan serial asinkron melalui pin 0 dan 1. Pada tutorial kali ini yang akan dibahas adalah serial asinkron, karena tipe komunikasi ini dapat diemulasi dari pin digital biasa (pin 2 – 13). Sedangkan pin 0 dan 1 adalah pin yang secara native dirancang sebagai pin serial (asinkron).
Dengan pengemulasian pin digital menjadi pin serial, maka dalam satu papan Arduino Anda akan memiliki lebih dari satu pin serial. Satu pin serial dapat Anda gunakan untuk monitoring/debugging ke arah komputer (via kabel USB), pin serial yang lain dapat digunakan untuk berinteraksi dengan device lain untuk bertukar data. Contoh aplikasi yang menggunakan model seperti ini dapat Anda baca di artikel saya terdahulu, “Arduino Bluetooth Module HC-05 Sketch Handler“
Bagaimana cara mengemulasi pin digital menjadi pin serial? Jawabannya adalah menggunakan library SofwareSerial.h. Anda perlu mendeklarasikan library di sketch Anda jika akan mengemulasi pin digital menjadi pin serial. Sebagai contoh, dapat Anda buka program/sketch ‘SoftwareSerialExample’ melalui menu File | Examples | SoftwareSerial | SoftwareSerialExample. Secara global program ini akan menjadikan/mengemulasikan pin 10 dan 11 menjadi pin serial, kemudian melempar/meneruskan semua data yang keluar masuk ke pin ini ke pin serial hardware di pin 0 dan 1. Karena pin 0 dan 1 terhubung dengan atmega16u2 yang bertugas melakukan komunikasi ke port USB, maka otomatis semua data yg masuk ke pin serial (software) 10 dan 11 akan dapat dimonitor komputer melalui jendela Serial Monitor via kabel USB.
Terakhir, berkat adanya library SoftwareSerial.h, fungsionalitas papan Arduino menjadi lebih maksimal karena Anda bisa memiliki lebih dari satu port serial yang dapat digunakan untuk berbagai keperluan. Namun library ini juga punya sedikit keterbatasan (terkait kemampuan hardware Arduino juga), yakni :
– maksimal baudrate yang dapat digunakan adalah 115200 bps
– jika Anda mengemulasi lebih dari satu pin serial pada pin digital, maka dalam satu waktu hanya satu pin serial yang dapat menerima data
– pada beberapa tipe papan Arduino yang lain seperti Arduino Mega, Mega ADK, Leonardo dan Micro, tidak semua pin digital dapat diemulasi menjadi pin serial. Silahkan melihat datasheet papan Arduino terkait untuk lebih detailnya.
Tetapi, walaupun memiliki keterbatasan, tetaplah library SoftwareSerial ini sangat membantu jika kita membutuhkan pin serial tambahan. Dan enaknya lagi, cara menambahkannya pun tidaklah sulit, karena semua function-nya disamakan dengan function serial bawaan Arduino. Silahkan dilihat kembali contoh program di atas, maka Anda akan mengerti maksud saya. Selamat mencoba ….
a Technopreneur – writer – Enthusiastic about learning AI, IoT, Robotics, Raspberry Pi, Arduino, ESP8266, Delphi, Python, Javascript, PHP, etc. Founder of startup Indomaker.com
Gan Aji, maksudnya dalam satu waktu hanya satu pin serial yang bisa menerima data itu gimana ya?
karna saya rencana pake uno + modul bluetooth & gsm shield.
pin 0, 1, dengan bluetooth, pin 10, 11, dengan gsm shield. apakah komunikasi data 2 modul tersebut bisa di ekseksi dalam satu loop() ??
dan apakah klo pake 2 pin serial seperti itu pin 0, 1, harus di deklarasikan juga dgn Softwareserial atau tidak??
pin 0,1 adl pin hardware-serial, selain pin 0 dan 1 (pin digital) bs dijadikan pin serial dg diemulasi pake software (jadinya software-serial). Kalo case di atas, ya bisa aja dieksekusi dl satu main loop krn bluetooth di pin hardware-serial, gsm shield di software-serial. Maksud dr pin software-serial tdk bisa menerima data serial dlm satu waktu adl jika ada lebih dari satu (pasangan) pin digital diemulasi sbg software-serial maka hanya salah satu pasangan pin software-serial yg bisa menerima data serial. Dan jgn lupa, ini hanya berlaku jika Anda menggunakan lebih dari satu (pasangan) pin digital sbg software-serial. Jika yg satu hardware-serial… Read more »
saya udah coba emulasi pin digital menjadi serial, tapi saya baru test dengan simulasi proteus menggunakan instrument virtual terminal. untuk pin 0, 1 bisa kirim dan terima data, tapi untuk pin 10, 11, yg diemulasi hanya bisa terima data saja tidak bisa kirim. kira2 permasalahannya apa ya gan?? apa proteusnya yg gak support??
dicoba secara riil aja mas, jgn pake proteus. Kalo berdasar pengalaman sih keduanya harusnya bs sama2 jalan
gan, kalau pake pin 0 1 harus dideklarasikan software serial gak?
ngga
Maaf mau menanyakan.
Saya ada modul laser yang kalau mau digunakan ke device lain katanya pakai komunikasi UART.
Nah, ketika melihat di serial monitor arduino harus send comment misal dengan ketik “D”, “S”, dll.
Bagaimana untuk mengambil dan mengolah data yang seperti itu ke arduino, karena rencananya mau digabungkan dengan sensor-sensor lainnya?
Terimakasih.
[email protected]
tinggal diolah aja datanya (sbg variabel char/string) yg masuk ke port serial Arduino
Mas Aji, apakah arduino mega bisa difungsikan sebagai PPI, dengan bi-directional port yang bisa dibaca komputer dan tiap port bisa diaktifkan maupun dinonaktifkan dari program komputer?
Terimakasih.
bisa mas, tapi harus diprogram sesuai behavior PPI
Jika memanfaatkan Sofware serial dan Hardware serial dalam satu program bersamaan apakah bisa?
Software serial digunakan untuk komunikasi serial dan Hardware serial digunakan hanya untuk mengirim serial monitor untuk device Bluetooth, RF 433 mhz, dll.?
bisa mas, saya juga sering melakukannya. Tapi biasanya hardware serial untuk debugging (via serial monitor) dan software serial untuk berkomunikasi dengan perangkat serial lain (misal bluetooth module atau modul GSM)
Kalo konfigurasi seperti yang mas utarakan (software serial untuk debugging) ntar butuh usb to serial ttl, jadi menurut saya dari segi kepraktisan sebaiknya tetap hardware serial yang digunakan untuk debugging
okay mas ajii terimaksih sarannya
bang mau tanya, maksudnya lebh dari 1 pasang software serial gak jalan dalam satu waktu gimana? kalau beda waktu tetep gak bisa?
misal ada dua device external yang terhubung hanya bisa komunikasi satu aja (bisa bergantian)