Documentation

GT-U7 NEO-6M GPS Module Pre-Soldered for Arduino & Raspberry Pi | ShillehTek Product Manual
Documentation / GT-U7 NEO-6M GPS Module Pre-Soldered for Arduino & Raspberry Pi | ShillehTek Product Manual

GT-U7 NEO-6M GPS Module Pre-Soldered for Arduino & Raspberry Pi | ShillehTek Product Manual

manualshillehtek

Overview

The ShillehTek GT-U7 is a compact, high-sensitivity GPS receiver module based on a u-blox compatible positioning engine. It ships pre-soldered with a male 5-pin header, making it breadboard-ready out of the box. Whether you're building a GPS logger, a drone telemetry system, a vehicle tracker, or a weather balloon payload, the GT-U7 provides accurate location, velocity, and UTC time data at up to 5 Hz.

The module exposes a standard TTL UART at 9600 baud by default, so it works seamlessly with Arduino, Raspberry Pi, ESP32, and Pico via any free serial port. An onboard 3.3V regulator lets you power it directly from a 5V rail, and a u.FL (IPEX) connector is available for an external active antenna if you need to operate indoors or with limited sky view.

A backup-battery socket keeps the RTC and last-known ephemeris alive between power cycles, dramatically shortening time-to-first-fix from a cold start (~27 s) down to a hot start (~1 s). The PPS output pin provides a 1-pulse-per-second timing signal — extremely useful for precise time synchronization projects and sensor sampling.

At a Glance

GPS Engine
u-blox compatible
Operating Voltage
3.3V - 5V
Interface
UART (9600 baud)
Position Accuracy
~2.5 m CEP
Update Rate
1 Hz (up to 5 Hz)
Pins
5 (VCC, GND, RXD, TXD, PPS)

Specifications

Parameter Value
GPS Chipset u-blox 6/7 compatible
Operating Voltage 3.3V - 5V (onboard LDO regulator)
Operating Current ~45 mA (tracking)
Communication Protocol UART (TTL), NMEA 0183 sentences
Default Baud Rate 9600 bps (8N1)
Position Accuracy ~2.5 m CEP (with clear sky view)
Update Rate 1 Hz default (configurable up to 5 Hz)
Time To First Fix Cold ~27 s / Warm ~27 s / Hot ~1 s
Sensitivity -162 dBm tracking
Antenna Onboard patch + u.FL (IPEX) connector
Backup Battery CR1220 socket (not included)
Operating Temperature -40 °C to +85 °C
Dimensions ~28 mm x 28 mm

Pinout Diagram

GooouuTech GT-U7 GPS Receiver VCC (3.3V - 5V) GND (Ground) RXD (Serial In) TXD (Serial Out) PPS (1 Pulse/sec)

Wiring Guide

Arduino Wiring

The GT-U7 runs comfortably on 5V thanks to its onboard regulator. We use SoftwareSerial on pins D4 (RX) and D3 (TX) so the hardware UART (D0/D1) stays free for sketch uploads and Serial Monitor output.

GT-U7 Pin Arduino Pin
VCC 5V
GND GND
TXD D4 (Arduino RX)
RXD D3 (Arduino TX)
PPS D2 (optional, INT0)
Tip: Remember TX goes to RX and RX goes to TX — it's a crossover. GT-U7's TXD (output) connects to the Arduino's input pin.
Note: First-time cold starts can take up to 30 seconds with a clear view of the sky. Give it a minute before assuming something is wrong.

ESP32 Wiring

ESP32 has multiple hardware UARTs. We use UART2 on GPIO16 (RX) and GPIO17 (TX) — the factory defaults for Serial2.

GT-U7 Pin ESP32 Pin
VCC 5V (or 3.3V)
GND GND
TXD GPIO16 (RX2)
RXD GPIO17 (TX2)
PPS GPIO4 (optional)
Note: The GT-U7 outputs 3.3V logic on TXD, which is safe for the ESP32's 3.3V GPIO. No level shifter is required.

Raspberry Pi Wiring

The Pi's UART is exposed on pins 8 (GPIO14/TXD0) and 10 (GPIO15/RXD0). Before wiring, enable the serial port hardware and disable the serial console in raspi-config.

GT-U7 Pin Raspberry Pi Pin (BOARD)
VCC Pin 2 or 4 (5V)
GND Pin 6 (GND)
TXD Pin 10 (GPIO15 / RXD)
RXD Pin 8 (GPIO14 / TXD)
PPS Pin 12 (GPIO18, optional)
Warning: Run sudo raspi-config → Interface Options → Serial Port → disable the login shell on serial but keep the serial hardware enabled. Reboot before using the GPS.

Raspberry Pi Pico Wiring

The Pico has two hardware UARTs. We use UART0 on GP0 (TX) and GP1 (RX) for simplicity, but any UART-capable pair of GPIOs works.

GT-U7 Pin Pico Pin
VCC VSYS (5V) or 3V3(OUT)
GND GND
TXD GP1 (UART0 RX)
RXD GP0 (UART0 TX)
PPS GP2 (optional)
Tip: If you're powering the GT-U7 from the Pico's 3V3(OUT) pin, keep in mind that rail is limited to ~300 mA. The GT-U7 draws ~45 mA during tracking, so there's plenty of headroom.

Code Examples

Arduino

gt_u7_raw_nmea.ino
// GT-U7 GPS: print raw NMEA sentences over USB Serial
// Wiring: VCC->5V, GND->GND, GT-U7 TXD->D4, GT-U7 RXD->D3
// Open Serial Monitor at 9600 baud

#include 

SoftwareSerial gpsSerial(4, 3); // RX=D4, TX=D3

void setup() {
  Serial.begin(9600);
  gpsSerial.begin(9600);
  Serial.println("GT-U7 GPS ready. Waiting for NMEA sentences...");
}

void loop() {
  // Forward anything the GPS sends to the Serial Monitor
  while (gpsSerial.available()) {
    char c = gpsSerial.read();
    Serial.write(c);
  }
}

Arduino with TinyGPSPlus (parsed data)

gt_u7_parsed.ino
// GT-U7 GPS: parse NMEA with TinyGPSPlus library
// Install via Library Manager: "TinyGPSPlus" by Mikal Hart

#include 
#include 

SoftwareSerial gpsSerial(4, 3); // RX=D4, TX=D3
TinyGPSPlus gps;

void setup() {
  Serial.begin(9600);
  gpsSerial.begin(9600);
  Serial.println("GT-U7: waiting for fix...");
}

void loop() {
  while (gpsSerial.available()) {
    gps.encode(gpsSerial.read());
  }

  if (gps.location.isUpdated()) {
    Serial.print("Lat: ");
    Serial.print(gps.location.lat(), 6);
    Serial.print("  Lng: ");
    Serial.print(gps.location.lng(), 6);
    Serial.print("  Alt: ");
    Serial.print(gps.altitude.meters());
    Serial.print(" m  Sats: ");
    Serial.println(gps.satellites.value());
  }
}

Raspberry Pi (Python)

gt_u7_pi.py
# GT-U7 GPS on Raspberry Pi
# Install: pip install pyserial pynmea2 --break-system-packages
# Enable serial hardware first: sudo raspi-config

import serial
import pynmea2

ser = serial.Serial('/dev/serial0', 9600, timeout=1)
print("GT-U7 GPS: reading NMEA from /dev/serial0")

while True:
    try:
        line = ser.readline().decode('ascii', errors='replace').strip()
        if line.startswith('$GPRMC') or line.startswith('$GNRMC'):
            msg = pynmea2.parse(line)
            if msg.status == 'A':  # 'A' = valid fix
                print(f"Lat: {msg.latitude:.6f}  Lon: {msg.longitude:.6f}  "
                      f"Speed: {msg.spd_over_grnd} knots  UTC: {msg.timestamp}")
            else:
                print("Waiting for GPS fix...")
    except pynmea2.ParseError:
        continue
    except KeyboardInterrupt:
        break

ser.close()

Raspberry Pi Pico (MicroPython)

gt_u7_pico.py
# GT-U7 GPS on Raspberry Pi Pico (MicroPython)
# Wiring: VCC->VSYS, GND->GND, GT-U7 TXD->GP1, GT-U7 RXD->GP0

from machine import UART, Pin
import time

uart = UART(0, baudrate=9600, tx=Pin(0), rx=Pin(1))
print("GT-U7 GPS: reading NMEA sentences...")

buffer = b""
while True:
    if uart.any():
        buffer += uart.read(uart.any())
        while b"\n" in buffer:
            line, buffer = buffer.split(b"\n", 1)
            try:
                sentence = line.decode('ascii').strip()
                if sentence.startswith('$GPGGA') or sentence.startswith('$GNGGA'):
                    parts = sentence.split(',')
                    if len(parts) > 6 and parts[6] != '0':
                        lat = parts[2]
                        lon = parts[4]
                        sats = parts[7]
                        print(f"Lat: {lat}  Lon: {lon}  Sats: {sats}")
                    else:
                        print("No fix yet...")
            except UnicodeError:
                pass
    time.sleep_ms(100)

ESP32 (MicroPython)

gt_u7_esp32.py
# GT-U7 GPS on ESP32 (MicroPython)
# Wiring: VCC->5V, GND->GND, GT-U7 TXD->GPIO16, GT-U7 RXD->GPIO17

from machine import UART
import time

uart = UART(2, baudrate=9600, tx=17, rx=16)
print("GT-U7 GPS: reading from UART2...")

while True:
    if uart.any():
        try:
            line = uart.readline()
            if line:
                sentence = line.decode('ascii', 'ignore').strip()
                if sentence.startswith('$GPRMC') or sentence.startswith('$GNRMC'):
                    print(sentence)
        except Exception as e:
            print("Parse error:", e)
    time.sleep_ms(100)

Frequently Asked Questions

Why isn't my GPS getting a fix?
GPS needs a clear view of the sky — it won't work reliably indoors, in a basement, or near large metal objects. Move the module outside or near a window. First-time cold starts can take 30 seconds to several minutes. Watch the PPS LED on the module: once it starts blinking at 1 Hz, you have a fix.
What baud rate does the GT-U7 use?
The default is 9600 bps, 8 data bits, no parity, 1 stop bit (8N1). You can reconfigure it to higher rates (38400, 57600, 115200) using u-center software or UBX binary commands, but 9600 is plenty of bandwidth for 1 Hz NMEA output.
Do I need an external antenna?
No — the onboard ceramic patch antenna works well outdoors and near windows. For in-vehicle use, deep indoor use, or mounting inside enclosures, plug an active GPS antenna into the u.FL (IPEX) connector on the side of the board.
Can I power the GT-U7 from 3.3V?
Yes. The module accepts anything from 3.3V to 5V on VCC. The onboard LDO regulator drops it to the 3.3V the GPS chip requires. TXD outputs 3.3V logic either way, so it's safe for both 3.3V and 5V microcontrollers.
What is the PPS pin for?
PPS = Pulse Per Second. Once a fix is acquired, this pin emits a short precise pulse aligned to the start of each GPS second. It's extremely accurate (tens of nanoseconds) and is commonly used for NTP time servers, oscilloscope triggering, and synchronizing sensor sampling.
What's the battery socket on the back for?
It accepts a CR1220 coin cell (not included) that keeps the GPS's RTC and ephemeris data alive when main power is removed. With a backup battery, subsequent power-ups become "warm starts" or "hot starts" and get a fix much faster — often within a second.
Which Arduino library should I use?
TinyGPSPlus by Mikal Hart is the community standard — install it from the Arduino Library Manager. It parses all common NMEA sentences and exposes latitude, longitude, altitude, speed, date, time, and satellite count as easy-to-use properties.

Related Tutorials