What is Arduino Software Serial

Introduction

I feel obligated to post this tutorial after seeing beginners assigning two serial devices to Arduino Uno hardware serial pin which is digital pin 0 (Rx) and digital pin 1 (Tx). Connecting two serial devices results to undefined behavior due to conflicting signals. Arduino Uno, Arduino Nano, and Arduino Mini has only 1 serial port. If you need to connect more serial devices, you have the option to use their big brother; the Arduino Mega which has four serial ports and more pins available. But using the Arduino Mega results to additional cost. The other option is to use the Arduino Software Serial library.

Arduino Software Serial library basically mimics or copy the behavior of the hardware serial. We are going to use the library of PaulStoffregen from https://github.com/PaulStoffregen/SoftwareSerial. With SoftwareSerial, we can assign another set of pins for serial devices.

Please download the library then add it by clicking the Sketch > Include Library > Add ZIP Library and select the downloaded SoftwareSerial library.

Hardware Instruction

  1. Connect the Arduino Uno pin 2 to USB-Serial converter Tx pin.
  2. Connect the Arduino Uno pin 3 to USB-Serial converter Rx pin.
  3. Connect the supply voltage to USB-Serial converter.
  4. Upload the sketch provided below in the source code section. This sketch should function as follows:
    • Data sent from hardware serial port should be receive in software serial port.
    • Data sent from software serial port should be receive in hardware serial port.
  5. Please feel free to modify and experiment with the source code to maximize learning.

Video Demonstration

Source Code

 1#include "SoftwareSerial.h"
 2
 3SoftwareSerial swSerial(2,3);
 4
 5void setup(){
 6    //Initialize HARDWARE serial port
 7    Serial.begin(9600);
 8    //Initialize SOFTWARE serial port
 9    swSerial.begin(9600);
10    Serial.print("Setup DONE.");
11}
12
13void loop(){
14    // If there is data from software serial
15    if (swSerial.available()){
16        Serial.write(swSerial.read());  // Write it to hardware serial
17    }
18  
19    // If there is data from hardware serial
20    if (Serial.available()){
21        swSerial.write(Serial.read());  // Write it to software serial
22    }   
23}

Call To Action

If you find this tutorial helpful, please consider supporting my Youtube channel techtotinker.com. Please leave your comments and suggestions in the comment box. Thank you and have a good day. Happy tinkering.



Posts in this series



No comments yet!

GitHub-flavored Markdown & a sane subset of HTML is supported.