GPS module (RAK12500) not taking GPS coordinates

I recently purchased a WISBLOCK kit 2 which comes with a u-blox ZOE-M8Q GNSS GPS module (RAK12500). I bought the node to send GPS coordinates to my gateway using LoRa, but when trying to run this example code linked below, I get a few issues.
WisBlock/examples/RAK4630/solutions/GPS_Tracker/GPS_Tracker.ino at master · RAKWireless/WisBlock · GitHub

When running the code I am always met with “No Location Found”. The accelerometer works fine, but GPS module never seems to give me a location.

At first, I thought I might have had a faulty GPS module, so I tried testing it using the example codes found on the product page here ZOE-M8Q GNSS Location Sensor Modules | u-blox GNSS | ublox Arduino – RAKwireless Store.

To my surprise both example codes worked flawlessly and gave accurate GPS coordinates.

After confirming that the module was working I took another look at the github readme section of the GPS_Tracker and found this section " If there’s no GPS coordinate transmission even if you are sure that the accelerometer is already in the right trigger orientation if (abs(x - z) < 400) , then you need to check the RAK1910 GPS module if you can get GPS signal. Please have a look on this [initial RAK1910 quick test].

I tried running the Initial RAK1910 quick test and was not able to get a GPS coordinate. The guide said it could take a few seconds to a few minutes to receive coordinates, but even after leaving the code running for nearly an hour in direct view of the sky, I never got any location data.

Upon further inspection all example codes that do not work make use of the GNSS library TinyGPS, while all functioning codes make use of the SparkFun_u-blox_GNSS_Arduino_ Library.

I wanted to see if anybody could help me get the GPS_Tracker code working?

*Note: The WISBLOCK successfully communicates with my gateway; however, it never sends anything since it never receives location data.

Welcome to the forum @Trevor
The RAK1910 and the RAK12500 are using different GNSS chips.
It is recommended to use the RAK12500 examples (which you said, are working).

For a more complete code for the RAK12500 with sending data over LoRaWAN, you can check our LPWAN-Tracker-Solution code.

I published some code for the WisBlock Kit 2 as well in RAK4631-Kit-2-RAK12500-RAK1906

Thanks for your reply @beegee.

I’m working my way through the LPWAN-Tracker-Solution code you mentioned and am having some issues.

18:57:55.693 → LPWAN Tracker Solution
18:57:55.693 →
18:57:55.693 → Built with RAK’s WisBlock
18:57:55.693 →
18:57:55.693 → SW Version 1.1.2
18:57:55.693 →
18:57:55.693 → LoRa(R) is a registered trademark or service mark of Semtech Corporation or its affiliates.
18:57:55.693 → LoRaWAN(R) is a licensed mark.
18:57:55.693 →
18:57:55.693 → ============================
18:57:55.693 →
18:57:55.693 → Device status:
18:57:55.693 → RAK4631
18:57:55.693 → Mode LPWAN
18:57:55.693 → Auto join enabled
18:57:55.693 → Network not joined
18:57:55.693 → LPWAN status:

// I have removed the OTAA keys but I have all confirmed that they match with my information on TTN//

18:57:55.693 → OTAA enabled
18:57:55.693 → ADR enabled
18:57:55.693 → Public Network
18:57:55.693 → Dutycycle disabled
18:57:55.693 → Join trials 10
18:57:55.693 → TX Power 0
18:57:55.728 → DR 3
18:57:55.728 → Class 0
18:57:55.728 → Subband 1
18:57:55.728 → Fport 2
18:57:55.728 → Unconfirmed Message
18:57:55.728 → Region AU915
18:57:55.728 → Send Frequency 0
18:57:56.736 → ============================
18:57:56.736 →
18:57:56.736 → GNSS Precision:
18:57:56.736 →
18:57:56.736 → 4 decimal digit precision
18:57:56.736 →
18:57:56.736 → Data format:
18:57:56.736 →
18:57:56.736 → Cayenne LPP data format
18:57:56.736 →
18:57:56.736 → ============================
18:57:56.736 →
18:57:56.736 → +EVT:GNSS OK
18:57:56.736 →
18:57:56.736 → +EVT:ACC OK
18:57:56.736 →
18:57:56.736 → +EVT:ENV FAIL
18:57:56.736 →
19:03:36.541 → +EVT:JOIN FAILED
19:03:36.541 →

My main issue is that despite all attempts, I am unable to join the TTN network.

Do you have any tips to fix this issue?

Secondly, I am unsure if the code is getting any GPS coordinates and do not know how to check if it is at the moment. Is there a way to check that as well?


You are using AU915 and TTN or Helium?
You might need to set the subbands to 2 for this combination.


