Arduino Leonardo - Setting up bluetooth

I am trying to setup bluetooth with a board that contains Arduino Leonardo chip.

My full setup is:

The bluetooth module is connected to D8 port of the base shield.
The reason is “not all pins on the Leonardo and Micro support change interrupts, so only the following can be used for RX: 8, 9, 10, 11, 14 (MISO), 15 (SCK), 16 (MOSI).” as explained here: Arduino - SoftwareSerial

Here is the full code.

#include <SoftwareSerial.h>   //Software Serial Port

/*Connect your Bluetooth Module to D8 otherwise it will not work due to Arduino Leonardo */

#define RxD         8
#define TxD         9
 
SoftwareSerial blue(RxD,TxD);

void setup()
{
    Serial.begin(9600);
    blue.begin(9600); //anything other than 9600 will not work
    
    // wait for serial port to connect. Needed for native USB
    while(!Serial){
    ;
    }
    
    pinMode(RxD, INPUT);
    pinMode(TxD, OUTPUT);
    
    Serial.print("Started\n");
    setupBlueToothConnection();
    
}

void loop() {
char recvChar;
    while(1)
    {
        if(blue.available())
        {//check if there's any data sent from the remote bluetooth shield
            recvChar = blue.read();
            Serial.print(recvChar);
            
        }
        if(Serial.available())
        {//check if there's any data sent from t he local serial terminal, you can add the other applications here
            recvChar  = Serial.read();
            blue.print(recvChar);
            delay(400);
        }
    }
}

void setupBlueToothConnection()
{ 
  //blue.begin(9600);
  
  blue.print("AT");
  delay(400);
  
  blue.print("AT+ROLES");  // set the role as slave
  delay(400); 
  
  blue.print("AT+NAMESlave");   // set the bluetooth name as "Slave" ,the length of bluetooth name must less than 12 characters.
  delay(400);
  
  blue.print("AT+AUTH1"); 
  delay(400);
  blue.flush();
}

The output from the Serial Monitor (set as BOTH NL & CR, 9600) as follows:

Started
OKOK+Set:SOK+Set:SlaveOK+Set:1

The problem is when I send AT commands from terminal I get nothing in return.
However if I send AT command from the IDE, I am getting feedback from the bluetooth.

The problem is when I send AT commands from terminal I get nothing in return.
However if I send AT command from the IDE, I am getting feedback from the bluetooth.

Define what "terminal" means in that context and what exactly "IDE" means! I guess by IDE you mean the Serial Monitor of the IDE but I have no clue what you mean by "terminal".

Why use SoftwareSerial on a Leonardo when it has an extra HardwareSerial port (Serial1) on pins 0 and 1

...R

Robin2:
Why use SoftwareSerial on a Leonardo when it has an extra HardwareSerial port (Serial1) on pins 0 and 1

...R

I will be adding a Zigbee module also, thus I saved that port. However I had already tried with Serial1 but couldn't fix the issue. Here is the code for the Serial1:

void setup()
{
    Serial.begin(9600);
    Serial1.begin(9600);
    
    // wait for serial port to connect. Needed for native USB
    while(!Serial){
    ;
    }
   
    Serial.print("Started\n");
    setupBlueToothConnection();
   
}
void loop() {
char recvChar;
    while(1)
    {
        if(Serial1.available())
        {//check if there's any data sent from the remote bluetooth shield
            recvChar = Serial1.read();
            Serial.print(recvChar);
           
        }
        if(Serial.available())
        {//check if there's any data sent from t he local serial terminal, you can add the other applications here
            recvChar  = Serial.read();
            Serial1.print(recvChar);
        }
    }
}
void setupBlueToothConnection()
{
  //blue.begin(9600);
 
  Serial1.print("AT");
  delay(400);
 
  Serial1.print("AT+ROLES");  // set the role as slave
  delay(400);
 
  Serial1.print("AT+NAMESlave");   // set the bluetooth name as "Slave" ,the length of bluetooth name must less than 12 characters.
  delay(400);
 
  Serial1.print("AT+AUTH1");
  delay(400);
  Serial1.flush();
}

That gives the exact same output.

pylon:
Define what "terminal" means in that context and what exactly "IDE" means! I guess by IDE you mean the Serial Monitor of the IDE but I have no clue what you mean by "terminal".

From terminal I meant the Serial Monitor of the IDE, from IDE I meant sending AT command via code such as: "Serial1.print("AT")" which works fine.

The issue is fixed.
Note: This is the version includes Serial1 rather than SoftwareSerial. The rest is the same.

Serial.read()

Returns the first byte of incoming serial data available.

So, when I send AT command from terminal, it does send "A" and then "T" rather than "AT" as a string which Bluetooth expects. Hence, I have added the following function:

String SerialString() {   // Function to generate string from chars sent via Serial Monitor
  
  String inputString = "";  // to hold the string
  
  while (Serial.available()) {
    
    char inputChar = (char)Serial.read(); // get the new byte:
    inputString += inputChar;             // add it to the inputString:
    }
    
    return inputString;     // returns completed string 
}

Then inside void loop():

String WholeCommand = ""; 
if(Serial.available() > 0){
    WholeCommand = SerialString();
    Serial1.print(WholeCommand);
  }

Now, when I send AT from Serial Monitor, I can get OK from Bluetooth.