Last active
March 1, 2024 09:30
-
-
Save fxprime/b6e8bbb954f5246b38610c0eae58e85d to your computer and use it in GitHub Desktop.
gps neo8n ublox esp32
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
gps neo8n ublox esp32 | |
ESP32 + NEO8N with ublox protocal | |
wiring | |
ESP32 Ublox Neo M8N | |
3.3v VCC | |
GPIO26 RX | |
GPIO27 TX | |
GND GND | |
Library : | |
/****************************************************************************** | |
u-blox_GNSS.h | |
u-blox GNSS Arduino | |
Leonardo Bispo | |
Mar 03, 2019 | |
https://github.com/ldab/u-blox_GNSS | |
Distributed as-is; no warranty is given. | |
******************************************************************************/ | |
// Enable Serial debbug on Serial UART to see registers wrote | |
#define GNSS_DEBUG Serial | |
#include "ublox_GNSS.h" | |
#include <SoftwareSerial.h> | |
SoftwareSerial Serial_GNSS(27, 26); // TX->GPIO 27 , RX->GPIO 26 | |
float lat, lon, acc; | |
fixType_t fix = NO_FIX; | |
GNSS gnss( Serial_GNSS ); | |
void setup() { | |
// put your setup code here, to run once: | |
Serial.begin( 115200 ); | |
Serial_GNSS.begin( 9600 ); | |
if( gnss.init( ) ) | |
{ | |
Serial.println("\nGNSS initialized."); | |
} | |
else | |
{ | |
Serial.println("\nFailed to initialize GNSS module."); | |
} | |
} | |
void loop() | |
{ | |
// Get coordinates with minimum 100m accuracy; | |
Serial.println("Get location"); | |
if ( gnss.getCoodinates(lon, lat, fix, acc, 100) == 0) | |
{ | |
Serial.println("Failed to get coordinates, check signal, accuracy required or wiring"); | |
} | |
Serial.println("\nHere you are, lon:" + String(lon, 7) +" lat:" + String(lat, 7)); | |
Serial.println("calculated error: " + String(acc) + "m"); | |
Serial.println("\nOr try the following link to see on google maps:"); | |
Serial.println(String("https://www.google.com/maps/search/?api=1&query=") + String(lat,7) + "," + String(lon,7)); | |
delay(1000); | |
} | |
Output would be look like | |
Get location | |
Here you are, lon:98.3586273 lat:7.8558259 | |
calculated error: 7.13m | |
Or try the following link to see on google maps: | |
https://www.google.com/maps/search/?api=1&query=7.8558259,98.3586273 | |
More advanced library | |
/* | |
Reading lat and long via UBX binary commands using UART @38400 baud - free from I2C | |
By: Nathan Seidle, Adapted from Example3_GetPosition by Thorsten von Eicken | |
SparkFun Electronics | |
Date: January 28rd, 2019 | |
License: MIT. See license file for more information but you can | |
basically do whatever you want with this code. | |
This example shows how to configure the library and U-Blox for serial port use as well as | |
switching the module from the default 9600 baud to 38400. | |
Note: Long/lat are large numbers because they are * 10^7. To convert lat/long | |
to something google maps understands simply divide the numbers by 10,000,000. We | |
do this so that we don't have to use floating point numbers. | |
Leave NMEA parsing behind. Now you can simply ask the module for the datums you want! | |
Feel like supporting open source hardware? | |
Buy a board from SparkFun! | |
ZED-F9P RTK2: https://www.sparkfun.com/products/15136 | |
NEO-M8P RTK: https://www.sparkfun.com/products/15005 | |
SAM-M8Q: https://www.sparkfun.com/products/15106 | |
Hardware Connections: | |
Connect the U-Blox serial TX pin to Uno pin 10 | |
Connect the U-Blox serial RX pin to Uno pin 11 | |
Open the serial monitor at 115200 baud to see the output | |
*/ | |
#include "SparkFun_Ublox_Arduino_Library.h" //http://librarymanager/All#SparkFun_u-blox_GNSS | |
SFE_UBLOX_GPS myGPS; | |
#include <SoftwareSerial.h> | |
SoftwareSerial mySerial(27, 26); // TX->GPIO 27 , RX->GPIO 26 | |
long lastTime = 0; //Simple local timer. Limits amount of I2C traffic to Ublox module. | |
void setup() | |
{ | |
Serial.begin(115200); | |
while (!Serial); //Wait for user to open terminal | |
Serial.println("SparkFun Ublox Example"); | |
//Assume that the U-Blox GPS is running at 9600 baud (the default) or at 38400 baud. | |
//Loop until we're in sync and then ensure it's at 38400 baud. | |
do { | |
Serial.println("GPS: trying 38400 baud"); | |
mySerial.begin(38400); | |
if (myGPS.begin(mySerial) == true) break; | |
delay(100); | |
Serial.println("GPS: trying 9600 baud"); | |
mySerial.begin(9600); | |
if (myGPS.begin(mySerial) == true) { | |
Serial.println("GPS: connected at 9600 baud, switching to 38400"); | |
myGPS.setSerialRate(38400); | |
delay(100); | |
} else { | |
//myGPS.factoryReset(); | |
delay(2000); //Wait a bit before trying again to limit the Serial output | |
} | |
} while(1); | |
Serial.println("GPS serial connected"); | |
myGPS.setUART1Output(COM_TYPE_UBX); //Set the UART port to output UBX only | |
myGPS.setI2COutput(COM_TYPE_UBX); //Set the I2C port to output UBX only (turn off NMEA noise) | |
myGPS.saveConfiguration(); //Save the current settings to flash and BBR | |
} | |
void loop() | |
{ | |
//Query module only every second. Doing it more often will just cause I2C traffic. | |
//The module only responds when a new position is available | |
if (millis() - lastTime > 1000) | |
{ | |
lastTime = millis(); //Update the timer | |
long latitude = myGPS.getLatitude(); | |
Serial.print(F("Lat: ")); | |
Serial.print(latitude); | |
long longitude = myGPS.getLongitude(); | |
Serial.print(F(" Long: ")); | |
Serial.print(longitude); | |
Serial.print(F(" (degrees * 10^-7)")); | |
long altitude = myGPS.getAltitude(); | |
Serial.print(F(" Alt: ")); | |
Serial.print(altitude); | |
Serial.print(F(" (mm)")); | |
byte SIV = myGPS.getSIV(); | |
Serial.print(F(" SIV: ")); | |
Serial.print(SIV); | |
Serial.println(); | |
} | |
} | |
Output look like สังเกตว่ามีการเปลี่ยน baudrate ในโค้ดจาก 9600 เป็น 38400 ดังนั้นถ้ากลับไปใช้โค้ดด้านบน ให้ใช้ baudrate นี้นะครับ | |
GPS: trying 9600 baud | |
GPS: connected at 9600 baud, switching to 38400 | |
GPS: trying 38400 baud | |
GPS serial connected | |
Lat: 78558497 Long: 983586128 (degrees * 10^-7) Alt: -19454 (mm) SIV: 14 | |
Lat: 78558507 Long: 983586132 (degrees * 10^-7) Alt: -19597 (mm) SIV: 14 | |
Lat: 78558520 Long: 983586154 (degrees * 10^-7) Alt: -19690 (mm) SIV: 14 | |
Lat: 78558527 Long: 983586150 (degrees * 10^-7) Alt: -19324 (mm) SIV: 14 | |
Lat: 78558535 Long: 983586143 (degrees * 10^-7) Alt: -19100 (mm) SIV: 14 | |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment