I’ve done a one or two projects with the electron in the past, but I can say I’m fairly new to the board. Now I have a GP-20U7 GPS Receiver sensor from sparkfun which I’m trying to get working. We chose this sensor due to some budget constraints, I know the asset-Tracker is superior.
I’ve tried a few tutorials here and there, including this one : here
Does anyone know optimal code or wiring to get the GP-20U7 GPS Receiver to work with the electron? or direct me to some tutorials i might have missed.
Can you clarify what’s missing from the article that you want us to fill in?
The wiring seems documented quite clearly there and the software seems to work
For completeness I’d just add the GPS-RX → Electron-TX connection too (provided it’s exposed by the module), in order to talk to the module from the Electron when needed.
I’d give the TinyGPS++ library a try.
Just remove all references of SoftwareSerial from the examples and use Serial1 instead.
Alternatively you could try AssetTrackerRK which uses TinyGPS++ but is focused at the Particle ecosystem.
Basically the serial output is always zero. I’ve checked my connections, all seems fine. Tried the GPS on an arduino and it worked just fine also.
I amended the code, adding serial Prints to maybe see where the problem is, here it is;
String inWord;
char inByte;
String data;
int LockLED = D1;
void setup() {
// cloud variable
Particle.variable("STU", data);
// GPS Serial
Serial.begin(9600);
pinMode(LockLED, OUTPUT);
digitalWrite(LockLED, HIGH);
delay(2000);
digitalWrite(LockLED, LOW);
}
void loop() {
Serial.print("data: ");
Serial.println(Serial.available());
while (Serial.available() > 0) {
inByte = Serial.read();
if (inByte == '\n') {
// END OF LINE
Serial.print("inByte: ");
Serial.print(inByte);
// check is data we want
// you can change this to get any data line values
if (inWord.startsWith("$GPRMC")) {
// put data string in variable
data = inWord;
Serial.print("data: ");
Serial.print(data);
// clear the inword variable
inWord = "";
// does the GPS Receiver have lock?
// get the char at pos 17 and test to see if it is an A i.e VALID V = INVALID
char lock = data.charAt(17);
Serial.print("lock: ");
Serial.print(lock);
if (lock == 'A') {
// YES Switch on Lock LED
digitalWrite(LockLED, HIGH);
} else {
// NO turn off lock led
digitalWrite(LockLED, LOW);
}
} else {
// clear the inword variable as not the data we want
inWord = "";
}
} else {
// build data string
inWord += inByte;
}
} // end if serial
} // end loop
my output on the serial monitor is always “data: 0”
See the picture below :
It looks like you’re reading from Serial which is the USB serial port. Since you are using TX and RX, you want to use Serial1 for the GPS. This includes Serial1.begin(9600) as well as Serial1.available() and Serial1.read().