ESPrtk 5$ for RTK positioning solution with M8P ublox or NS-HP-GL Navspark

What is ESPrtk ?

ESPrtk is a small circuit board used to transmit wireless GNSS data in high precision positioning applications.

ESPrtk is geared towards the ability to use high quality, independent, wireless and low cost platforms.
ESPrtk’s heart is a powerful ESP32 processor.

So what does ESPrtk include?

ESPrtk is an abbreviation for ESP32 RTK.
ESPrtk is available in two formats. Software for DIY users and hardware for direct users.
An ESPrtk V1 circuit board:

ESPrtk board V1 pinout mapping:

and features on its 2.4.1 version:

ESPrtk can be used with many GNSS RTK devices.

RTK-capable receivers require precisely calibrated antennas to process signals transmitted by the GNSS satellites. The process for achieving centimeter-level position accuracy in GNSS involves a complex algorithm known as real time kinematic (RTK) processing. In addition, they must receive and process corrections data from a ground network of GNSS receivers. These factors made traditional RTK-capable receivers costly (in excess of $5000 or even $10,000 ) and bulky, making them unsuitable for cost- and size-sensitive applications.
Recently, GNSS equipment manufacturers have started advertising inexpensive (less than $500) and compact RTK-capable receivers. Some prominent names:

RTK receivers are getting smaller and smaller, but accuracy is improving. At the same time, there was a powerful embedded CHIP is ESP32, which attracted everyone in IoT applications and GNSS data transmission for RTK positioning is one of them.

ESPrtk aims to be simple, user-friendly and safe to use.

ESPrtk was born to provide High quality RTK positioning solution with low cost option. This is an effort to make accessing and using high-precision positioning technology easier for everyone. Especially for those who have hobby about it.

Highlights of the design are the Web Config User Interface (UI) application, which makes it easy to test or configure it and the peripherals it connects to.

Along with that are layers of security with high-level encryption for transmitting GNSS data to public servers (where your data can be abused without your permission). Data encryption is also applied to all important files on ESPrtk in order to protect users as much as possible. Users can even activate a permanent lock with their password to make sure no one can change anything on their ESPrtk.

(Screenshot ESPrtk-BLE is running web configure on Google Chrome to setting some profile’s information. )

RTCM 3.x, RAW, NMEA are data types transmitted.

ESPrtk uses two ways to transmit data:
Online: ESPrtk is a client that uses a service to collect / distribute data from the server via an internet connection (WiFi/Ethernet).
Offline: ESPrtk will use its own Wifi or Bluetooth connection to perform wireless communication in the distribution of data.

If set to a Base, it will collect data from one of the UART ports and then send it over the wireless interface to one or more other devices (Rover).
If set to Rover, the data received from the Base will be streamed to the UART port to the RTK module.

MQTT model:

MQTT RTK is the most powerful transmission model today and will be the future alternative to NTRIP.


MQTT Protocol for Real‐Time GNSS Data and Correction Distribution

China Satellite Navigation Conference (CSNC) 2018 Proceedings
ESPrtk, when fully configured, can provide multiple connections at the same time.
ESPrtk is a Base can send RTCM / RAW to MQTT Server (Broker). (and Stream out NMEA data collection from the Rover to controler center.)
ESPrtk is a Rover that receives RTCM data from the Broker. ( can also export NMEA data to another device via Bluetooth at the same time.)

NRTIP model:

NTRIP has a history of over 20 years of development with extensive base networks around the world. Supported on any existing device. ESPrtk too.
ESPrtk is a Base can send RTCM / RAW to NTRIP Server (Caster).
ESPrtk is a Rover that receives RTCM data from the Caster. ( can also export NMEA data to another device via Bluetooth at the same time.)

Offline using WiFi signal:

When the internet connection is unavailable (the NTRIP / MQTT online service is not available), ESPrtk can use its WiFi signal to transmit GNSS data.
This is similar to the full MQTT functionality but is offline. The connections deployed in both protocols are TCP and UDP with the distance constrained to the WiFi transmit power.
ESPrtk will operate stably with a 150 to 200 meter baseline when using external antennas.

(Esp32-wroom-32u-front-back support external antenna. )

Bluetooth bridge RTK:

SPrtk will work just like the Bluetooth-To-Serial module. It will collect (regardless of RTCM / NMEA / RAW / … data type) from the RX-UART1 port and then send it to the Bluetooth device, or (and) Stream the data received via Bluetooth to the TX-UART2 port.
This function is particularly useful for users who want to collect output data from a GNSS device without having to directly connect to the wire. Featured Android applications such as “NTRIP Client” , “GNSS Surveyor”, “Bluetooth GPS”, “Bluetooth GPS Provider” ,”Mapit GIS”,”Bluetooth GPS Status Tool”, “SkyPro GPS Status Tool”…. supported this function.

(screenshot on GNSS Surveyor app)

And more…

There is much to say about detail ESPrtk with interesting functions on it. I hope the introduction is not too short to finish, please read other articles to know more about them…on
Free Firmware , Debug tool, Opensourse Hardware design, tutorials blog , image,… are available now at
and follow us on

1 Like

Hi there!
That’s a cool project, but we try to keep the blog for ArduPilot stuff: it gets mirrored to our homepage. So I’ve moved this to general hardware.
Do you have a guide for setting this up with ArduPilot?

Well there are many topics, I don’t know which topic is best suited for this article and I chose “blog”. I hope to get help from you. Does this article need to change anything?

I think it’s fine in the topic it’s in now.
It would be useful for the audience here if you could describe how to setup the esprtk with ArduPilot though.


Yes, thank you for your prompt question.

Positioning RTK may have become familiar to many people. Rover needs RTCM data from Base station to calculate the wave phase to help it locate high accuracy and keep it stable for a long time. Rover needs to move and data transmission by radio waves or via the internet has been applied.

For users of development board RTK receivers such as M8P or NS-HP-GL, ESPrtk will also be another option to maintain between cost and performance.

ESPrtk uses ESP32 module, its connection is really simple, some LEDs, 4 neopixel LED and 2 push buttons, some resistors and capacitors are enough for DIY users to own it.

Below is a diagram using ESP32 nodeMCU to create ESPrtk with the same function.

Here is ESPrtk’s circuit diagram :

ESPrtk when using NTRIP / MQTT will need these connections:

ESPrtk receives / sends GNSS data (RTCM / NMEA) from RTK modules, it will need internet connection with NTRIP / MQTT services via a Wifi router. (So ​​Ethernet connection is not required, but it is still supported). ESPrtk supports up to 2 UART ports to connect to RTK module (3rd port to export ESPrtk status).

Connect ESPrtk to NS-HP-BD (or GL) from Navspark

Connect ESPrtk to M8P from Ublox

To be able to configure and perform settings on ESPrtk, users will access the configuration page in the form of a web page by browsing through a WiFi connection to the local network created by ESPrtk.
(It is similar to the way Emlid-Reach works, but it will not need to be connected through the Router.) It also has many features on Webconfigure .

Profile- To configure ESPrtk action.

Your profile : Change name,password, custom avata-nickname-logo.

Action Planning: Select mode RTK.(they are described in the article above)

Wifi Hotspot: Set the router parameters that ESPrtk will use to connect to the Internet through it. ESPrtk supports storing 3 different access points with automatic network selection.

MQTT RTK: Configured to use MQTT service to transmit RTCM data, ESPrtk can be used as a Base station to publish RTCM data to Rover or as a Rover to stream RTCM data for RTK receivers. It also encrypts / decrypts data directly to protect RTCM data from abuse by the MQTT service provider.

NTRIP Client: Use ESPrtk as a client to receive RTCM / RAW data … from NTRIP Caster (Server) and then export data to RTK rover receiver. It supports automatic updating and browsing of Ntrip Caster tables, filtering and suggestions when selecting a mountpoint, automatically detecting alerts from the server, sending GPGGA and logging in …

NTRIP MASTER: Use ESPrtk as an client ,collect RTCM data from Basestation and send data to NTRIP Caster. Support for duplicate mountpoint detection already exists.

WIFI TCP-UDP: Configure to use ESPrtk GNSS data transmission by wifi waves itself. Support up to 20 Rover at the same time.

Display Viewer: Configure Neopixel’s display brightness or LCD.

Event Log for Debugging: The best way to see the status of ESPrtk is to collect TX-UART0 output data, the purpose of this is to find the error and fix it.

However, this requires a continuous connection from ESPrtk to the terminal display device, and will make it difficult for users without the necessary tools, or distance obstacles.

Event Log will overcome that disadvantage.

When the Eventlog is activated, during operation, data about the operation, error status, … will be recorded in a file named Event_Log.bin and stored forever until the user delete it.

Simple Debug: When you collect the ID of the error on ESPrtk (ID number or color seen on Neopixel), you can decode it using this simple tool to see what error has occurred.

Online Version in here :

Navspark configure: Used to directly configure Navspark modules without PC software from the manufacturer. It supports both Query and Configure

GNSS Viewer : NMEA data viewer, just supply NMEA data to the RX port of ESPrtk, it will be displayed as a GNSSViewer viewer.

BLE-Viewer: ESPrtk when configured Rover on all modes (MQTT / NTRIP / WIFI) supports BLE-Viewer. When the BLE-Viewer is activated, along with exporting RTCM data to RTK receivers, it can collect NMEA data and send it to other Bluetooth devices.It is similar to bluetooth bridge but only one way.

Blueooth Bridge to UART:Works the same as bluetooth bridge modules.Use ESPrtk as a “Bluetooth to Serial” module.