@beegee I was using the wrong frequency band, I am in the US so I should have been using US915 not AU915, thanks for the catch.

Aside from that I am also using TTN and not helium.

However, even after swapping the Frequency Band im still getting EVT: JOIN FAILED.

Is there another issue I missed?

TTN on US915 is using subband 2 as well.
You still need to switch the subband.

Even after switching the subband I am still unable to join the network.

What do you get with ATC+STATUS?
Any logs from the gateway or TTN?
What gateway are you using? Is the gateway setup for subband 2 as well?

ATC+STATUS=? outputs this.

08:39:15.807 → ATC+STATUS=?
08:39:15.840 → Device status:
08:39:15.840 → RAK4631
08:39:15.840 → Mode LPWAN
08:39:15.840 → Auto join enabled
08:39:15.840 → Network not joined
08:39:15.840 → LPWAN status:


08:39:15.840 → OTAA enabled
08:39:15.840 → ADR enabled
08:39:15.840 → Public Network
08:39:15.840 → Dutycycle disabled
08:39:15.840 → Join trials 10
08:39:15.840 → TX Power 0
08:39:15.840 → DR 3
08:39:15.840 → Class 0
08:39:15.840 → Subband 1
08:39:15.840 → Fport 2
08:39:15.840 → Unconfirmed Message
08:39:15.840 → Region RU864
08:39:15.840 → Send Frequency 0
08:39:15.840 → OK
08:39:15.840 →

Aside from that, I’m using a RAK7289V2/RAK7289CV2 WisGate Edge Pro, and it is set to the United States 902-928 MHz, FSB 2.

The gateway does not have any logs using the LPWAN Tracker Solution, I do not see any uplinks nor downlinks on the gateways console, but the node sometimes does try to connect, but fails too. for example,

at 20:36:52 it output Console: Stream connection… The connection was closed.
at 20:36:54 it output Console: Stream reconnected The stream connection has been re-established.

These messages seemed to appear only a few times after the node was powered on, but not every time and always a few seconds apart in a pair. Alongside this the TTN console says the node has not had any activity in days.

I made that last post right before leaving my house, but after a quick glance I can already see that the region is set for Russia for some reason. I’ll fix that when I get home and update the situation from there.

The AT+BAND= #'s are not the same as those listed on the List of BAND Parameter options in the GitHub ([LPWAN-Tracker-Solution/ at main · RAKWireless/LPWAN-Tracker-Solution · GitHub] (LPWAN-Tracker-Solution/ at main · RAKWireless/LPWAN-Tracker-Solution · GitHub)).

For example, US915 is meant to be AT+BAND=8 however after checking the status it actually aligns with AS923. US915 is actually AT+BAND=5, but according to the GitHub, 5 should align with EU868.

The AT+MASK command is also the command that should be used to change the subband, and after setting the Mask = 2 once on US915MHz I have successfully been able to uplink to the gateway and join the network. Just need to get the WISBLOCK to send GPS coordinates to the gateway now, but I am about to spend the next couple hours at least working on that.

Heres the current status when using AT+STATUS

12:02:24.583 → AT+STATUS
Device status:
12:02:24.657 → RAK4631
12:02:24.657 → Mode LPWAN
12:02:24.657 → Auto join enabled
12:02:24.657 → Network joined
12:02:24.657 → LPWAN status:

//OTAA keys//

12:02:24.657 → OTAA enabled
12:02:24.657 → ADR enabled
12:02:24.657 → Public Network
12:02:24.657 → Dutycycle disabled
12:02:24.657 → Join trials 10
12:02:24.657 → TX Power 0
12:02:24.657 → DR 3
12:02:24.657 → Class 0
12:02:24.657 → Subband 2
12:02:24.657 → Fport 2
12:02:24.657 → Unconfirmed Message
12:02:24.657 → Region US915
12:02:24.657 → Send Frequency 0
12:02:24.657 →
12:02:24.657 → OK
12:02:24.657 → OK
12:02:24.657 →

Also, I want to ensure that I’m using the right decoder.

I’m currently using the last few lines of code from this GitHub page LPWAN-Tracker-Solution/decoders/TTN-Ext-LPP-Decoder.js at main · RAKWireless/LPWAN-Tracker-Solution · GitHub

// To use with TTN
function Decoder(bytes, port) {
// flat output (like original decoder):
var response = {};
lppDecode(bytes, 1).forEach(function (field) {
response[field[‘name’] + ‘_’ + field[‘channel’]] = field[‘value’];
return { data: response };

Is this fine?

I see, we need to update the docs.
The bands/regions are now compatible with RUI3 which was not the case when it was published.

For the decoder, try this one ==> RAKwireless_Standardized_Payload/RAKwireless_Standardized_Payload.js at main · RAKWireless/RAKwireless_Standardized_Payload · GitHub

The WisBlock has still yet to send a GPS coordinate to the gateway.

How can I check if the WisBlock is receiving GPS coordinates properly?

*Note: I am working in Arduino.IDE incase the process is different using PlatformIO.

You can do a Serial.print() to send the location coordinates to the USB and check the logs.

You can use one of the LED’s to show whether a location was acquired or not.

You can send the location always over LoRaWAN and check whether the location is 0.00/0.00/0.00 or a valid location

PlatformIO is the same as ArduinoIDE, just more professional (IMHO)

I’ve got a couple of questions this time. For one I have only had one GPS coordinate send properly over the past couple of days earlier today and quite frankly I am not sure what caused it to send as I have been unable to recreate it.

Attached are the gnss.cpp I have been working in alongside the app.h I am currently using.

app.h (3.7 KB)
gnss.cpp (10.8 KB)

When the code did give me a proper GPS output, I remember it printed this in the serial monitor +EVT:START_LOCATION. I wish I had documented it, but I didn’t think to at the time.

I have managed to get the MYLOG to print into the serial monitor using:

// Define PRINTF to redirect output to Serial
#define PRINTF Serial.printf

and when the code runs it seems to get stuck at GNSS Task started and will not progress past it.

19:41:21.106 → [USR_AT] Structure size 24 GNSS

19:41:21.106 → [USR_AT] Structure size 48 Battery

19:41:21.106 → [USR_AT] Structure size 72 Modules

19:41:21.106 → [USR_AT] Adding battery check AT commands

19:41:21.106 → [USR_AT] Index after adding battery check 1

19:41:21.106 → [USR_AT] Adding module AT commands

19:41:21.106 → [USR_AT] Index after adding modules 2

19:41:21.106 → [USR_AT] Adding GNSS user AT commands

19:41:21.106 → [USR_AT] Index after adding GNSS 3

19:41:27.251 → [BME] Could not find a valid BME680 sensor, check wiring!

19:41:27.251 → ============================

19:41:27.251 →

19:41:27.251 → GNSS Precision:

19:41:27.251 →

19:41:27.251 → 4 decimal digit precision

19:41:27.251 →

19:41:27.251 → Data format:

19:41:27.251 →

19:41:27.251 → Cayenne LPP data format

19:41:27.251 →

19:41:27.251 → ============================

19:41:27.251 →

19:41:27.251 → +EVT:GNSS OK

19:41:27.251 →

19:41:27.251 → +EVT:ACC OK

19:41:27.251 →

19:41:27.251 → +EVT:ENV FAIL

19:41:27.251 →

19:41:27.251 → [APP] Successfully joined network

19:41:27.251 → +EVT:JOINED

19:41:27.251 →

19:41:27.251 → [GNSS] GNSS Task started

If you could help me figure out and diagnose the issue, I would greatly appreciate it.

Aside from that I am also currently trying to get the application server up and running in advance. I’m using and need to get some sample GPS coordinates through before I am able to continue. In an attempt to do this, I attempted to use the fake GPS coordinates available in the code, but ultimately was unable to get that working either.

Could I ask you how I’m meant to get the code to output the fake coordinates?


What LoRaWAN datarate did you set?
The GPS location data is a quite large packet. Depending on your LoRaWAN region you might need DR3 to fit the packet into the allowed size.

Im using ADR.

00:22:40.683 → AT+STATUS
Device status:
00:22:40.716 → RAK4631
00:22:40.716 → Mode LPWAN
00:22:40.716 → Auto join enabled
00:22:40.716 → Network joined
00:22:40.716 → LPWAN status:

00:22:40.753 → OTAA enabled
00:22:40.753 → ADR enabled
00:22:40.753 → Public Network
00:22:40.753 → Dutycycle disabled
00:22:40.753 → Join trials 10
00:22:40.753 → TX Power 0
00:22:40.753 → DR 3
00:22:40.753 → Class 0
00:22:40.753 → Subband 2
00:22:40.753 → Fport 2
00:22:40.753 → Unconfirmed Message
00:22:40.753 → Region US915
00:22:40.753 → Send Frequency 0

Should I not be?

Try to set AT+SENDINT=300 (5 minutes, like a heart beat), I see in the logs the send frequency is 0.

In the example code (if I remember correct, long time since I touched that code) the acquisition time for the location is depending on the send interval. It might be the acquisition time is too short to get a valid location.

However, using false location flag should override that and it should send location data.

Changing the send frequency has worked. The node is officially working as intended, and I have gotten the application server working perfectly.

Thank you so much for your help.

This topic was automatically closed 10 days after the last reply. New replies are no longer allowed.