RFOXiA LogoRFOXiA Club
← Back to DevHub

MultiNav Pro+ BLE + GNSS combo - syncing timestamps between modules?

David DavisJune 23, 2026
Hey all, been working on a wildlife tracking build where I'm running the BLE module and the GNSS module together, and I've hit kind of an annoying edge case I can't figure out my way around. Basically I want to timestamp each BLE packet with the GNSS-derived UTC time so that when the data gets aggregated at the base station it's all on the same clock reference. Problem is I'm not sure what the cleanest way to actually pass the GNSS time over to the BLE side is - like is there a recommended way to do this at the firmware level or are people just reading the NMEA time string and stuffing it into the BLE payload manually?
💬 3 replies👍 0 likes👁 0 views

💬 Want to join this discussion?

Join the Community on RFOXiA Club →

Replies

AdamJune 23, 2026
@David Davis yeah this is a pretty common pattern for multi-module builds and honestly the "just stuff it in the payload" approach isn't as janky as it sounds — a lot of field deployments do exactly that. Parse the $GPRMC or $GPZDA sentence (GPZDA is cleaner since it gives you full date+time in one place), extract the UTC time, and pack it as a Unix timestamp or raw epoch seconds into a fixed offset in your BLE packet header. Keep it consistent across all nodes and your base station aggregation becomes trivial.
 
The thing to watch out for is what happens in the window before your GNSS module gets a fix — at 18Hz you'll get a lock reasonably fast, but if you're powering on cold in a dense canopy situation that could take longer than you want. Worth having the firmware flag packets with a "time valid" bit so you can discard or quarantine anything that went out before the fix was confirmed rather than ending up with garbage timestamps in your dataset.
 
If you want something tighter than polling NMEA on every packet, you could set up a periodic sync where the firmware captures a GNSS timestamp once per second, stores it locally, and then offsets subsequent BLE packets using the MCU's internal timer ticks against that anchor — way less overhead than parsing NMEA on every transmission cycle.
Michael JacksonJune 23, 2026
Yeah ran into basically this same thing on a asset tagging project - what worked cleanest for me was having the MCU grab the PPS signal from the GNSS module to latch a local timer, then just embed that timer value into the BLE advertisement payload rather than trying to pass the raw UTC string across. Keeps the BLE side lightweight and you reconstruct the full UTC at aggregation time using the base station's own GNSS reference. Only gotcha is making sure your PPS interrupt latency is consistent or you'll get subtle drift that'll drive you crazy later.
Karen JonesJune 23, 2026
Michael's approach is solid and honestly what I'd recommend too - one thing I'd add is make sure you're latching on the rising edge of PPS and double check your interrupt priority so nothing else is preempting it, because I spent like two days chasing what turned out to be a UART ISR stomping on my timer latch. Also worth logging the raw offset between your local timer and UTC at startup so you have a sanity check when you're debugging aggregation weirdness later.

💬 Want to join this discussion?

Join the Community on RFOXiA Club →