Free tools Windows power users keep installed

One-click scans. No signup required.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

Some links on this page are affiliate links: if you buy through them we may earn a commission, at no extra cost to you.

Yes, you can display an ESP8266 GPS position on Google Maps—but not by connecting the GPS directly to Google. The NEO-6M sends NMEA data over UART to the ESP-12E; the ESP8266 uploads valid coordinates over Wi-Fi to a cloud endpoint such as ThingSpeak; and a browser reads those coordinates and renders either a Google Maps link or an embedded map.

The complete data path is:

NEO-6M GPS → UART → ESP-12E/NodeMCU → Wi-Fi → cloud endpoint → browser → Google Maps

This guide uses the common NodeMCU ESP-12E development board, a NEO-6M breakout, TinyGPS++, and ThingSpeak as a prototype backend. The same architecture works with a REST API, database, MQTT dashboard, or a local web server.

What you need

  • NodeMCU board based on the ESP-12E/ESP8266
  • NEO-6M GPS breakout and antenna
  • USB cable, breadboard, jumper wires and stable power
  • Arduino IDE with the ESP8266 board package
  • TinyGPS++ library
  • Wi-Fi network
  • Either a Google Maps link or a Google Maps JavaScript API project
  • Optional: ThingSpeak channel for storing the latest latitude and longitude

“ESP-12E” can mean either a NodeMCU development board or a bare ESP-12E radio module. A NodeMCU includes USB programming, a regulator and boot circuitry. A bare module needs a clean 3.3 V regulator, decoupling, reset circuitry and the correct GPIO0, GPIO2, GPIO15 and EN/CH_PD boot levels. Beginners should use a NodeMCU board. See the ESP8266 Arduino core documentation for board support.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

Wire the NEO-6M to NodeMCU

NEO-6M NodeMCU label ESP8266 GPIO
VCC 3V3 3.3 V supply
GND GND Ground
TX D6 GPIO12 (ESP RX)
RX D7 GPIO13 (ESP TX)

UART connections cross: GPS TX goes to ESP RX, and GPS RX goes to ESP TX. The original project uses this D6/D7 arrangement (wiring reference).

#1 Best Overall
GY-NEO6MV2 NEO-6M GPS Module for Arduino, STM32, Raspberry Pi, ESP32 2pcs
  • Accurate Positioning: Based on NEO-6MV2, supports GPS and GLONASS, supports simultaneous tracking of 22 satellites, tracking sensitivity -162dBm, cold-start sensitivity -148 dBm, positioning accuracy up to ±2.5m in open environments, stable positioning even in complex environments such as urban canyons or dense jungles
  • Low Power Consumption: Supporting 3.3V-5V power supply, the continuous operating current is 67mA, 11mA in standby mode, and 1mA during sleep, which ensures the positioning accuracy while controlling the energy consumption to the maximum, especially suitable for the scenarios that are sensitive to the endurance, and significantly reduces the cost of post maintenance
  • Hardware Interface: Standard UART-TTL level, support 3.3V/5V dual voltage compatibility, can be directly connected to Arduino, Raspberry Pi, ESP32 and other development boards; 4Pin interface ( VCC, GND, TX, RX), reserved hardware reset pin; baud rate support 4800bps~115200bps (default 9600bps), real-time switching through AT instructions or UBX commands, to adapt to different master performance
  • Plug and Play: Onboard EEPROM chip operates independently of the main control chip, saves configuration parameters after power failure, and automatically reads the parameters (baud rate, positioning mode, NMEA statement screening) from the EEPROM when the power is on, eliminating the need to repeat the initialisation, and realising Plug and Play
  • Widely Application: Widely used in vehicle monitoring, UAV navigation, handheld terminals and other scenarios that require high-precision positioning. You can also combine with Arduino, STM32, LoRa module, etc. to quickly build GPS tracker, weather station and other IoT applications

Check the exact breakout board before applying power. Some NEO-6M boards accept 5 V at their VCC pin because they include a regulator; others do not. That does not make their UART signals 5 V safe. ESP8266 GPIO is 3.3 V logic, so use a level shifter or divider if the GPS TX output is higher than 3.3 V. The u-blox NEO-6 documentation describes the receiver, but inexpensive breakout implementations vary.

Install Arduino software

  1. Install Arduino IDE.
  2. Add the ESP8266 package through Tools → Board → Boards Manager, then search for esp8266.
  3. Select NodeMCU 1.0 (ESP-12E Module) for a NodeMCU board. Use Generic ESP8266 Module only when your bare-module wiring and flash settings match that board definition.
  4. Select the correct serial port under Tools → Port.
  5. Install TinyGPSPlus from Sketch → Include Library → Manage Libraries.

The NEO-6M commonly uses 9,600 baud, but that is a typical default, not a guarantee. A module may have been reconfigured and retained another baud rate.

Test GPS reception before adding Wi-Fi

Put the antenna outdoors with a clear view of the sky. Indoor testing, metal roofs, tall buildings and poor antenna orientation can prevent a fix. Do not publish coordinates until the receiver reports a valid location.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.
Rank #2
Deegoo-FPV NEO-6M GPS Modules with Antennas, 2-Pack
  • GT-U7 main module GPS module using the original UBLOX 7th generation chip, Software is compatible with NEO-6M. GT-U7 module, with high sensitivity, low power consumption, miniaturization, its extremely high tracking sensitivity greatly expanded its positioning of the coverage;
  • With a USB interface, you can directly use the phone data cable on the computer point of view positioning effect; With IPEX antenna interface, the default distribution of active antenna, can be quickly positioned;
  • USB directly connected to the computer, That is, with the host computer-owned serial port function, no need for external serial module, send IPX interface active antenna;
  • If you have any issue when using our product,or you need product use documentation, please contact us directly for assistance.we will reply your problem in 24 hours.We try our best to provide the most professional service for each customer.
  • USB directly connected to the computer, That is, with the host computer-owned serial port function, no need for external serial module, send IPX interface active antenna
#include <TinyGPS++.h>
#include <SoftwareSerial.h>

TinyGPSPlus gps;
SoftwareSerial gpsSerial(D6, D7); // ESP8266 RX, TX

void setup() {
  Serial.begin(115200);
  gpsSerial.begin(9600);
}

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

  if (gps.location.isUpdated()) {
    Serial.print("Latitude: ");
    Serial.println(gps.location.lat(), 6);
    Serial.print("Longitude: ");
    Serial.println(gps.location.lng(), 6);
    Serial.print("Valid fix: ");
    Serial.println(gps.location.isValid() ? "yes" : "no");
    Serial.print("Satellites: ");
    Serial.println(gps.satellites.value());
    Serial.print("HDOP: ");
    Serial.println(gps.hdop.hdop());
  }

  if (millis() > 5000 && gps.charsProcessed() < 10) {
    Serial.println("No GPS data: check power, baud rate and TX/RX wiring");
  }
}

Open Serial Monitor at 115200 baud. These states mean different things:

  • No characters: power, wiring, baud-rate or hardware fault.
  • NMEA characters but no fix: wait outdoors and improve antenna visibility.
  • Zero coordinates: code read the location without checking isValid().
  • Valid but inaccurate coordinates: the receiver has a fix, but sky visibility, interference or antenna quality is limiting accuracy.

Feed characters continuously. Long blocking delays or network operations can cause software serial to lose NMEA data; hardware serial is preferable when your board design permits it.

Send coordinates to a cloud endpoint

The original implementation creates a ThingSpeak channel, assigns latitude to field 1 and longitude to field 2, and uploads using an ESP8266 write key. The browser later reads the channel using its channel ID and read access. See the original architecture and ThingSpeak service.

Rank #3
HiLetgo GY-NEO6MV2 NEO-6M GPS Flight Controller Module 3V-5V with Super Strong Ceramic Antenna for Arduino EEPROM APM 2.5
  • Module with a ceramic antenna, superior signal
  • Save the configuration parameter data EEPROM Down
  • With data backup battery;With LED signal indicator
  • Default baud rate: 9600, Interface: RS232 TTL
  • Compatible with a variety of flight control module