ESPrtk will work just like the Bluetooth-To-Serial module. It will collect (regardless of RTCM / NMEA / RAW / … data type) from the RX-UART1 port and then send it to the Bluetooth device, or (and) Stream the data received via Bluetooth to the TX-UART2 port.
This function is particularly useful for users who want to collect output data from a GNSS device without having to directly connect to the wire.

Rover Send Back NMEA:

(Support on MQTT and WIFI.) Along with exporting RTCM data from BaseStation, Rover will collect NMEA data and send it to ESPrtk Base, ESPrtk Base will export that NMEA data to TX port.

1 Like

May I ask how all the above is related to ArduPilot?


With topic RTK, I hope someone in the ArduPilot forum is using the M8P or NS-HP-GL or even Reach-Emlid positioning module on their UAV or Robot that might be interested.


I think it is interesting for all those doing aerial mapping with the help of Ardupilot and who need to get the position of their ground control points.

1 Like

Problem is that there is no direct use case for ArduPilot in this thread, it is just a generic IoT devices tracking system.
Show me a complete demonstration with detailled implementation within our ecosystem and I will Thumbs Up, otherwise, it is just non related free publicity otherwise called spam.

1 Like

Good evening all. I’m sure you’ve read the article above. Do you have experience with high precision positioning (RTK) on any module, M8P, F9P or NS-HP-xx?
Ppoirier: Hello, I hope Ardupilot contains topics for RTK positioning or similar topics.
About ESPrtk: its main task is to transfer RTCM data to Rover with two services, NTRIP and MQTT, (you can catch this concept when using RTK positioning), it is supported by Emlid on Intel Chip but with ESPrtk it is ESP32 with lower cost, tracking is just another function supported on it.
Of course, it can be used in many different applications, the operation model for UAV mapping as below:
It uses WIFI (from smartpohne or LTE, Dongle module) for internet access and transmits RTCM from server to Rover, at which time the distance from Rover to Basestation can be up to 20km with positioning accuracy kept below 10cm .

That’s a good step, now how do you implement into practical use case using Mission Planner or any other GCS ?

Interesting, are these drawings open source or borrowed from Emlid and this other company from France who likes to copy products?

I think the module could offer a possibility to connect any uBlox RTK module to Mission Planner. Or to RTKlib first and then to Mission Planner. Since I like to put my base station some 10 m away from my computer I think such a module could help to realize that via wifi which would be great.

I think I would be interested to try. I have a M8T module from France which I did not use up to now. It would be very interesting how it compares if I use this as base station and an Emlid Reach as rover.

Especially for 5 $ I would take 5 :wink: - oh, but I realize I can’t buy them, or???


As you can see. ESPrtk is a data bridge for RTK application. It will replace other RF modules with the same function. You need to configure each module for different tasks. Example with Rover (Drone).
F9P: Configure as a Rover RTK, receive RTCM data on port RX2 and export NMEA positioning data on TX1 port.
Pixhawk: Connection configuration for between ESPrtk and F9P with UART communication.
ESPrtk: Configure as Client (NTRIP / MQTT / Radio?), Receive RTCM data from NTRIP Server and export to TX1 port. Additional functions can be configured such as Resending NMEA / Bluetooth Viewer / Log NMEA on port RX2.

About the diagrams connected to the F9P-ZED and the detailed deployment model can be found in the links above.

Can I have one of these? If it works as I think I will report the use case… .

1 Like

I am allowed to use open source images from them. I am also licensed (collaborated) from Drotek on their drawings here:

Yes, so you can build for your own ESPrtk board , follow this link : Link

I encourage you to go this way , and with the help of @Develop_ESPrtk you can certainly make a difference between a product announcement and a community project :wink:

1 Like

Thank you , @Ppoirier
Hey, I’ll give you 2 files KEY activated for FREE (worth $ 40) with full functionality, then you can help us in product announcement . If you agree, please insert link of this topic when you email to us .

Thankyou for the kind offer! Anyhow, I’m not able to build one myself. Could you also send me two modules?

BTW. I did not realize that there was a firmware which one has to pay for. But I think connecting a M8T via wifi to my computer with the help of a ESP-module is a great thing. I will look into that in any case and report. I did plan to contribute on my activities with Arducopter anyhow (and start to post things like these reports here instead of some where else.).

1 Like

Sorry, you need to create yourself a simple board, it is not difficult as you think, just wiring, that’s the only way now, components can be buy anywhere in the world (Ebay-Amazon-Aliexpress …), there are many benefits.(We also have complete modules,but the production is very expensive, the solution is to create ESPrtk from the ESP32 module in your DIY electrical box.) From that, you can even use ESP32 module for other projects not only ESPrtk.
For example (actually you donnot need to connect all pin like what you see in below) :

About product announcements: feel free and comfortable when you experience and comment on ESPrtk, whenever you want. We always respect and listen to feedback from all users.