arduino software serial, software serial arduino, software serial, software serial in arduino, virtual port arduinoHello friends, I hope you all are fine and having fun. In today’s tutorial, I am going to show you How to use Arduino Software Serial. In my previous tutorial, we have had a look at How to use Arduino Serial Write and How to use Arduino Serial Read. In both of these tutorials, we have done the hardware Serial Communication. But we all know that Arduino has just one Serial Port placed at pins 0 and 1.

So, if you are having two or more serial modules, then there’s difficulty in adding two modules because we just have one hardware serial port. So, in such cases, there’s a need to add one more serial port and that serial port can be created at any two pins of Arduino and is called software serial. Software Serial is also named Virtual Serial Port.

It’s really very comfy if you are working on serial modules. If you ask me, I have never used a hardware serial port because pin # 0 and pin # 1 are also used for uploading code and debugging the code via Arduino Serial Monitor. So, I always connect my Serial modules via software serial and then check their output on Serial Monitor. So, let’s get started with How to use Arduino Software Serial:

How to use Arduino Software Serial?

  • I am going to use Proteus software for testing the codes.
  • You can download the Proteus Simulation for Arduino Software Serial, by clicking the below button:
Download How to use Arduino Software Serial ?

Arduino Code

  • First of all, let me tell you where you can find Examples of Software Serial.
  • Arduino has a Library of Software Serial in it. If you can’t find its library then you should download the Software Serial Library.
  • Now copy and paste the below code in your Arduino software:
#include <SoftwareSerial.h>

SoftwareSerial SoftSerial(2, 3);

void setup()
  SoftSerial.println("       **** Its a Software Serial **** ");
  SoftSerial.println(" Designed by");
  Serial.println("       **** Its a Hardware Serial **** ");
  Serial.println(" Designed by");

void loop()
      if (Serial.available())
           char data =;
  • In the above code, we have first included the Arduino Software Serial Library using #include<SoftwareSerial.h>.
  • After that, I have created the SoftSerial object and its parameters are SoftSerial(RX, TX), so in the above code pin # 2 has become RX of our Arduino Software Serial and pin # 3 become TX.
  • Now our SoftSerial object is ready and then we have initialized our software serial by using SoftSerial.begin(9600), here we have started our software serial and the baud rate set is 9600.

Proteus Simulation

  • Now design a small circuit in Proteus, you will need Arduino Library for Proteus to use Arduino in Proteus, as shown in the below figure:

arduino software serial, software serial arduino, software serial, software serial in arduino, virtual port arduino

  • Now get the Arduino Hex File and upload it to your Proteus software.
  • Now run your Proteus Simulation and you will get something as shown in the below figure:

arduino software serial, software serial arduino, software serial, software serial in arduino, virtual port arduino

  • So, it’s printed there that one is hardware serial and second is software serial and you can see the software serial is connected to Pin # 2 and Pin # 3.
  • Now when you write something in the Hardware Serial, it will also get printed in the Software Serial, that’s the code which we have added in the loop() section.

So, that’s all for today, I hope you have enjoyed this Arduino Software Serial example. Download the Simulation from the above button and try to design it on your own. Take care and have fun !!! πŸ™‚


  1. @Syed, thanks for the article. I would also like to know, how to send serial data from a master device to multiple slaves. Each slave need to get different data and need to have its unique addresses as well. An article on these line would be very helpful.
    Thanks again,

    • Hi,

      I will share such article soon. As a short note, you should try to use special characters for each node e.g. $ for Node1, ! for Node 2 etc. and then in each node you can place a check like if data starts with $ then its for Node1 and if it starts from ! then its for Node 2. I hope it will help. πŸ™‚


  2. If I change the code to write on SoftwareSerial and read with HardwareSerial the simulation doesn’t work. This is the change:
    void loop()

    if (SoftSerial.available())
    char data =;

    The SoftSerial.available() always retuns false. Althought I wrote on the virtual terminal. Do you know the reason?
    A lot of thnaks

    • That’s because of Proteus software, there’s no problem with your code. If you try this code on real Hardware then it will work perfectly fine.

      But Proteus has some limitations that’s why software serial library has some issues (in simulation), which I tried to resolve but couldn’t. πŸ˜›

  3. By just using the header file and initialising the pins , will the gpio pins work as rx and tx? or is there something else we have to do?

    • Yeah that’s how its done. πŸ™‚ I have posted many tutorials and given codes for Arduino Serial Communication. Try them out.

Leave a Reply

Your email address will not be published. Required fields are marked *

Post comment