Serial2 of ESP32 not responding

I am doing an Autonomous Car project and I have a NEO 6M GPS module, I am using an ESp32 as the board, the module works fine with Arduino and Nodemcu. but not with ESP32, the reason being it not supporting software serial, so I took help from #152 Additional ESP32 Serial Channels in Arduino IDE (Quickie) - YouTube

I added hardware serial but still, there is no output I have provided the code below

#include<HardwareSerial.h>//No extra libray installed
#define RXD2 16
#define TXD2 17

HardwareSerial gps_serial(2);

void setup() {
  Serial.begin(115200);
  Serial.printf("LETS START");
 gps_serial.begin(115200, SERIAL_8N1, RXD2, TXD2);
}

void loop() {
  while (gps_serial.available()) {
   Serial.print(char(gps_serial.read()));  // read from gps, write to serial debug port
  Serial.print("I am here");
  }
}

The output on the serial monitor is LETS START

The other code which worked on other boards is also provided below, edited to work in ESP32

#include <WiFi.h>
//#include <WiFiClient.h>
#include <WiFiServer.h>

#include <TinyGPS++.h> // library for GPS module
//#include <SoftwareSerial.h>
//#include <ESP8266WiFi.h>
TinyGPSPlus gps;  // The TinyGPS++ object
//SoftwareSerial ss(4, 5); // The serial connection to the GPS device
HardwareSerial Serial2(2);


const char* ssid = "***********"; //ssid of your wifi
const char* password = "***********"; //password of your wifi
float latitude , longitude;
int year , month , date, hour , minute , second;
String date_str , time_str , lat_str , lng_str;
int pm;
WiFiServer server(80);

void setup()
{  Serial2.begin(115200);
  Serial.begin(115200);
  //ss.begin(9600);
  Serial.println();
  Serial.print("Connecting to ");
  Serial.println(ssid);
  WiFi.begin(ssid, password); //connecting to wifi
  while (WiFi.status() != WL_CONNECTED)// while wifi not connected
  {
    delay(500);
    Serial.print("."); //print "...."
  }
  Serial.println("");
  Serial.println("WiFi connected");
  server.begin();
  Serial.println("Server started");
  Serial.println(WiFi.localIP());  // Print the IP address
}


void loop()
{
  while (Serial2.available() > 0) //while data is available
    if (gps.encode(Serial2.read())) //read gps data
    {
      if (gps.location.isValid()) //check whether gps location is valid
      {
        latitude = gps.location.lat();
        lat_str = String(latitude , 6); // latitude location is stored in a string
        longitude = gps.location.lng();
        lng_str = String(longitude , 6); //longitude location is stored in a string
      }
      if (gps.date.isValid()) //check whether gps date is valid
      {
        date_str = "";
        date = gps.date.day();
        month = gps.date.month();
        year = gps.date.year();
        if (date < 10)
          date_str = '0';
        date_str += String(date);// values of date,month and year are stored in a string
        date_str += " / ";

        if (month < 10)
          date_str += '0';
        date_str += String(month); // values of date,month and year are stored in a string
        date_str += " / ";
        if (year < 10)
          date_str += '0';
        date_str += String(year); // values of date,month and year are stored in a string
      }
      if (gps.time.isValid())  //check whether gps time is valid
      {
        time_str = "";
        hour = gps.time.hour();
        minute = gps.time.minute();
        second = gps.time.second();
        minute = (minute + 30); // converting to IST
        if (minute > 59)
        {
          minute = minute - 60;
          hour = hour + 1;
        }
        hour = (hour + 5) ;
        if (hour > 23)
          hour = hour - 24;   // converting to IST
        if (hour >= 12)  // checking whether AM or PM
          pm = 1;
        else
          pm = 0;
        hour = hour % 12;
        if (hour < 10)
          time_str = '0';
        time_str += String(hour); //values of hour,minute and time are stored in a string
        time_str += " : ";
        if (minute < 10)
          time_str += '0';
        time_str += String(minute); //values of hour,minute and time are stored in a string
        time_str += " : ";
        if (second < 10)
          time_str += '0';
        time_str += String(second); //values of hour,minute and time are stored in a string
        if (pm == 1)
          time_str += " PM ";
        else
          time_str += " AM ";
      }
    }
 
 WiFiClient client = server.available(); // Check if a client has connected
  if (!client)
  {
    return;
  }
  // Prepare the response
  String s = "HTTP/1.1 200 OK\r\nContent-Type: text/html\r\n\r\n <!DOCTYPE html> <html> <head> <title>GPS DATA</title> <style>";
  s += "a:link {background-color: YELLOW;text-decoration: none;}";
  s += "table, th, td </style> </head> <body> <h1  style=";
  s += "font-size:300%;";
  s += " ALIGN=CENTER> GPS DATA</h1>";
  s += "<p ALIGN=CENTER style=""font-size:150%;""";
  s += "> <b>Location Details</b></p> <table ALIGN=CENTER style=";
  s += "width:50%";
  s += "> <tr> <th>Latitude</th>";
  s += "<td ALIGN=CENTER >";
  s += lat_str;
  s += "</td> </tr> <tr> <th>Longitude</th> <td ALIGN=CENTER >";
  s += lng_str;
  s += "</td> </tr> <tr>  <th>Date</th> <td ALIGN=CENTER >";
  s += date_str;
  s += "</td></tr> <tr> <th>Time</th> <td ALIGN=CENTER >";
  s += time_str;
  s += "</td>  </tr> </table> ";
 
  s += "</body> </html>";

  client.print(s); // all the values are send to the webpage
  delay(100);
}

I do get the IP address on the serial monitor when I run it but when I access that address the fields are blank.
So what I understand is that the Serial communication with the GPS module is not working. I tried many other solutions on net but no use at all

gps_serial.begin(115200, SERIAL_8N1, RXD2, TXD2);

(Un)educated guess as I don't know the hardware you are using but I would expect the second serial port to be serial 1, not serial 2. The first serial port being serial 0. Try RXD1 and TXD1. If that doesn't work, sorry, don't know, someone cleverer than me will, hopefully, be along soon.

It worked!!!, I had the pins directly connected, rx-rx and tx to tx, now I reversed it and it works fine

:slight_smile: