"NEO-6M Not Transmitting Data (No Blank NMEA Messages)"

Hello everyone, I hope I have read the FAQ correctly and that I won't make any mistakes. If I do, I will promptly correct them.
A few days ago, I received the modules for one of my first permanent projects, a GPS tracker via SMS. I started with the simplest module, which is the GPS, and I chose a u-blox NEO-6M with an antenna. I read the datasheet and connected the module to an Arduino Uno R4 WiFi (initially for testing). I followed the diagram shown in the photo, using the Software Serial library to communicate with the module through pins 4 and 3 (inverting RX and TX between the Arduino and the GPS). I then connected power from the Arduino to the module. The GPS started functioning, and after a few minutes, the red LED began to blink (which should indicate that it has locked onto some satellites).


I then wrote my code as shown here:

//SETUP: neo6m to arduino uno r4, tx -> d4, rx -> d3, gng -> gnd, vcc -> 5v
#include <SoftwareSerial.h>
//SoftwareSerial Item
SoftwareSerial gps(4, 3); //Arduino RX and TX

void setup(){
  //Inizialize usb serial (pin 0 and 1)
  Serial.begin(9600);
  Serial.println("Ready");
  //Iinizialize gps serial (connecting pin TX from gps to pin 4 RX arduino and pin RX from gps to pin 3 TX arduino)
  gps.begin(9600);
}

void loop(){
  while(gps.available())
  {
    //Print every char from pin 4 (gps TX) to my serial monitor
    Serial.write(gps.read());
  }
}

The only value I receive on the serial monitor of my PC, set to 9600, is this:

17:33:35.695 -> Ready

which comes from the setup. I wrote this sketch to initially get an idea of how the module works, before introducing the libraries and NMEA encoding.

I also tried this code that I found in a reliable Arduino manual (book). In this case, I connected TX (from the GPS) to pin 1 and RX to pin 2 (on the Arduino)

void setup() {
  Serial.begin(9600);
  Serial1.begin(9600);
}

void loop() {
  while (Serial1.available()) {
    char c = Serial1.read();
    Serial.print(c);
  }
}

With this code, something appears on the serial monitor at 9600 baud, but it is unreadable (the module is blinking and sending something, so I deduce). Here it is:

17:57:57.829 -> ���������������������

Thank you all for reading and your attention. I hope it can work!

The GPS module expects 3.3V level signals. The R4 outputs 5V level signals. So when you hooked up the GPS's Rx line to the R4, you exceeded the Absolute Maximum Rating for Input pin voltage, as shown in the NEO-6M's datasheet. Since you weren't sending commands to the GPS, you didn't even need to connect that line. But in doing so without a voltage divider, you may have already cooked the module.

The GPS should send valid data regardless of whether the 1PPS\Fix LED is blinking or not.

Indeed, the datasheet states that the module has a regulator for the 5V input, which is regulated down to 3.3V for the u-blox 6m chip, but not for the RX and TX pins?
So, would I need a level shifter for the serial pins? I was considering using a Pro Mini for the final project, which operates at 3.3V, but in a hurry, I thought it would be more convenient to use the Uno to test the module.

Could this have caused the module to not work properly? Should I therefore only connect the GPS module's TX pin to the Arduino's RX, since the module is only sending data?

Thanks in advance to everyone, I hope I can recover my module. Fortunately, it's at least very inexpensive

As I already said, you could have damaged the module. You might have gotten away with it. You might not. That's the danger of operating outside of the Absolute Maximum Ratings; all bets are off.

If you need to send commands to the GPS module, a simple voltage divider with a 1.2K and 2.2K resistor would likely suffice for a 9600 baud signal. Or you could use a active level shifter if you like. Or, if you know you're not going to want to command the module, simply omit the connection to its Rx line. It's entirely up to you.

I received a new NEO-6M GPS module, and I uploaded the sketch to the Arduino Uno. This time, I connected only the TX pin of the module to the RX pin defined in the software serial. Unfortunately, once again, I'm not receiving any data. After a while, the GPS starts blinking at 1Hz, but I'm not getting any data on the Arduino Serial Monitor at 9600 baudrate (the TX and RX LEDs on the Arduino aren't blinking).
Sadly, I can't figure out what I'm doing wrong. I also have a small level shifter, but theoretically, I shouldn't need it since the GPS TX sends signals to the Arduino Uno, which should receive them as HIGH. I also powered the module from the Arduino, so they share a common GND.
If anyone feels like helping me, I would be enormously grateful!

You can try swapping the pin on the GPS your using for RX, its not unknown for them to be labelled incorrectly.

In theory you do need a logic level shifter, the 3.3V GPS putting out HIGH might not be high enough for the 5V UNO to read it.

Thank you so much for the super quick response. I will try these two solutions and let you know how it goes. Thanks again!