{"id":160038,"date":"2024-08-13T16:20:30","date_gmt":"2024-08-13T16:20:30","guid":{"rendered":"https:\/\/randomnerdtutorials.com\/?p=160038"},"modified":"2025-03-24T11:52:13","modified_gmt":"2025-03-24T11:52:13","slug":"esp32-neo-6m-gps-module-arduino","status":"publish","type":"post","link":"https:\/\/randomnerdtutorials.com\/esp32-neo-6m-gps-module-arduino\/","title":{"rendered":"ESP32 with NEO-6M GPS Module (Arduino IDE)"},"content":{"rendered":"\n<p>Learn how to interface the NEO-6M GPS module with the ESP32 to get GPS data. You&#8217;ll learn how to get raw GPS data and interpret NMEA sentences. Finally, we&#8217;ll show you how to easily get latitude, longitude, altitude, speed, and UTC time using the <span class=\"rnthl rntliteral\">TinyGPSPlus<\/span> library. The ESP32 will be programmed using Arduino IDE.<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><img data-recalc-dims=\"1\" fetchpriority=\"high\" decoding=\"async\" width=\"1200\" height=\"675\" src=\"https:\/\/i0.wp.com\/randomnerdtutorials.com\/wp-content\/uploads\/2024\/07\/ESP32-NEO-6M-GPS-Module-Guide-Arduino-IDE.jpg?resize=1200%2C675&#038;quality=100&#038;strip=all&#038;ssl=1\" alt=\"ESP32 with NEO-6M GPS Module Arduino IDE\" class=\"wp-image-160856\" srcset=\"https:\/\/i0.wp.com\/randomnerdtutorials.com\/wp-content\/uploads\/2024\/07\/ESP32-NEO-6M-GPS-Module-Guide-Arduino-IDE.jpg?w=1920&amp;quality=100&amp;strip=all&amp;ssl=1 1920w, https:\/\/i0.wp.com\/randomnerdtutorials.com\/wp-content\/uploads\/2024\/07\/ESP32-NEO-6M-GPS-Module-Guide-Arduino-IDE.jpg?resize=300%2C169&amp;quality=100&amp;strip=all&amp;ssl=1 300w, https:\/\/i0.wp.com\/randomnerdtutorials.com\/wp-content\/uploads\/2024\/07\/ESP32-NEO-6M-GPS-Module-Guide-Arduino-IDE.jpg?resize=1024%2C576&amp;quality=100&amp;strip=all&amp;ssl=1 1024w, https:\/\/i0.wp.com\/randomnerdtutorials.com\/wp-content\/uploads\/2024\/07\/ESP32-NEO-6M-GPS-Module-Guide-Arduino-IDE.jpg?resize=768%2C432&amp;quality=100&amp;strip=all&amp;ssl=1 768w, https:\/\/i0.wp.com\/randomnerdtutorials.com\/wp-content\/uploads\/2024\/07\/ESP32-NEO-6M-GPS-Module-Guide-Arduino-IDE.jpg?resize=1536%2C864&amp;quality=100&amp;strip=all&amp;ssl=1 1536w\" sizes=\"(max-width: 1200px) 100vw, 1200px\" \/><\/figure><\/div>\n\n\n<p>In summary, in this tutorial you&#8217;ll learn how to:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Wire the NEO-6M GPS module to the ESP32 via serial<\/li>\n\n\n\n<li>Get raw GPS data<\/li>\n\n\n\n<li>Parse raw data to obtain selected and readable GPS information<\/li>\n\n\n\n<li>Get your current location<\/li>\n<\/ul>\n\n\n\n<p>We have a similar guide for the <a href=\"https:\/\/randomnerdtutorials.com\/esp8266-nodemcu-neo-6m-gps-module-arduino\/\">ESP8266 board with NEO-6M GPS Module (Arduino IDE)<\/a><\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Table of Contents<\/h2>\n\n\n\n<p>Throughout this tutorial, we&#8217;ll cover the following subjects:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"#neo-6m-gps-intro\" title=\"\">Introducing the NEO-6M GPS Module<\/a><\/li>\n\n\n\n<li><a href=\"#neo-6m-gps-wiring-esp32\" title=\"\">Wiring the NEO-6M GPS Module to the ESP32<\/a><\/li>\n\n\n\n<li><a href=\"#test-neo-6m-esp32-raw-data\" title=\"\">Getting Raw GPS Data &#8211; Testing the NEO-6M GPS Module with the ESP32<\/a><\/li>\n\n\n\n<li><a href=\"#NMEA-sentences\" title=\"\">NMEA Sentences<\/a><\/li>\n\n\n\n<li><a href=\"#parsing-nmea-sentences\" title=\"\">Parsing NMEA Sentences with TinyGPSPlus Library<\/a><\/li>\n\n\n\n<li><a href=\"#get-gps-data\" title=\"\">Getting GPS Data Using the NEO-6M GPS Module and the TinyGPSPlus Library<\/a><\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">Prerequisites<\/h2>\n\n\n\n<p>This tutorial focuses on programming the ESP32 using the Arduino core. Before proceeding, you should have the ESP32 Arduino core installed in your Arduino IDE. Follow the next tutorial to install the ESP32 on the Arduino IDE, if you haven\u2019t already.<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/randomnerdtutorials.com\/installing-esp32-arduino-ide-2-0\/\" title=\"\">Installing the ESP32 Board in Arduino IDE (Windows, Mac OS X, and Linux instructions)<\/a><\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"neo-6m-gps-intro\">Introducing the NEO-6M GPS Module<\/h2>\n\n\n\n<p>The NEO-6M GPS module is a GPS receiver compatible with most microcontroller boards. It can get data about location, speed, altitude, and time.<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><img data-recalc-dims=\"1\" decoding=\"async\" width=\"750\" height=\"422\" src=\"https:\/\/i0.wp.com\/randomnerdtutorials.com\/wp-content\/uploads\/2024\/07\/NEO-6M-GPS-Module.jpg?resize=750%2C422&#038;quality=100&#038;strip=all&#038;ssl=1\" alt=\"NEO-6M GPS Module\" class=\"wp-image-160848\" srcset=\"https:\/\/i0.wp.com\/randomnerdtutorials.com\/wp-content\/uploads\/2024\/07\/NEO-6M-GPS-Module.jpg?w=750&amp;quality=100&amp;strip=all&amp;ssl=1 750w, https:\/\/i0.wp.com\/randomnerdtutorials.com\/wp-content\/uploads\/2024\/07\/NEO-6M-GPS-Module.jpg?resize=300%2C169&amp;quality=100&amp;strip=all&amp;ssl=1 300w\" sizes=\"(max-width: 750px) 100vw, 750px\" \/><\/figure><\/div>\n\n\n<p>It comes with a small backup battery, external EEPROM, and an LED signal indicator. This LED will start blinking when it gets a position fix.<\/p>\n\n\n\n<p>Usually, these modules come with a GPS ceramic antenna.<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><img data-recalc-dims=\"1\" decoding=\"async\" width=\"750\" height=\"422\" src=\"https:\/\/i0.wp.com\/randomnerdtutorials.com\/wp-content\/uploads\/2024\/07\/ceramic-GPS-antenna.jpg?resize=750%2C422&#038;quality=100&#038;strip=all&#038;ssl=1\" alt=\"ceramic GPS antenna\" class=\"wp-image-160851\" srcset=\"https:\/\/i0.wp.com\/randomnerdtutorials.com\/wp-content\/uploads\/2024\/07\/ceramic-GPS-antenna.jpg?w=750&amp;quality=100&amp;strip=all&amp;ssl=1 750w, https:\/\/i0.wp.com\/randomnerdtutorials.com\/wp-content\/uploads\/2024\/07\/ceramic-GPS-antenna.jpg?resize=300%2C169&amp;quality=100&amp;strip=all&amp;ssl=1 300w\" sizes=\"(max-width: 750px) 100vw, 750px\" \/><\/figure><\/div>\n\n\n<p>But, you can change it to any other compatible antenna that might suit your project better. For example, I like to use the one at the right in the picture below because it is waterproof, and the antenna comes with a long cable which allows for more flexibility.<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><img data-recalc-dims=\"1\" loading=\"lazy\" decoding=\"async\" width=\"750\" height=\"422\" src=\"https:\/\/i0.wp.com\/randomnerdtutorials.com\/wp-content\/uploads\/2024\/07\/antennas-for-GPS-Modules.jpg?resize=750%2C422&#038;quality=100&#038;strip=all&#038;ssl=1\" alt=\"antennas for GPS modules\" class=\"wp-image-160852\" srcset=\"https:\/\/i0.wp.com\/randomnerdtutorials.com\/wp-content\/uploads\/2024\/07\/antennas-for-GPS-Modules.jpg?w=750&amp;quality=100&amp;strip=all&amp;ssl=1 750w, https:\/\/i0.wp.com\/randomnerdtutorials.com\/wp-content\/uploads\/2024\/07\/antennas-for-GPS-Modules.jpg?resize=300%2C169&amp;quality=100&amp;strip=all&amp;ssl=1 300w\" sizes=\"(max-width: 750px) 100vw, 750px\" \/><\/figure><\/div>\n\n\n<p>The NEO-6M GPS Module communicates with a microcontroller using serial communication protocol.<\/p>\n\n\n\n<p>This module works with standard NMEA sentences. NMEA stands for National Marine Electronics Association, and in the world of GPS, it is a standard data format supported by GPS manufacturers.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"neo-6m-gps-features\">NEO-6M GPS Module Features<\/h3>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><img data-recalc-dims=\"1\" loading=\"lazy\" decoding=\"async\" width=\"263\" height=\"263\" src=\"https:\/\/i0.wp.com\/randomnerdtutorials.com\/wp-content\/uploads\/2023\/08\/NEO-6M-GPS-Module.jpg?resize=263%2C263&#038;quality=100&#038;strip=all&#038;ssl=1\" alt=\"NEO-6M GPS Module\" class=\"wp-image-134340\" srcset=\"https:\/\/i0.wp.com\/randomnerdtutorials.com\/wp-content\/uploads\/2023\/08\/NEO-6M-GPS-Module.jpg?w=263&amp;quality=100&amp;strip=all&amp;ssl=1 263w, https:\/\/i0.wp.com\/randomnerdtutorials.com\/wp-content\/uploads\/2023\/08\/NEO-6M-GPS-Module.jpg?resize=150%2C150&amp;quality=100&amp;strip=all&amp;ssl=1 150w\" sizes=\"(max-width: 263px) 100vw, 263px\" \/><\/figure><\/div>\n\n\n<p>In summary:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>This module has an external antenna and built-in EEPROM.<\/li>\n\n\n\n<li>Interface: RS232 TTL<\/li>\n\n\n\n<li>Power supply: 3V to 5V<\/li>\n\n\n\n<li>Default baudrate: 9600 bps<\/li>\n\n\n\n<li>Works with standard NMEA sentences<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">Where to buy?<\/h3>\n\n\n\n<p>You can get the NEO-6M GPS module for a price between $5 to $20. We recommend checking the&nbsp;<a href=\"https:\/\/makeradvisor.com\/tools\/neo-6m-gps-module\/\" target=\"_blank\" rel=\"noreferrer noopener\">NEO-6M GPS module page on Maker Advisor<\/a>&nbsp;to compare the prices in different stores and find the best one.<\/p>\n\n\n<p>You can use the preceding links or go directly to <a href=\"https:\/\/makeradvisor.com\/tools\/?utm_source=rnt&utm_medium=post&utm_campaign=post\" target=\"_blank\">MakerAdvisor.com\/tools<\/a> to find all the parts for your projects at the best price!<\/p><p style=\"text-align:center;\"><a href=\"https:\/\/makeradvisor.com\/tools\/?utm_source=rnt&utm_medium=post&utm_campaign=post\" target=\"_blank\"><img data-recalc-dims=\"1\" decoding=\"async\" src=\"https:\/\/i0.wp.com\/randomnerdtutorials.com\/wp-content\/uploads\/2017\/10\/header-200.png?w=1200&#038;quality=100&#038;strip=all&#038;ssl=1\"><\/a><\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"neo-6m-gps-wiring-esp32\">Wiring the NEO-6M GPS Module to the ESP32<\/h2>\n\n\n\n<p>We&#8217;ll connect the NEO-6M GPS Module using the ESP32 default UART2 pins. You can use the following picture and table as a reference.<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><img data-recalc-dims=\"1\" loading=\"lazy\" decoding=\"async\" width=\"777\" height=\"779\" src=\"https:\/\/i0.wp.com\/randomnerdtutorials.com\/wp-content\/uploads\/2024\/07\/ESP32-NEO-GPS-Circuit_fritzing.png?resize=777%2C779&#038;quality=100&#038;strip=all&#038;ssl=1\" alt=\"Wiring the NEO-6M GPS Module to the ESP32\" class=\"wp-image-160831\" srcset=\"https:\/\/i0.wp.com\/randomnerdtutorials.com\/wp-content\/uploads\/2024\/07\/ESP32-NEO-GPS-Circuit_fritzing.png?w=777&amp;quality=100&amp;strip=all&amp;ssl=1 777w, https:\/\/i0.wp.com\/randomnerdtutorials.com\/wp-content\/uploads\/2024\/07\/ESP32-NEO-GPS-Circuit_fritzing.png?resize=300%2C300&amp;quality=100&amp;strip=all&amp;ssl=1 300w, https:\/\/i0.wp.com\/randomnerdtutorials.com\/wp-content\/uploads\/2024\/07\/ESP32-NEO-GPS-Circuit_fritzing.png?resize=150%2C150&amp;quality=100&amp;strip=all&amp;ssl=1 150w, https:\/\/i0.wp.com\/randomnerdtutorials.com\/wp-content\/uploads\/2024\/07\/ESP32-NEO-GPS-Circuit_fritzing.png?resize=768%2C770&amp;quality=100&amp;strip=all&amp;ssl=1 768w\" sizes=\"(max-width: 777px) 100vw, 777px\" \/><\/figure><\/div>\n\n\n<p><\/p>\n\n\n\n<figure class=\"wp-block-table\"><table><tbody><tr><td><strong>NEO-6M GPS Module<\/strong><\/td><td><strong>ESP32<\/strong><\/td><\/tr><tr><td>VCC<\/td><td><span class=\"rnthl rntcred\">3V3<\/span><\/td><\/tr><tr><td>RX<\/td><td>TX2 (<span class=\"rnthl rntcyellow\">GPIO 17<\/span>)<\/td><\/tr><tr><td>TX<\/td><td>RX2 (<span class=\"rnthl rntcgreen\">GPIO 16<\/span>)<\/td><\/tr><tr><td>GND<\/td><td><span class=\"rnthl rntcblack\">GND<\/span><\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"test-neo-6m-esp32-raw-data\">Getting Raw GPS Data &#8211; Testing the NEO-6M GPS Module with the ESP32<\/h2>\n\n\n\n<p>To get raw GPS data you just need to start a serial communication with the GPS module and read the available data.<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><img data-recalc-dims=\"1\" loading=\"lazy\" decoding=\"async\" width=\"750\" height=\"422\" src=\"https:\/\/i0.wp.com\/randomnerdtutorials.com\/wp-content\/uploads\/2024\/07\/ESP32-with-NEO-GPS-Module-Circuit.jpg?resize=750%2C422&#038;quality=100&#038;strip=all&#038;ssl=1\" alt=\"ESP32 with NEO-6M GPS Module\" class=\"wp-image-160847\" srcset=\"https:\/\/i0.wp.com\/randomnerdtutorials.com\/wp-content\/uploads\/2024\/07\/ESP32-with-NEO-GPS-Module-Circuit.jpg?w=750&amp;quality=100&amp;strip=all&amp;ssl=1 750w, https:\/\/i0.wp.com\/randomnerdtutorials.com\/wp-content\/uploads\/2024\/07\/ESP32-with-NEO-GPS-Module-Circuit.jpg?resize=300%2C169&amp;quality=100&amp;strip=all&amp;ssl=1 300w\" sizes=\"(max-width: 750px) 100vw, 750px\" \/><\/figure><\/div>\n\n\n<p>The following code establishes a serial communication with the GPS module and reads the available data.<\/p>\n\n\n<pre style=\"max-height: 40em; margin-bottom: 20px;\"><code class=\"language-c\">\/*********\n  Rui Santos &amp; Sara Santos - Random Nerd Tutorials\n  Complete instructions at https:\/\/RandomNerdTutorials.com\/esp32-neo-6m-gps-module-arduino\/\n  Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files.\n  The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.\n*********\/\n\n \/\/ Define the RX and TX pins for Serial 2\n#define RXD2 16\n#define TXD2 17\n\n#define GPS_BAUD 9600\n\n\/\/ Create an instance of the HardwareSerial class for Serial 2\nHardwareSerial gpsSerial(2);\n\nvoid setup(){\n  \/\/ Serial Monitor\n  Serial.begin(115200);\n  \n  \/\/ Start Serial 2 with the defined RX and TX pins and a baud rate of 9600\n  gpsSerial.begin(GPS_BAUD, SERIAL_8N1, RXD2, TXD2);\n  Serial.println(&quot;Serial 2 started at 9600 baud rate&quot;);\n}\n\nvoid loop(){\n  while (gpsSerial.available() &gt; 0){\n    \/\/ get the byte data from the GPS\n    char gpsData = gpsSerial.read();\n    Serial.print(gpsData);\n  }\n  delay(1000);\n  Serial.println(&quot;-------------------------------&quot;);\n}\n<\/code><\/pre>\n\t<p style=\"text-align:center\"><a class=\"rntwhite\" href=\"https:\/\/github.com\/RuiSantosdotme\/Random-Nerd-Tutorials\/raw\/master\/Projects\/ESP32\/ESP32_NEO_6M_GPS_Basic_Serial.ino\" target=\"_blank\">View raw code<\/a><\/p>\n\n\n\n<h3 class=\"wp-block-heading\">How Does the Code Work?<\/h3>\n\n\n\n<p>This sketch assumes you are using <span class=\"rnthl rntcyellow\">GPIO 16<\/span> and <span class=\"rnthl rntclgray\">GPIO 17<\/span> as RX and TX serial pins to establish serial communication with the GPS module. If you&#8217;re using other pins you should edit that on the following lines:<\/p>\n\n\n\n<pre class=\"wp-block-code language-c\"><code>\/\/ Define the RX and TX pins for Serial 2\n#define RXD2 16\n#define TXD2 17<\/code><\/pre>\n\n\n\n<p>Also, if your module uses a different default baud rate than 9600 bps, you should modify the code on the following line:<\/p>\n\n\n\n<pre class=\"wp-block-code language-c\"><code>#define GPS_BAUD 9600<\/code><\/pre>\n\n\n\n<p>Then, we create an instance of the HardwareSerial to use UART 2 called <span class=\"rnthl rntliteral\">gpsSerial<\/span>.<\/p>\n\n\n\n<pre class=\"wp-block-code language-c\"><code>\/\/ Create an instance of the HardwareSerial class for Serial 2\nHardwareSerial gpsSerial(2);<\/code><\/pre>\n\n\n\n<p>In the <span class=\"rnthl rntliteral\">setup()<\/span>, we initiate the Serial Monitor.<\/p>\n\n\n\n<pre class=\"wp-block-code language-c\"><code>\/\/ Serial Monitor\nSerial.begin(115200);<\/code><\/pre>\n\n\n\n<p>Then, we initialize a serial communication with the GPS module.<\/p>\n\n\n\n<pre class=\"wp-block-code language-c\"><code>\/\/ Start Serial 2 with the defined RX and TX pins and a baud rate of 9600\ngpsSerial.begin(GPS_BAUD, SERIAL_8N1, RXD2, TXD2);\nSerial.println(\"Serial 2 started at 9600 baud rate\");<\/code><\/pre>\n\n\n\n<p>In the <span class=\"rnthl rntliteral\">loop()<\/span>, the code listens to the GPS serial port, and when data is received from the module, it is printed in the serial monitor.<\/p>\n\n\n\n<pre class=\"wp-block-code language-c\"><code>void loop(){\n  while (gpsSerial.available() &gt; 0){\n    \/\/ get the byte data from the GPS\n    char gpsData = gpsSerial.read();\n    Serial.print(gpsData);\n  }\n  delay(1000);\n  Serial.println(\"-------------------------------\");\n}<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">Testing the Code<\/h3>\n\n\n\n<p>Upload the code to your board. <\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><img data-recalc-dims=\"1\" loading=\"lazy\" decoding=\"async\" width=\"36\" height=\"39\" src=\"https:\/\/i0.wp.com\/randomnerdtutorials.com\/wp-content\/uploads\/2021\/05\/arduino-ide-2-upload-button.png?resize=36%2C39&#038;quality=100&#038;strip=all&#038;ssl=1\" alt=\"Arduino IDE 2 Upload Button\" class=\"wp-image-146269\"\/><\/figure><\/div>\n\n\n<p>Make sure the antenna is connected and that the module or antenna is placed outside or next to a window so that it can get data from the satellites.<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><img data-recalc-dims=\"1\" loading=\"lazy\" decoding=\"async\" width=\"750\" height=\"422\" src=\"https:\/\/i0.wp.com\/randomnerdtutorials.com\/wp-content\/uploads\/2024\/07\/active-GPS-antenna-for-NEO-6M.jpg?resize=750%2C422&#038;quality=100&#038;strip=all&#038;ssl=1\" alt=\"active GPS antenna for NEO-6M\" class=\"wp-image-160850\" srcset=\"https:\/\/i0.wp.com\/randomnerdtutorials.com\/wp-content\/uploads\/2024\/07\/active-GPS-antenna-for-NEO-6M.jpg?w=750&amp;quality=100&amp;strip=all&amp;ssl=1 750w, https:\/\/i0.wp.com\/randomnerdtutorials.com\/wp-content\/uploads\/2024\/07\/active-GPS-antenna-for-NEO-6M.jpg?resize=300%2C169&amp;quality=100&amp;strip=all&amp;ssl=1 300w\" sizes=\"(max-width: 750px) 100vw, 750px\" \/><\/figure><\/div>\n\n\n<p>The module&#8217;s blue LED will start blinking when it finds a position fix.<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><img data-recalc-dims=\"1\" loading=\"lazy\" decoding=\"async\" width=\"750\" height=\"422\" src=\"https:\/\/i0.wp.com\/randomnerdtutorials.com\/wp-content\/uploads\/2024\/07\/Neo-6M-GPS-Module-Blue-LED-Blinking.jpg?resize=750%2C422&#038;quality=100&#038;strip=all&#038;ssl=1\" alt=\"NEO-6M GPS Module Blue LED Blinking\" class=\"wp-image-160849\" srcset=\"https:\/\/i0.wp.com\/randomnerdtutorials.com\/wp-content\/uploads\/2024\/07\/Neo-6M-GPS-Module-Blue-LED-Blinking.jpg?w=750&amp;quality=100&amp;strip=all&amp;ssl=1 750w, https:\/\/i0.wp.com\/randomnerdtutorials.com\/wp-content\/uploads\/2024\/07\/Neo-6M-GPS-Module-Blue-LED-Blinking.jpg?resize=300%2C169&amp;quality=100&amp;strip=all&amp;ssl=1 300w\" sizes=\"(max-width: 750px) 100vw, 750px\" \/><\/figure><\/div>\n\n\n<p>The Serial Monitor will display NMEA sentences with GPS data. When you run this sketch for the first time, it may take a few minutes until it can get a position fix. You&#8217;ll start getting actual data when the blue LED starts blinking.<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><img data-recalc-dims=\"1\" loading=\"lazy\" decoding=\"async\" width=\"666\" height=\"336\" src=\"https:\/\/i0.wp.com\/randomnerdtutorials.com\/wp-content\/uploads\/2024\/07\/ESP32-Get-Raw-GPS-Data-Serial-Monitor.png?resize=666%2C336&#038;quality=100&#038;strip=all&#038;ssl=1\" alt=\"Getting Raw GPS Data with ESP32\" class=\"wp-image-160838\" srcset=\"https:\/\/i0.wp.com\/randomnerdtutorials.com\/wp-content\/uploads\/2024\/07\/ESP32-Get-Raw-GPS-Data-Serial-Monitor.png?w=666&amp;quality=100&amp;strip=all&amp;ssl=1 666w, https:\/\/i0.wp.com\/randomnerdtutorials.com\/wp-content\/uploads\/2024\/07\/ESP32-Get-Raw-GPS-Data-Serial-Monitor.png?resize=300%2C151&amp;quality=100&amp;strip=all&amp;ssl=1 300w\" sizes=\"(max-width: 666px) 100vw, 666px\" \/><\/figure><\/div>\n\n\n<p>You should get a bunch of information in the GPS standard language, NMEA. Each line you get in the serial monitor is an NMEA sentence.<\/p>\n\n\n\n<p>NMEA stands for National Marine Electronics Association, and in the world of GPS, it is a standard data format supported by GPS manufacturers.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"NMEA-sentences\">NMEA Sentences<\/h3>\n\n\n\n<p>NMEA sentences start with the $ character, and each data field is separated by a comma.<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\"><strong>$GPRMC<\/strong>,110827.00,A,4107.32485,N,00831.79799,W,0.888,30.44,180724,,,A*4B<br><strong>$GPVTG<\/strong>,30.44,T,,M,0.888,N,1.644,K,A*01<br><strong>$GPGGA<\/strong>,110827.00,41XX.32485,N,00831.79799,W,1,07,0.99,123.1,M,50.1,M,,*48<br><strong>$GPGSA<\/strong>,A,3,03,32,22,08,04,14,17,,,,,,2.25,0.99,2.02*0A<br><strong>$GPGSV<\/strong>,3,1,11,3,11,22,26,296,29,27,01,142,,32,17,042,23*48<br><strong>$GPGLL<\/strong>,4107.32485,N,00831.79799,W,110827.00,A,A*7F<\/pre>\n\n\n\n<p>There are different types of NMEA sentences. The type of message is indicated by the characters before the first comma.<\/p>\n\n\n\n<p>The <strong>GP <\/strong>after the <strong>$<\/strong> indicates it is a GPS position.&nbsp;The <strong>$GPGGA<\/strong> is the basic GPS NMEA message, that provides 3D location and accuracy data. <\/p>\n\n\n\n<p>In the following sentence:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\"><strong>$GPGGA<\/strong>,110827.00,41XX.32485,N,008XX.XXXXX,W,1,07,0.99,123.1,M,50.1,M,,*48<\/pre>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>110827<\/strong>&nbsp;\u2013 represents the time at which the fix location was taken, 11:08:27 UTC<\/li>\n\n\n\n<li><strong>41XX.32845,N<\/strong>&nbsp;\u2013 latitude 41 deg XX.32845,N<\/li>\n\n\n\n<li><strong>00831.79799,W<\/strong>&nbsp;\u2013 Longitude 008 deg XX.XXXXX\u2032 W<\/li>\n\n\n\n<li><strong>1<\/strong>&nbsp;\u2013 fix quality (0 = invalid; 1= GPS fix; 2 = DGPS fix; 3 = PPS fix; 4 = Real Time Kinematic; 5 = Float RTK; 6 = estimated (dead reckoning); 7 = Manual input mode; 8 = Simulation mode)<\/li>\n\n\n\n<li><strong>07<\/strong>&nbsp;\u2013 number of satellites being tracked<\/li>\n\n\n\n<li><strong>0.99<\/strong>&nbsp;\u2013 Horizontal dilution of position (less than one is ideal)<\/li>\n\n\n\n<li><strong>123.1, M<\/strong>&nbsp;\u2013 Altitude, in meters above the sea level<\/li>\n\n\n\n<li><strong>50.1, M<\/strong>&nbsp;\u2013&nbsp;Height of geoid (mean sea level) above WGS84 ellipsoid<\/li>\n\n\n\n<li>empty field \u2013&nbsp;time in seconds since last DGPS update<\/li>\n\n\n\n<li>empty field \u2013&nbsp;DGPS station ID number<\/li>\n\n\n\n<li><strong>*4<\/strong>8&nbsp;\u2013 the checksum data, always begins with *<\/li>\n<\/ul>\n\n\n\n<p>The other NMEA sentences provide additional information:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>$GPGSA<\/strong>&nbsp;\u2013&nbsp;GPS DOP and active satellites<\/li>\n\n\n\n<li><strong>$GPGSV<\/strong>&nbsp;\u2013&nbsp;Detailed GPS satellite information<\/li>\n\n\n\n<li><strong>$GPGLL<\/strong>&nbsp;\u2013&nbsp;Geographic Latitude and Longitude<\/li>\n\n\n\n<li><strong>$GPRMC<\/strong>&nbsp;\u2013&nbsp;Essential GPS pvt (position, velocity, time) data<\/li>\n\n\n\n<li><strong>$GPVTG<\/strong>&nbsp;\u2013&nbsp;Velocity made good<\/li>\n<\/ul>\n\n\n\n<p>You can use this <a href=\"https:\/\/swairlearn.bluecover.pt\/nmea_analyser\" target=\"_blank\" rel=\"noopener\" title=\"\">Online NME Analyser <\/a>and paste your sentences there to interpret the GPS data.<\/p>\n\n\n\n<p>However, the easiest way to get and interpret the GPS data you want is to parse your NMEA sentences directly in the code. For that, we can use the <a href=\"https:\/\/github.com\/mikalhart\/TinyGPSPlus\" target=\"_blank\" rel=\"noopener\" title=\"\">TinyGPSPlus <\/a>library that provides methods to extract data from the NMEA sentences easily.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"parsing-nmea-sentences\">Parsing NMEA Sentences with TinyGPSPlus Library<\/h2>\n\n\n\n<p>The TinyGPSPlus library makes it simple to get GPS data in a format that is easy to understand.&nbsp;You can click&nbsp;<a href=\"http:\/\/arduiniana.org\/libraries\/tinygpsplus\/\" target=\"_blank\" rel=\"noreferrer noopener\">here<\/a>&nbsp;for more information about the TinyGPSPlus Library.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Installing the TinyGPSPlus Library<\/h3>\n\n\n\n<p>In the Arduino IDE, go to <strong>Sketch <\/strong>> I<strong>nclude Library<\/strong> > <strong>Manage Libraries<\/strong> or click on the Library Manager icon at the left sidebar.<\/p>\n\n\n\n<p>Search for <strong>TinyGPSPlus<\/strong> and install the library by Mikal Hart.<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><img data-recalc-dims=\"1\" loading=\"lazy\" decoding=\"async\" width=\"750\" height=\"497\" src=\"https:\/\/i0.wp.com\/randomnerdtutorials.com\/wp-content\/uploads\/2024\/07\/install-tiny-gps-plus-library-arduino-ide.png?resize=750%2C497&#038;quality=100&#038;strip=all&#038;ssl=1\" alt=\"Installing TinyGPSPlus Library Arduino IDE\" class=\"wp-image-160832\" srcset=\"https:\/\/i0.wp.com\/randomnerdtutorials.com\/wp-content\/uploads\/2024\/07\/install-tiny-gps-plus-library-arduino-ide.png?w=750&amp;quality=100&amp;strip=all&amp;ssl=1 750w, https:\/\/i0.wp.com\/randomnerdtutorials.com\/wp-content\/uploads\/2024\/07\/install-tiny-gps-plus-library-arduino-ide.png?resize=300%2C199&amp;quality=100&amp;strip=all&amp;ssl=1 300w\" sizes=\"(max-width: 750px) 100vw, 750px\" \/><\/figure><\/div>\n\n\n<h2 class=\"wp-block-heading\" id=\"get-gps-data\">Getting GPS Data Using the NEO-6M GPS Module and the TinyGPSPlus Library<\/h2>\n\n\n\n<p>The following code shows how to get GPS data using the TinyGPSPlus library. We&#8217;ll get date, time, speed, altitude, number of visible satellites, and HDOP (a measurement of how precise the signal is).<\/p>\n\n\n<pre style=\"max-height: 40em; margin-bottom: 20px;\"><code class=\"language-c\">\/*********\n  Rui Santos &amp; Sara Santos - Random Nerd Tutorials\n  Complete instructions at https:\/\/RandomNerdTutorials.com\/esp32-neo-6m-gps-module-arduino\/\n  Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files.\n  The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.\n*********\/\n\n#include &lt;TinyGPS++.h&gt;\n\n\/\/ Define the RX and TX pins for Serial 2\n#define RXD2 16\n#define TXD2 17\n\n#define GPS_BAUD 9600\n\n\/\/ The TinyGPS++ object\nTinyGPSPlus gps;\n\n\/\/ Create an instance of the HardwareSerial class for Serial 2\nHardwareSerial gpsSerial(2);\n\nvoid setup() {\n  \/\/ Serial Monitor\n  Serial.begin(115200);\n  \n  \/\/ Start Serial 2 with the defined RX and TX pins and a baud rate of 9600\n  gpsSerial.begin(GPS_BAUD, SERIAL_8N1, RXD2, TXD2);\n  Serial.println(&quot;Serial 2 started at 9600 baud rate&quot;);\n}\n\nvoid loop() {\n  \/\/ This sketch displays information every time a new sentence is correctly encoded.\n  unsigned long start = millis();\n\n  while (millis() - start &lt; 1000) {\n    while (gpsSerial.available() &gt; 0) {\n      gps.encode(gpsSerial.read());\n    }\n    if (gps.location.isUpdated()) {\n      Serial.print(&quot;LAT: &quot;);\n      Serial.println(gps.location.lat(), 6);\n      Serial.print(&quot;LONG: &quot;); \n      Serial.println(gps.location.lng(), 6);\n      Serial.print(&quot;SPEED (km\/h) = &quot;); \n      Serial.println(gps.speed.kmph()); \n      Serial.print(&quot;ALT (min)= &quot;); \n      Serial.println(gps.altitude.meters());\n      Serial.print(&quot;HDOP = &quot;); \n      Serial.println(gps.hdop.value() \/ 100.0); \n      Serial.print(&quot;Satellites = &quot;); \n      Serial.println(gps.satellites.value()); \n      Serial.print(&quot;Time in UTC: &quot;);\n      Serial.println(String(gps.date.year()) + &quot;\/&quot; + String(gps.date.month()) + &quot;\/&quot; + String(gps.date.day()) + &quot;,&quot; + String(gps.time.hour()) + &quot;:&quot; + String(gps.time.minute()) + &quot;:&quot; + String(gps.time.second()));\n      Serial.println(&quot;&quot;);\n    }\n  }\n}\n<\/code><\/pre>\n\t<p style=\"text-align:center\"><a class=\"rntwhite\" href=\"https:\/\/github.com\/RuiSantosdotme\/Random-Nerd-Tutorials\/raw\/master\/Projects\/ESP32\/ESP32_NEO_6M_GPS_TinyGPS.ino\" target=\"_blank\">View raw code<\/a><\/p>\n\n\n\n<h3 class=\"wp-block-heading\">How Does the Code Work?<\/h3>\n\n\n\n<p>You start by importing the <span class=\"rnthl rntliteral\">TinyGPSPlus<\/span> library.<\/p>\n\n\n\n<pre class=\"wp-block-code language-c\"><code>#include &lt;TinyGPS++.h&gt;\n#include &lt;SoftwareSerial.h&gt;<\/code><\/pre>\n\n\n\n<p>Then, you define the UART 2 RX and TX pins and the GPS baud rate. If your board uses different UART 2 pins, or if the GPS module uses a different baud rate, you can modify them on the following lines.<\/p>\n\n\n\n<pre class=\"wp-block-code language-c\"><code>\/\/ Define the RX and TX pins for Serial 2\n#define RXD2 16\n#define TXD2 17\n\n#define GPS_BAUD 9600<\/code><\/pre>\n\n\n\n<p>Then, you create a <span class=\"rnthl rntliteral\">TinyGPS++<\/span> object:<\/p>\n\n\n\n<pre class=\"wp-block-code language-c\"><code>TinyGPSPlus gps;<\/code><\/pre>\n\n\n\n<p>Create an instance of the <span class=\"rnthl rntliteral\">HardwareSerial<\/span> class for Serial 2 called <span class=\"rnthl rntliteral\">gpsSerial<\/span>.<\/p>\n\n\n\n<pre class=\"wp-block-code language-c\"><code>HardwareSerial gpsSerial(2);<\/code><\/pre>\n\n\n\n<p>In the <span class=\"rnthl rntliteral\">setup()<\/span>, initialize the Serial Monitor and the serial communication with the GPS module.<\/p>\n\n\n\n<pre class=\"wp-block-code language-c\"><code>void setup() {\n  \/\/ Serial Monitor\n  Serial.begin(115200);\n  \n  \/\/ Start Serial 2 with the defined RX and TX pins and a baud rate of 9600\n  gpsSerial.begin(GPS_BAUD, SERIAL_8N1, RXD2, TXD2);\n  Serial.println(\"Serial 2 started at 9600 baud rate\");\n}<\/code><\/pre>\n\n\n\n<p>In the <span class=\"rnthl rntliteral\">loop()<\/span> is where you request the information. Parse the data from the GPS module into the <span class=\"rnthl rntliteral\">TinyGPS++<\/span> object using the <span class=\"rnthl rntliteral\">encode()<\/span> method as follows.<\/p>\n\n\n\n<pre class=\"wp-block-code language-c\"><code>while (gpsSerial.available() &gt; 0) {\n  gps.encode(gpsSerial.read());\n}<\/code><\/pre>\n\n\n\n<p>Then, you can query the <span class=\"rnthl rntliteral\">gps<\/span> object to see if any data fields have been updated:<\/p>\n\n\n\n<pre class=\"wp-block-code language-c\"><code>if (gps.location.isUpdated()) {<\/code><\/pre>\n\n\n\n<p>If there is new data, we can get it as follows:<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table><tbody><tr><td>Latitude<\/td><td><span class=\"rnthl rntliteral\">gps.location.lat()<\/span><\/td><\/tr><tr><td>Longitude<\/td><td><span class=\"rnthl rntliteral\">gps.location.lng()<\/span><\/td><\/tr><tr><td>Speed (km\/h)<\/td><td><span class=\"rnthl rntliteral\">gps.speed.kmph()<\/span><\/td><\/tr><tr><td>Altitude (meters)<\/td><td><span class=\"rnthl rntliteral\">gps.altitude.meters()<\/span><\/td><\/tr><tr><td>HDOP<\/td><td><span class=\"rnthl rntliteral\">gps.hdop.value()<\/span><\/td><\/tr><tr><td>The number of visible satellites<\/td><td><span class=\"rnthl rntliteral\">gps.satellites.value()<\/span><\/td><\/tr><tr><td>Year<\/td><td><span class=\"rnthl rntliteral\">gps.date.year()<\/span><\/td><\/tr><tr><td>Month<\/td><td><span class=\"rnthl rntliteral\">gps.date.month()<\/span><\/td><\/tr><tr><td>Day<\/td><td><span class=\"rnthl rntliteral\">gps.date.day()<\/span><\/td><\/tr><tr><td>Hour<\/td><td><span class=\"rnthl rntliteral\">gps.time.hour()<\/span><\/td><\/tr><tr><td>Minutes<\/td><td><span class=\"rnthl rntliteral\">gps.time.minute()<\/span><\/td><\/tr><tr><td>Seconds<\/td><td><span class=\"rnthl rntliteral\">gps.time.second()<\/span><\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p>In the code, we get the data and print all the information in the Serial Monitor.<\/p>\n\n\n\n<pre class=\"wp-block-code language-c\"><code>Serial.print(\"LAT: \");\nSerial.println(gps.location.lat(), 6);\nSerial.print(\"LONG: \"); \nSerial.println(gps.location.lng(), 6);\nSerial.print(\"SPEED (km\/h) = \"); \nSerial.println(gps.speed.kmph()); \nSerial.print(\"ALT (min)= \"); \nSerial.println(gps.altitude.meters());\nSerial.print(\"HDOP = \"); \nSerial.println(gps.hdop.value() \/ 100.0); \nSerial.print(\"Satellites = \"); \nSerial.println(gps.satellites.value()); \nSerial.print(\"Time in UTC: \");\nSerial.println(String(gps.date.year()) + \"\/\" + String(gps.date.month()) + \"\/\" + String(gps.date.day()) + \",\" + String(gps.time.hour()) + \":\" + String(gps.time.minute()) + \":\" + String(gps.time.second()));\nSerial.println(\"\");<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">Testing the Code<\/h2>\n\n\n\n<p>Upload the code to your ESP32 board. Open the Serial Monitor at a baud rate of 115200. Make sure your GPS module is placed outside or next to a window to get data from satellites.<\/p>\n\n\n\n<p>You&#8217;ll get GPS data on the Serial Monitor about your current location, speed, altitude, number of visible satellites HDOP, and time.<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><img data-recalc-dims=\"1\" loading=\"lazy\" decoding=\"async\" width=\"830\" height=\"379\" src=\"https:\/\/i0.wp.com\/randomnerdtutorials.com\/wp-content\/uploads\/2024\/07\/ESP32-Get-GPS-Data-NEO-6M-Demonstration.png?resize=830%2C379&#038;quality=100&#038;strip=all&#038;ssl=1\" alt=\"Get GPS data with ESP32 - NEO-6M module\" class=\"wp-image-160853\" srcset=\"https:\/\/i0.wp.com\/randomnerdtutorials.com\/wp-content\/uploads\/2024\/07\/ESP32-Get-GPS-Data-NEO-6M-Demonstration.png?w=830&amp;quality=100&amp;strip=all&amp;ssl=1 830w, https:\/\/i0.wp.com\/randomnerdtutorials.com\/wp-content\/uploads\/2024\/07\/ESP32-Get-GPS-Data-NEO-6M-Demonstration.png?resize=300%2C137&amp;quality=100&amp;strip=all&amp;ssl=1 300w, https:\/\/i0.wp.com\/randomnerdtutorials.com\/wp-content\/uploads\/2024\/07\/ESP32-Get-GPS-Data-NEO-6M-Demonstration.png?resize=768%2C351&amp;quality=100&amp;strip=all&amp;ssl=1 768w\" sizes=\"(max-width: 830px) 100vw, 830px\" \/><\/figure><\/div>\n\n\n<p>HDOP stands for Horizontal Dilution of Precision. This is a measurement of position-fixing accuracy. The higher the HDOP value is, the less accurate the position fix will be. Ideally, you should get a value lower than 2. A lower value means a better accuracy.<\/p>\n\n\n\n<p>Now, you can take this project further and display the data on an <a href=\"https:\/\/randomnerdtutorials.com\/esp32-ssd1306-oled-display-arduino-ide\/\" title=\"\">OLED display<\/a> or a <a href=\"https:\/\/randomnerdtutorials.com\/esp32-tft-touchscreen-display-2-8-ili9341-arduino\/\" title=\"\">TFT display<\/a>.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Wrapping Up<\/h2>\n\n\n\n<p>In this tutorial, you learned how to use the NEO-6M GPS Module with the ESP32 to get GPS data: latitude, longitude, altitude, speed, date, time, number of satellites, and more.<\/p>\n\n\n\n<p>Interfacing the NEO-6M GPS module with the ESP32 is quite easy\u2014you just need to establish a serial communication with the sensor and read the available data.<\/p>\n\n\n\n<p>The accuracy of the data will depend on where the module is placed and the antenna used. For better performance, the sensor should be placed outside or next to a window and away from narrow streets with tall buildings. The higher the number of visible satellites, the more accurate the position will be.<\/p>\n\n\n\n<p>We hope you&#8217;ve found this tutorial useful. We have guides for more than 25 modules and sensors with the ESP32, you can check them below:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/randomnerdtutorials.com\/esp32-guides-sensors-modules\/\">ESP32: 26 Free Guides for Sensors and Modules<\/a><\/li>\n<\/ul>\n\n\n\n<p>If you want to learn more about the ESP32, check out our resources:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/randomnerdtutorials.com\/projects-esp32\/\" title=\"\">Free ESP32 Projects and Tutorials<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/randomnerdtutorials.com\/learn-esp32-with-arduino-ide\/\" title=\"\">Learn ESP32 with Arduino IDE eBook<\/a><\/li>\n<\/ul>\n\n\n\n<p>Thanks for reading.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Learn how to interface the NEO-6M GPS module with the ESP32 to get GPS data. You&#8217;ll learn how to get raw GPS data and interpret NMEA sentences. Finally, we&#8217;ll show &#8230; <\/p>\n<p class=\"read-more-container\"><a title=\"ESP32 with NEO-6M GPS Module (Arduino IDE)\" class=\"read-more button\" href=\"https:\/\/randomnerdtutorials.com\/esp32-neo-6m-gps-module-arduino\/#more-160038\" aria-label=\"Read more about ESP32 with NEO-6M GPS Module (Arduino IDE)\">CONTINUE READING \u00bb<\/a><\/p>\n","protected":false},"author":5,"featured_media":160856,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"jetpack_post_was_ever_published":false,"_jetpack_newsletter_access":"","_jetpack_dont_email_post_to_subs":false,"_jetpack_newsletter_tier_id":0,"_jetpack_memberships_contains_paywalled_content":false,"_jetpack_memberships_contains_paid_content":false,"footnotes":""},"categories":[276,281,299,264],"tags":[],"class_list":["post-160038","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-esp32","category-esp32-project","category-0-esp32","category-project"],"aioseo_notices":[],"jetpack_featured_media_url":"https:\/\/i0.wp.com\/randomnerdtutorials.com\/wp-content\/uploads\/2024\/07\/ESP32-NEO-6M-GPS-Module-Guide-Arduino-IDE.jpg?fit=1920%2C1080&quality=100&strip=all&ssl=1","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/randomnerdtutorials.com\/wp-json\/wp\/v2\/posts\/160038","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/randomnerdtutorials.com\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/randomnerdtutorials.com\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/randomnerdtutorials.com\/wp-json\/wp\/v2\/users\/5"}],"replies":[{"embeddable":true,"href":"https:\/\/randomnerdtutorials.com\/wp-json\/wp\/v2\/comments?post=160038"}],"version-history":[{"count":14,"href":"https:\/\/randomnerdtutorials.com\/wp-json\/wp\/v2\/posts\/160038\/revisions"}],"predecessor-version":[{"id":168257,"href":"https:\/\/randomnerdtutorials.com\/wp-json\/wp\/v2\/posts\/160038\/revisions\/168257"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/randomnerdtutorials.com\/wp-json\/wp\/v2\/media\/160856"}],"wp:attachment":[{"href":"https:\/\/randomnerdtutorials.com\/wp-json\/wp\/v2\/media?parent=160038"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/randomnerdtutorials.com\/wp-json\/wp\/v2\/categories?post=160038"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/randomnerdtutorials.com\/wp-json\/wp\/v2\/tags?post=160038"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}