Your firmware should connect to Wi-Fi, continue servicing the GPS parser, wait for gps.location.isValid(), upload a controlled interval, check the HTTP response and reconnect after failures. A latest-position demonstration usually needs updates every 5–15 seconds, not every GPS sentence. The correct interval depends on freshness, power, service limits, storage and cost. A high-frequency tracker needs a purpose-built backend.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.
if (gps.location.isValid() &&
    millis() - lastUpload >= uploadInterval) {
  double lat = gps.location.lat();
  double lon = gps.location.lng();
  // POST or otherwise publish lat and lon to your endpoint.
  // Verify the HTTP status before treating the upload as successful.
  lastUpload = millis();
}

Keep the write key on the device, never in browser JavaScript. Treat a public channel as a location-privacy risk. A custom HTTPS endpoint, Firebase-style database, MQTT broker or local ESP8266 server can replace ThingSpeak when you need authentication, history, multiple devices or tighter control.

Choose how Google Maps should display the position

Option 1: generate a Google Maps link

This is the simplest path and does not require the Maps JavaScript API:

Rank #4
hiBCTR 2-Pack GY-NEO6MV2 NEO-6M GPS Module, Ceramic Antenna
  • Module Feature: With ceramic antenna, excellent signal.
  • Data Storage: Saves configuration parameter data in EEPROM Down.
  • Battery: Comes with data backup battery and LED signal indicator.
  • Interface: Default baud rate is 9600, interface is RS232 TTL.
  • Compatibility: Compatible with various flight control modules.NOTE: Ideal for Arduino, ESP32, and DIY IoT projects. NOT recommended for high-speed FPV racing drones due to the 1Hz default refresh rate.Provide dedicated configuration guidelines and sample codes. If you need these digital resources, please contact us via Amazon messaging to obtain immediate technical support.
const url = `https://www.google.com/maps/search/?api=1&query=${lat},${lon}`;

Use this when the reader only needs to open the latest point in Google Maps. It is not an embedded, continuously updating map.

Option 2: embed an interactive map

Standard Google Maps JavaScript API requests require an API key (or OAuth), an enabled API and billing. Google also provides a Maps Demo Key for prototyping. Review Google’s current key setup, usage and billing, and pay-as-you-go pricing. Many Essentials services currently include 10,000 free monthly billable events per SKU, but the exact charge depends on SKU, geography and account.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

Restrict a browser key by HTTP referrer, enable only the APIs you need, and set quotas. Do not commit unrestricted keys to a public repository.

Best Value
GPS Module Receiver,Navigation Satellite Positioning NEO-6M (Arduino GPS, Drone Microcontroller, GPS Receiver) Compatible with 51 Microcontroller STM32 Arduino UNO R3 with Antenna High Sensitivity
  • With a USB interface, you can directly use the phone data cable on the computer point of view positioning effect; With IPEX antenna interface, the default distribution of active antenna, can be quickly positioned;
  • GT-U7 main module GPS module using the original UBLOX 7th generation chip, Software is compatible with NEO-6M. GT-U7 module, with high sensitivity, low power consumption, miniaturization, its extremely high tracking sensitivity greatly expanded its positioning of the coverage;
  • USB directly connected to the computer, That is, with the host computer-owned serial port function, no need for external serial module, send IPX interface active antenna;
  • If you have any issue when using our product,or you need product use documentation, please contact us directly for assistance.we will reply your problem in 24 hours.We try our best to provide the most professional service for each customer.
  • How to use the GPS module better, the link is obtained in the Product guides and documents, please download it before use
<div id="map" style="height:500px"></div>
<script>
let map, marker;

async function getPosition() {
  const response = await fetch("YOUR_DATA_ENDPOINT");
  if (!response.ok) throw new Error(`Data request failed: ${response.status}`);
  const data = await response.json();

  // Adapt these names to your endpoint. For ThingSpeak, map field1/field2.
  const lat = Number(data.latitude);
  const lng = Number(data.longitude);
  if (!Number.isFinite(lat) || !Number.isFinite(lng) ||
      lat < -90 || lat > 90 || lng < -180 || lng > 180) {
    throw new Error("Invalid GPS coordinates");
  }
  return { lat, lng };
}

