Not sure this is in the right forum thread, but since I’m using the Thing Plus C board thought I’d put it here. I’m still working to integrate GPs and inertial measurement platform to my high altitude balloon payload package. Recently acquired a UBlox MAX M8C gps module that will work up to 150,000 feet. Have tried multiple libraries (serial and I2C) to get it to work. None have worked so far. Some serial libraries want to use Softserial on the ESP32 which seems stupid since the processor has two serial ports available. Would prefer to use I2C so have been concentrating on use of the Sparkfun uBlox library (2.2.10) which I downloaded from the Arduino site.
So far, I have been unable to get any of the examples to recognize the GPS module over the I2C bus. Upon initiation the the “begin” code returns a boolean false which halts the execution. When I scan the I2C bus it reports a device at 0x42 which is the address specified in the library as default address. All other devices on the bus are correctly reported with unique addresses.
I have confirmed that the module works using u center from Ublox and a serial link.
Would appreciate any help or suggestions that might help me get over this hump.
one of the Examples I’ve used is below:
[code}/*
Reading two altitudes - Mean Sea Level and Ellipsode
By: Nathan Seidle
SparkFun Electronics
Date: January 3rd, 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 query a Ublox module for its lat/long/altitude.
getAltitude() reports mm above ellipsode model of the globe. There are some
instances where altitude above Mean Sea Level is better. This example shows how
to use getAltitudeMSL(). The difference varies but is ~20m.
Ellipsoid model: https://www.esri.com/news/arcuser/0703/geoid1of3.html
Difference between Ellipsoid Model and Mean Sea Level: https://eos-gnss.com/elevation-for-beginners/
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:
Plug a Qwiic cable into the GPS and a BlackBoard
If you don’t have a platform with a Qwiic connection use the SparkFun Qwiic Breadboard Jumper (https://www.sparkfun.com/products/14425)
Open the serial monitor at 115200 baud to see the output
*/
#include <Wire.h> //Needed for I2C to GPS
#include “SparkFun_Ublox_Arduino_Library.h” //http://librarymanager/All#SparkFun_u-blox_GNSS
SFE_UBLOX_GPS myGPS;
long lastTime = 0; //Tracks the passing of 2000ms (2 seconds)
void setup()
{
Serial.begin(57600);
while (!Serial); //Wait for user to open terminal
Serial.println(“SparkFun Ublox Example”);
Wire.begin();
if (myGPS.begin() == false) //Connect to the Ublox module using Wire port
{
Serial.println(F(“Ublox GPS not detected at default I2C address. Please check wiring. Freezing.”));
while (1);
}
}
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)"));
long altitudeMSL = myGPS.getAltitudeMSL();
Serial.print(F(" AltMSL: "));
Serial.print(altitudeMSL);
Serial.print(F(" (mm)"));
Serial.println();
}
}