I have done as much as I possibly can to get the ZOE-M8Q board to connect to any microcontroller. I bought 2, and they both worked fine the first time I plugged them in, they were recognized at address 0x42, and I was able to connect to them.
But after unplugging them to test them in the open air with satellite data, they just refuse to connect over I2C. I first connected to them using an ESP32, then again with a Teensy 4.1, and again with an Arduino Uno from Elegoo, and none have worked. Enabling debugging proves that the initial connection is not being made. I am using the Example1_BasicNMEARead example code, and I’ve verified my wiring many times.
Running I2C scanning code gives normal behaviour when the GPS is disconnected, but returns error code 5 for each address when it is connected.
There should be pull-up resistors on the GPS module already, and the jumpers for them are already connected when you receive the board, I double-checked with a multimeter to verify that they were closed. The SPI jumper is also not connected, I verified that with a multimeter as well.
There is common ground between the microcontrollers and the board as well.
This is the wiring setup, just 4 wires connecting 3V, GND, SCL, and SDA. Running the example code with debugging enabled just outputs this:
SparkFun u-blox Example
createFileBuffer: Warning. fileBufferSize is zero. Data logging is not possible.
begin: isConnected - second attempt
begin: isConnected - third attempt
u-blox GNSS not detected at default I2C address. Please check wiring. Freezing.
Also, I do have an antenna, but I didn’t connect it here since I doubt that’s what is stopping the board from communicating at all.
I have not yet, as I don’t have an FTDI to USB cable yet. I could try getting one, but I have no idea what I could have done to completely disable I2C on the chip, I only uploaded the example code.
I only ran the Example1_BasicNMEARead right when I got it, the board stopped working after only running it one time. It connected that first time when I ran the code and was outputting normally, but when I unplugged it, brought it outside and plugged it back in, it no longer worked.
Running a bus scan gives timeout errors on all I2C addresses when the GPS is connected for some reason. Tried my ESP with a different I2C device and it worked fine, so it seems to be on the GPS end.
Here is the code I’m using, essentially just the example code but I pass 6 for SDA and 7 for SCL on Wire.begin(), as I’m using an ESP32, and I enabled the debugging messages:
#include <Wire.h> //Needed for I2C to GNSS
#include <SparkFun_u-blox_GNSS_Arduino_Library.h> //Click here to get the library: http://librarymanager/All#SparkFun_u-blox_GNSS
SFE_UBLOX_GNSS myGNSS;
void setup() {
Serial.begin(115200);
while (!Serial) delay(10);
Serial.println("SparkFun u-blox Example");
Wire.begin(6, 7);
myGNSS.enableDebugging();
if (myGNSS.begin() == false)
{
Serial.println(F("u-blox GNSS not detected at default I2C address. Please check wiring. Freezing."));
while (1);
}
myGNSS.setI2COutput(COM_TYPE_UBX | COM_TYPE_NMEA); //Set the I2C port to output both NMEA and UBX messages
myGNSS.saveConfigSelective(VAL_CFG_SUBSEC_IOPORT); //Save (only) the communications port settings to flash and BBR
//This will pipe all NMEA sentences to the serial port so we can see them
myGNSS.setNMEAOutputPort(Serial);
}
void loop()
{
myGNSS.checkUblox(); //See if new data is available. Process bytes as they come in.
delay(250); //Don't pound too hard on the I2C bus
}
Trying to read register 0xFD on the default address does not return anything.
The setup works with other I2C devices, I tried the same pins and setup with both an Adafruit IMU and a 16x2 LCD and they both connected and worked no problem.
Arighty, I think it’s likely defective - Was it purchased from us? If so head over to Return Policy - SparkFun Electronics (contact vendor if purchased elsewhere) and we’ll get ya squared away
Not generally but I’ll make an exception in this case This did make me curious about what the soldering on the backside looks like though if you have time to share a photo