async function initMap() {
  const position = await getPosition();
  map = new google.maps.Map(document.getElementById("map"), {
    center: position, zoom: 15
  });
  marker = new google.maps.Marker({ position, map, title: "GPS position" });
}

async function refreshPosition() {
  try {
    const position = await getPosition();
    marker.setPosition(position);
    // Pan only if desired; constant panning can make a map hard to use.
    document.title = `GPS: ${position.lat.toFixed(6)}, ${position.lng.toFixed(6)}`;
  } catch (error) {
    console.error(error);
  }
}

window.initMap = initMap;
setInterval(refreshPosition, 10000);
</script>
<script async src="https://maps.googleapis.com/maps/api/js?key=YOUR_API_KEY&callback=initMap"></script>

Show the last successful update time and an offline/stale state. Validate latitude and longitude before placing a marker, and remember that the marker represents the most recently uploaded valid fix, not necessarily the device’s current position.

Independent reader supportYour contribution helps us test, update, and keep practical guides available for everyone.Support on Ko-Fi

Troubleshooting checklist

Symptom Likely causes
No NMEA data Missing power, reversed TX/RX, wrong baud, poor wiring or damaged GPS.
NMEA data but no fix Indoor location, blocked sky view, antenna problem or insufficient acquisition time.
ESP8266 resets Weak 3.3 V supply, Wi-Fi current surge or inadequate decoupling.
Cloud value never changes Wrong write key/channel, failed HTTP request, excessive interval or Wi-Fi loss.
Browser shows an old point Polling or caching, stale channel data, wrong field mapping or delayed upload.
Blank map Invalid key, disabled API, missing billing, referrer restriction, quota or JavaScript error.
“For development purposes only” Google credential, billing or restriction configuration problem.

For current Google credential errors, use Google’s Maps JavaScript troubleshooting guide.

When this design is—and is not—appropriate

ThingSpeak plus a polled map is a useful classroom demonstration and latest-location prototype. It is not automatically real-time, private or production-ready. A production system may need TLS, authentication, device identity, stale-data detection, retention rules, geofencing, multi-device support and a backend designed for its update rate.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

Google Maps is appropriate when its familiar interface or branding matters. A coordinate link is cheaper and simpler for one-off locations. Leaflet can provide an open-source map interface, but you still need a tile provider, attribution and compliance with that provider’s usage policy. A local ESP8266 web page avoids cloud services when the viewer is on the same network, but it is not remotely accessible without additional infrastructure.

Quick Recap

Bestseller No. 3
HiLetgo GY-NEO6MV2 NEO-6M GPS Flight Controller Module 3V-5V with Super Strong Ceramic Antenna for Arduino EEPROM APM 2.5
HiLetgo GY-NEO6MV2 NEO-6M GPS Flight Controller Module 3V-5V with Super Strong Ceramic Antenna for Arduino EEPROM APM 2.5
Module with a ceramic antenna, superior signal; Save the configuration parameter data EEPROM Down
$8.99
Bestseller No. 4
hiBCTR 2-Pack GY-NEO6MV2 NEO-6M GPS Module, Ceramic Antenna
hiBCTR 2-Pack GY-NEO6MV2 NEO-6M GPS Module, Ceramic Antenna
Module Feature: With ceramic antenna, excellent signal.; Data Storage: Saves configuration parameter data in EEPROM Down.
$10.97

Security and privacy

  • Do not publish a personal or vehicle location publicly unless that is intentional.
  • Never place an ESP8266 write credential in browser code.
  • Use read-only access for the map page where possible.
  • Restrict Google API keys by referrer and monitor quotas.
  • Store only the location history you actually need.
  • Show data freshness so viewers do not mistake an old fix for a live position.

Product prices and availability are accurate as of the date/time indicated and are subject to change. Any price and availability information displayed on Amazon at the time of purchase will apply.