Roland Hauff – Lawnmower Robot ESPrtk uBlox ZED-F9P , Cube Orange Autopilot ESP32 RTK

Roland Hauff – Lawnmower Robot ESPrtk uBlox ZED-F9P , Cube Orange Autopilot ESP32 RTK

Hello ESPrtk User .

Read Full post here :


  • App Build : NTRIP/MQTT RTK BaseStation+Rover+CASTER
  • ESP32 : ESP32 DEV KIT C Espressif ( ESP32_WROOM_32U or ESP32_WROOM_32UE CHIP)
  • RTK GNSS: F9P or PX1122R
  • Display: OLED SSD1306 0.96 inch or SH1106 1.3 inch( option !)
  • Ethernet: W5500 ( option !)
  • Power supply: 5V 2.5A Adapter
  • Other: LED , Button, Switch , 2.4Ghz WiFi Antenna , GNSS RTK Antenna, RJ45 Etheret cable, Micro USB Cable , 3.3V Active Buzzer , …

If you want to build your own RTK Base station, read more here (Full instructions, connection diagram, how to configure):
NTRIP RTK Basestation – PX1122R / F9P + ESP32 + TRIMBLE, TOPCON, John Deere – ESP32 RTK.

If you want to build your own CORS RTK SERVER Base station, read more here (Full instructions, connection diagram, how to configure):
DIY NTRIP CASTER CORS Server with ESP32 and free DDNS host name – F9P PX1122R ESP32 RTK.

Warning !

For those who are intending to use buzzer on ESPrtk.

To protect ESP32 chip. Do not connect the buzzer directly to the ESP32’s GPIO12 pin.

Please use protection diode (or combine with NPN transistor as shown image below).

This is mostly a build log so I remember how I built this, and to share setup in order to help others with similar machines.

Full post here :

  • Part 1 is the ESPrtk base which streams RTCM corrections from a public NTRIP server and broadcasts with a 900 MHZ radio.
  • Part 2 will be the uBlox ZED-F9P gps setup.
  • Part 3 will be the Ardurover setup.

The mower he used is an old 21″ gas powered push mower, with 8″ Hoverboard motors installed for the drive. An Odrive 3.6 56V drives the brushless motors, and power comes from a 36V Lithium eBike battery. Here is a clip of it running with RC transmitter:

Part 1 ESPrtk base.

I chose to use the ESPrtk firmware running on an ESP32-DevKitC V4. This seemed like the quickest way to build a base to send RTK corrections to the mower. The firmware has been in development for a few years and has configuration option for just about any type of caster or rover you want to setup.

I didn’t want to rely on Mission Planner or any other basestation to stream the RTCM corrections to the Lawnbot. The ESP32 boots very quickly and is sending corrections within seconds. Initially I wanted to broadcast with a LORA radio, but the radio I chose (an SX1276 with UART interface) did not transmit the packets reliably. Seemed to be a problem with the 58 byte packets that it transmits.

Switched to mRobotics 915MHz telemetry radios and they just worked…flawlessly. mRo SiK Telemetry Radio V2 915Mhz 5 A SiK Telemetry Radio is a small, light and inexpensive open source radio platform that typically allows ranges of better than 300m “out of the box” (the range can be extended to several kilometres with the use of a patch antenna on the ground).

Here is the schematic of ESPrtk base:

Per the ESPrtk developer, the Minnesota CORS NTRIP server is VRS type, Virtual Reference Station. It requires you to send your GGA coordinates and it responds with the correction. The developer was very responsive in helping me get that sorted and even released an updated firmware due to some of my testing.

Here are a few photos of the construction:

Part 2 Sparkfun GPS configuration

The GPS module I used is the Sparkfun RTK-SMA with uBlox ZED-F9P.

This blog by Roby was invaluable in figuring out this module:

The Taming of the u-blox ZED-F9P

The Taming of the u-blox ZED-F9P – Deep South Robotics Sparkfun has great configuration guides which help greatly with figuring out the rather cryptic uBlox u-Center Windows program. I did all setup using u-Center so that I could use the standalone ESPrtk base above for the RTK corrections, rather than allowing Ardurover to autoconfig the gps and send corrections from Mission Planner base station.

Here is my u-Center configurations:

View>Gen 9 Config View>GNSS Config
Enable only GPS L1 L2 & Galileo E1 E5b so chip is not overloaded with data that won’t get used


  • Protocol in: none
  • Protocol out: UBX (this is much more compact data than NMEA messages)
  • Baudrate: 115200

  • Protocol in: RTCM3
  • Protocol out: NMEA
  • Baudrate: 115200

No NMEA messages are turned on by default,
Message F0-00 NMEA GxGGA (GxGLL GxGSZ GxGSVG xRMC GxVTG, these were on but not needed?)
UART2: ON (all interfaces are on by default, can leave checked)

No UBX messages are turned on by default,
UART1: ON for the following messages
0A-09 MON-HW, 0A-0B MON-HW2, 01-04 NAV-DOP, 01-14 NAV-HPPOSLLH, 01-07 NAV-PVT, 01-03 NAV-STATUS.
(USB and other interfaces may be on, can leave checked)

Increase location resolving from 1/sec to 5/sec:
Measurement Frequency: 5 Hz

To view messages:
View>Messages>Right click on NMEA and UBX and enable

Contact – Roland Hauff

Original post :

All images and files copyright belongs to Roland Hauff .

ESPrtk Q/A support team :

%d bloggers like this: