# How to use SparkFun GPS-RTK Board (NEO-M8P-2) with SX1278/SX1276 LoRa (UART) for RTK Base–Rover

**URL:** <https://community.sparkfun.com/t/how-to-use-sparkfun-gps-rtk-board-neo-m8p-2-with-sx1278-sx1276-lora-uart-for-rtk-base-rover/67595>\
**Category:** GPS/GNSS\
**Created:** [December 15, 2025, 3:51pm UTC](https://community.sparkfun.com/t/how-to-use-sparkfun-gps-rtk-board-neo-m8p-2-with-sx1278-sx1276-lora-uart-for-rtk-base-rover/67595 "2025-12-15T15:51:21Z")\
**Posts on this page:** 2\
**Page:** 1

<div class="post-metadata">

**Author:** ![Siriput\_SRIJAROEN](https://yyz1.discourse-cdn.com/sparkfun/user_avatar/community.sparkfun.com/siriput_srijaroen/32/7911_2.png) [@Siriput\_SRIJAROEN](https://community.sparkfun.com/u/Siriput_SRIJAROEN)\
**Post date:** [December 15, 2025, 3:51pm UTC](https://community.sparkfun.com/t/how-to-use-sparkfun-gps-rtk-board-neo-m8p-2-with-sx1278-sx1276-lora-uart-for-rtk-base-rover/67595/1 "2025-12-15T15:51:21Z")

</div>

I’m working on an **RTK Base–Rover GNSS system using the SparkFun GPS-RTK Board (u-blox NEO-M8P-2)** and I would like to run it **without using the internet (no NTRIP)**.

My setup uses **LoRa for RTCM transmission** :

- **LoRa module:** SX1278 / SX1276, 433 MHz, UART interface (~3 km range)

- RTCM corrections are sent from the **Base** to the **Rover** via **UART → LoRa → UART**

- The **Rover side uses an Arduino** , which reads **latitude and longitude (NMEA output)** from the NEO-M8P-2

---

<div class="post-metadata">

**Author:** ![clive1](https://yyz1.discourse-cdn.com/sparkfun/user_avatar/community.sparkfun.com/clive1/32/6396_2.png) [@clive1](https://community.sparkfun.com/u/clive1)\
**Post date:** [December 15, 2025, 5:07pm UTC](https://community.sparkfun.com/t/how-to-use-sparkfun-gps-rtk-board-neo-m8p-2-with-sx1278-sx1276-lora-uart-for-rtk-base-rover/67595/2 "2025-12-15T17:07:36Z")

</div>

Is there a question here?

The RTCM3 data is in binary packets, which can exceed the air packet size of LoRa, so might require you to span several.

Data must transit unmolested, so data out matches data in 1:1

The packets have a 24-bit CRC for integrity checking, and I’d recommend aligning RTCM3 and air packet boundaries to a) limit delays, and b) improve robustness/resync
