GPS Neo 6M not recieving signals

Hello all
I am building a GPS tracker for my PhD project, using Arduino Nano ESP32 microcontroller and Neo 6M GPS module. I have connected TX1 of arduino to Rx of gps module and Rx0 of arduino to tx of Gps module. The GPS module is powered by VBUS (5V) pin of arduino. The Tracker is not fixing a location and recieving signals, even after placing the antenna outside. This is the first time I am working with hardware computing and I am not sure where the problem lies. I would appreciate any help I could get:)

Cheers
Rati

Welcome to the forum

Please post your sketch, using code tags when you do
Posting your code using code tags prevents parts of it being interpreted as HTML coding and makes it easier to copy for examination

In my experience the easiest way to tidy up the code and add the code tags is as follows
Start by tidying up your code by using Tools/Auto Format in the IDE to make it easier to read. Then use Edit/Copy for Forum and paste what was copied in a new reply. Code tags will have been added to the code to make it easy to read in the forum thus making it easier to provide help.

I hope you know that device is NOT a GPS transmitter, therefore it is not possible to use it as a GPS tracker.
Post a photo of your hand drawn wiring diagram as well as all formatted code in code tags, and any verbose errors in code tags.

Are you receiving the normal NMEA sentences, which come along, or should be enabled to do, despite there being no satellites reception?

Have you tried the GPS unit with just a terminal emulator like PuTTY or CoolTerm?

Please post the code you are working with that compi,ea and runs but does not show your locatiob.

a7

Here is the code I am working with.

from machine import UART, Pin
import time

# Configure UART for GPS (adjust TX and RX pins based on your wiring)
gps_uart = UART(0, baudrate=9600, tx=1, rx=3)  # Use appropriate TX/RX pins

def check_gps_signal():
    print("Checking GPS signals...")
    while True:
        if gps_uart.any():
            data = gps_uart.readline()  # Read data from GPS
            if data:
                print(data.decode('utf-8', errors='ignore'))  # Decode and print the NMEA sentences
        else:
            print("No data received from GPS module.")
        time.sleep(1)

try:
    check_gps_signal()
except KeyboardInterrupt:
    print("Exiting.")

Also the circuit diagram:

I am using the Neo 6M GPS module. It is not recieving any NMEA sentences. The module is turning on but is not reading any signals.

I think it's a power issue. The VBUS pin is connected to power coming in from USB, but you're powering from a battery. So you are not sending any power to the GPS. Here's the power section of the Nano ESP32 schematic:

If you're powering the Nano at Vin, the diode blocks any current from flowing back to VUSB. By the way, the pin labeled "VBUS" in the picture is actually VUSB on the schematic. So it looks like the silk screen is just wrong on that.

But that brings up another problem. Most GPS modules I've seen want 5V coming into Vcc, and they run that through a regulator to get the 3.3V they actually use. It looks like your best bet is to power the GPS directly from the battery (i.e. - from Vin).

While testing, I had actually powered the arduino through the USB as I had connected it to the laptop to see the output. The GPS module is turning on as the red light is slowly blinking. Also, if I need to power the GPS module sperately, what power battery should I use?

Yes, it should run just fine if you are powering from USB. If the light is blinking at 1Hz, then you should be getting serial data from it.

The nominal GPS power input is 5V, but that's only to feed its 3.3V regulator. So I suspect it will work ok if you power it from your lithium battery in parallel with the Nano. You should try it and see.

Edit: Can you see markings on the regulator chip. It will probably be a little 5-pin chip.

Yes it is a 5-pin chip. The light doesnt seem to be blinking at 1Hz. The blink rate is very slow, even when the antenna is outside, and therefore I am not getting any seriel data.

Too little information. Where did you buy the NEO-6M? There are lots of counterfeits on the market, some reported to not work at all.

What antenna are you using, and how is it connected, while "outside"?

Why are you using Python, and specifying 'utf-8' for a serial connection?

With a standard serial connection, this ridiculously simple Arduino C++ code will repeat exactly what a functioning GPS module emits on the serial port (better to use hardware serial on an ESP32):

#include <SoftwareSerial.h>

SoftwareSerial mySerial(10, 11); //GPS (RX, TX) check correct pin assignments and baud rate

void setup() {
  mySerial.begin(9600);
  Serial.begin(9600);
  Serial.println("GPS start");
}

void loop() {
  while (mySerial.available()) {
    Serial.write(mySerial.read());
  }
}

I bought the GPS module from Amazon. I am from an Architecture background and have no knowldge of electronics and computing and I am figuring out as I go using open source codes and materials. Since I know Python and not familiar with C++ I decided to use Micropython. Also, I am using open source codes which specified utf-8 for a seriel connection.
I am happy to get any advice on this as I am very new to this.

Arduino is all open source, but programmed in C/C++, so in using Python, you will be missing out on almost all of the example code.

Normally a GPS unit will be very chatty irrespective of being able to lock on to satellites or provide any position data.

I repeat my suggestion to use a terminal emulator and listen and talk directly with the GPS unit, no Arduino, no code just using the serial communication between the GPS and the PC.

It is likely that the GPS uses TTL serial; this would require translation to be useful on a regular serial port or USB serial adapter.

If you are going to do any serious work with microprocessors, you want to have one of these anyway:

You can find cheaper ones, but this exact product is very versatile and straight up legit.

a7

The GPS module outputs NMEA sentences, regardless of whether satellites are detected.

If your program does nothing, either your code or wiring is wrong, or the module is not functional.

Here's an Amazon alternative to the Adafruit FTDI adapter:

https://www.amazon.com/WWZMDiB-FT232RL-Converter-Adapter-Breakout/dp/B0BJKCSZZW

Windows has the driver for this device in its driver store, and should enable it automatically. That makes it look like a COM port, so you could use any terminal software, such as Termite, to see the sentences the GPS is sending out. I assume it works the same on Linux and Mac.

The TX pin of the GPS module would connect to the RX pin of the FTDI adapter.

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.