Budget DIY GPS/GNSS Base Station / Receiver Setup with ESP32 and UM980
Published: 2023-10-09 02:53:59

---
title: Budget DIY GPS/GNSS Base Station / Receiver Setup with ESP32 and UM980
published: true
date: 2023-12-05 00:00:00 UTC
tags: 
canonical_url: https://simeononsecurity.ch/guides/budget-diy-gps-gnss-base-station-setup-esp32-um980/
---
 ![](https://simeononsecurity.ch/img/cover/Budget_DIY_GPS_GNSS_Base_Station_Setup.png)

**Best Budget DIY GPS/GNSS Base Station using the UM980 and a ESP32**

## Introduction [#](#introduction)

The ESP32 is a versatile microcontroller renowned for its WiFi and Bluetooth capabilities. In this guide, we’ll walk you through setting up the your **ESP32 development board** with the <meta itemprop="name" content="&lt;strong&gt;Unicorecomm UM980&lt;/strong&gt;"><meta itemprop="url" content="https://en.unicorecomm.com/products/detail/26">[**Unicorecomm UM980**](https://en.unicorecomm.com/products/detail/26) and various accessories. We’ll also cover flashing the ESP32 with the desired firmware.

[![ESP32 Wroom DevKit Full Pinout](https://simeononsecurity.ch/guides/budget-diy-gps-gnss-base-station-setup-esp32-um980/esp32pinout.jpg) ](https://mischianti.org/2021/07/17/esp32-devkitc-v4-high-resolution-pinout-and-specs/)
_ESP32 Wroom DevKit Full Pinout - mischianti.org_

### Alternate Instructions [#](#alternate-instructions)

**Want to use a linux distro or a raspberry pi?**

Check out our guide on <meta itemprop="name" content="&lt;strong&gt;Setting up a NTRIP server on Linux&lt;/strong&gt;"><meta itemprop="url" content="https://simeononsecurity.ch/other/onocoy-gps-gnss-reciever-basestation-on-a-budget/">[**Setting up a NTRIP server on Linux**](https://simeononsecurity.ch/other/onocoy-gps-gnss-reciever-basestation-on-a-budget/)

### Looking for how to use this with Onocoy? [#](#looking-for-how-to-use-this-with-onocoy)

Check out our guide on <meta itemprop="name" content="&lt;strong&gt;DIY Onocoy Ntrip Server and Reference Station Setup&lt;/strong&gt;"><meta itemprop="url" content="https://simeononsecurity.ch/other/onocoy-gps-gnss-reciever-basestation-on-a-budget/">[**DIY Onocoy Ntrip Server and Reference Station Setup**](https://simeononsecurity.ch/other/onocoy-gps-gnss-reciever-basestation-on-a-budget/)

### Hardware Components [#](#hardware-components)

Before we begin, let’s take a look at the hardware components you’ll need:

1. **ESP32 Development Board** : <meta itemprop="name" content="AITRIP 2 Sets ESP-WROOM-32 ESP32"><meta itemprop="url" content="https://amzn.to/3rEMIjr">[AITRIP 2 Sets ESP-WROOM-32 ESP32](https://amzn.to/3rEMIjr)

2. **Power Supply** : <meta itemprop="name" content="CanaKit 3.5A Raspberry Pi 4 Power Supply (USB-C)"><meta itemprop="url" content="https://amzn.to/3ZOpDao">[CanaKit 3.5A Raspberry Pi 4 Power Supply (USB-C)](https://amzn.to/3ZOpDao)

3. **Adapter Cables** : (Choose one):

4. **Enclosure Kit** : <meta itemprop="name" content="qBoxMini DIY IOT Enclosure Plus Kit (One SMA)"><meta itemprop="url" content="https://amzn.to/3PIvwl7">[qBoxMini DIY IOT Enclosure Plus Kit (One SMA)](https://amzn.to/3PIvwl7)

5. **GNSS Receiver Board** (Choose one):

6. **Firmware** : <meta itemprop="name" content="ESP32-XBee Firmware"><meta itemprop="url" content="https://github.com/nebkat/esp32-xbee/releases/tag/v0.5.2">[ESP32-XBee Firmware](https://github.com/nebkat/esp32-xbee/releases/tag/v0.5.2)

### Recommended Antennas [#](#recommended-antennas)

### Basic Antennas for RTK, ROVER, Window Situations [#](#basic-antennas-for-rtk-rover-window-situations)

- <meta itemprop="name" content="Bingfu GPS Navigation Antenna "><meta itemprop="url" content="https://amzn.to/3qM9N36">[Bingfu GPS Navigation Antenna](https://amzn.to/3qM9N36) - $9
  - Basic, simple, not the best, but it works.
- <meta itemprop="name" content="Bingfu GPS Navigation External Antenna"><meta itemprop="url" content="https://amzn.to/3PcSGki">[Bingfu GPS Navigation External Antenna](https://amzn.to/3PcSGki) - $24
  - Outdoor Rated, Cheap, Allows view of the Sky.
- <meta itemprop="name" content="SparkFun GNSS-RTK Accessory Kit"><meta itemprop="url" content="https://amzn.to/3ORbgxc">[SparkFun GNSS-RTK Accessory Kit](https://amzn.to/3ORbgxc) - $85
  - This is only recommended for those who can not properly install the antennas below. It will underperform against the others.

### Advanced Antennas for Base and Reciver Stations [#](#advanced-antennas-for-base-and-reciver-stations)

- ( **Preferred** ) <meta itemprop="name" content="Beitian High Gain High Precision GPS/GNSS Antenna"><meta itemprop="url" content="https://amzn.to/47MWdxa">[Beitian High Gain High Precision GPS/GNSS Antenna](https://amzn.to/47MWdxa) - $86
  - High Antenna Gain, High Precision, Builtin Anti-interference, IP67 Rated, High and Low Temp Ratings, UV Resistant Housing, Supports Most Bands..
- ( **Preferred** ) <meta itemprop="name" content="Calibrated Survey GNSS Tripleband + L-band antenna (IP67)"><meta itemprop="url" content="https://www.ardusimple.com/product/calibrated-survey-gnss-quadband-antenna-ip67/">[Calibrated Survey GNSS Tripleband + L-band antenna (IP67)](https://www.ardusimple.com/product/calibrated-survey-gnss-quadband-antenna-ip67/) - $230
  - Calibrated Quad-Band, Extremely High Precision, Anti-interference, Supports All Bands
- <meta itemprop="name" content="Multi-frequency High Precision Survey Antenna"><meta itemprop="url" content="https://hyfix.ai/products/multi-frequency-high-precision-survey-antenna">[Multi-frequency High Precision Survey Antenna](https://hyfix.ai/products/multi-frequency-high-precision-survey-antenna) - $95
  - Strong Antenna Signal, High Precision, Builtin Anti-interference.
- <meta itemprop="name" content="GNSS Surveying Antenna and Precise Navigation Antenna"><meta itemprop="url" content="https://amzn.to/47Mj4ZH">[GNSS Surveying Antenna and Precise Navigation Antenna](https://amzn.to/47Mj4ZH) - $180
  - High Antenna Gain, Extremely High Precision, IP67 Rated.
- <meta itemprop="name" content="HARXON CSX627A"><meta itemprop="url" content="https://www.gns-electronics.de/product/harxon-csx627a/">[HARXON CSX627A](https://www.gns-electronics.de/product/harxon-csx627a/) - $135
  - Calibrated Triple Band RTK Antenna, IP67, Supports All Bands
- <meta itemprop="name" content="L1/L2/L5 GPS, G1/G2/G3 GLONASS, B1/B2/B3 BDS, Galileo E1/E5/E6 38dB Antenna"><meta itemprop="url" content="https://gnss.store/gnss-rtk-multiband-antennas/140-elt0123.html">[L1/L2/L5 GPS, G1/G2/G3 GLONASS, B1/B2/B3 BDS, Galileo E1/E5/E6 38dB Antenna](https://gnss.store/gnss-rtk-multiband-antennas/140-elt0123.html) - $205
  - Supports Most Bands, IP67 Rated

## Step-by-Step Setup [#](#step-by-step-setup)

### 1. Assemble Your Workstation / Desktop / Laptop [#](#1-assemble-your-workstation--desktop--laptop)

Ensure you have a computer with a USB port and internet access. You’ll need this for downloading <meta itemprop="name" content="firmware"><meta itemprop="url" content="https://github.com/nebkat/esp32-xbee/wiki/Firmware-Update">[firmware](https://github.com/nebkat/esp32-xbee/wiki/Firmware-Update) and drivers.

### 2. Connect Hardware Components [#](#2-connect-hardware-components)

- If applicable, plug the ESP32 into the breakout board.
  - ![Connecting ESP32 to Dev Board](https://simeononsecurity.ch/guides/budget-diy-gps-gnss-base-station-setup-esp32-um980/connectesp32todevboard.jpg) 
_ESP32 Dev Board_

  - ![ESP32 Dev Board](https://simeononsecurity.ch/guides/budget-diy-gps-gnss-base-station-setup-esp32-um980/esp32.jpg) 
_ESP32 Dev Board_

- Connect the <meta itemprop="name" content="ESP32 development board"><meta itemprop="url" content="https://amzn.to/3rEMIjr">[ESP32 development board](https://amzn.to/3rEMIjr) to your computer using a <meta itemprop="name" content="Type-C USB cable"><meta itemprop="url" content="https://amzn.to/3ttZS33">[Type-C USB cable](https://amzn.to/3ttZS33).

### 3. Use Adapter Cables [#](#3-use-adapter-cables)

Utilize the <meta itemprop="name" content="elechawk adapter cables"><meta itemprop="url" content="https://amzn.to/3PUgiJY">[elechawk adapter cables](https://amzn.to/3PUgiJY) or alternatives as necessary to connect the <meta itemprop="name" content="UM980"><meta itemprop="url" content="https://gnss.store/unicore-gnss-modules/246-152-elt0221.html#/58-connector-ipex">[UM980](https://gnss.store/unicore-gnss-modules/246-152-elt0221.html#/58-connector-ipex) to your <meta itemprop="name" content="ESP32 board"><meta itemprop="url" content="https://amzn.to/3rEMIjr">[ESP32 board](https://amzn.to/3rEMIjr). These cables offer compatibility with various connectors for expanding your project.

- <meta itemprop="name" content="UM980 RTK InCase PIN GNSS receiver board with USB C"><meta itemprop="url" content="https://gnss.store/unicore-gnss-modules/246-152-elt0221.html#/58-connector-ipex">[UM980 RTK InCase PIN GNSS receiver board with USB C](https://gnss.store/unicore-gnss-modules/246-152-elt0221.html#/58-connector-ipex)
  - If you choose this option, again, you’ll need some <meta itemprop="name" content="male to male dupont wires"><meta itemprop="url" content="https://amzn.to/3Q7VKyH">[male to male dupont wires](https://amzn.to/3Q7VKyH)
  - Wiring
    - `UM980 +5V` to `ESP32 5V` (or 3V3) for power.
    - `UM980 GND` to `ESP32 GND` for ground.
    - `UM980 TXD2` to `ESP32 GPIO pin` designated for receiving data (e.g., `GPIO pin 16`, `RX1`, `RX0`).
    - `UM980 RXD2` to `ESP32 GPIO pin` designated for transmitting data (e.g., `GPIO pin 17`, `TX1`, `TX0`).
    - ![Connecting the GNSS.store UM980 Module to The ESP32 Devboard](https://simeononsecurity.ch/guides/budget-diy-gps-gnss-base-station-setup-esp32-um980/gnssstoreum980.png) 
_GNSS.store UM980 to ESP32 Dev Board Breakout Pin Diagram_

- <meta itemprop="name" content="Full Frequency Centimeter Level Low-power and High-precision UM980 Module RTK Differential Drone GPS Module GNSS Whole System"><meta itemprop="url" content="https://www.aliexpress.us/item/3256805781651631.html">[Full Frequency Centimeter Level Low-power and High-precision UM980 Module RTK Differential Drone GPS Module GNSS Whole System](https://www.aliexpress.us/item/3256805781651631.html)
  - Wiring
    - `UM980 UART VCC (Pin 1)` to `ESP32 3.3V` (or 3V3) for power.
    - `UM980 UART GND (Pin 2)` to `ESP32 GND` for ground.
    - `UM980 UART TXD (Pin 3)` to `ESP32 GPIO pin` designated for receiving data (e.g., `GPIO pin 16`, `RX1`, `RX0`).
    - `UM980 UART RXD (Pin 4)` to `ESP32 GPIO pin` designated for transmitting data (e.g., `GPIO pin 17`, `TX1`, `TX0`).
    - ![Connecting the AliExpress UM980 Module to The ESP32 Devboard](https://simeononsecurity.ch/guides/budget-diy-gps-gnss-base-station-setup-esp32-um980/aliexpressum980.png) 
_AliExpress UM980 to ESP32 Dev Board Breakout Pin Diagram_

### 4. Employ the Enclosure Kit [#](#4-employ-the-enclosure-kit)

For environmental protection, consider using the <meta itemprop="name" content="qBoxMini DIY IOT Enclosure Kit"><meta itemprop="url" content="https://amzn.to/3PIvwl7">[qBoxMini DIY IOT Enclosure Kit](https://amzn.to/3PIvwl7). It offers waterproof protection and includes connectors and a prototyping PCB for easy integration.

### 5. Choose the GNSS Receiver [#](#5-choose-the-gnss-receiver)

Depending on your project needs, timeline, and budget, select the appropriate <meta itemprop="name" content="GNSS receiver board"><meta itemprop="url" content="https://gnss.store/unicore-gnss-modules/246-152-elt0221.html#/58-connector-ipex">[GNSS receiver board](https://gnss.store/unicore-gnss-modules/246-152-elt0221.html#/58-connector-ipex). Follow the wiring diagram above for implementation.

### 6. Flash the Firmware [#](#6-flash-the-firmware)

To flash the <meta itemprop="name" content="ESP32"><meta itemprop="url" content="https://amzn.to/3rEMIjr">[ESP32](https://amzn.to/3rEMIjr) with the <meta itemprop="name" content="ESP32-XBee firmware"><meta itemprop="url" content="https://github.com/nebkat/esp32-xbee">[ESP32-XBee firmware](https://github.com/nebkat/esp32-xbee), follow these steps:

1. Download the firmware from the provided <meta itemprop="name" content="GitHub release"><meta itemprop="url" content="https://github.com/nebkat/esp32-xbee/releases/latest">[GitHub release](https://github.com/nebkat/esp32-xbee/releases/latest).

- Go to the <meta itemprop="name" content="latest stable firmware release"><meta itemprop="url" content="https://github.com/nebkat/esp32-xbee/releases/latest">[latest stable firmware release](https://github.com/nebkat/esp32-xbee/releases/latest) and download:

If you would like to reset the device configuration, you should also download:

```
- `wipe_config.bin`

```

1. Install necessary flashing tools like the ESP-IDF framework and Espressif’s ESP Flash Download Tool.

- Windows
  - **Windows Flash Tools** from <meta itemprop="name" content="Espressif"><meta itemprop="url" content="https://www.espressif.com/en/support/download/other-tools">[Espressif](https://www.espressif.com/en/support/download/other-tools)
- Linux
  - If you have not already done so, install the ESP flashing tool, `esptool`:

1. Connect the ESP32 to your computer.
  - While plugging into your computer, hold down the `BOOT` button to prepare the ESP32 for Flashing.
    - [![ESP32 Boot Button](https://simeononsecurity.ch/guides/budget-diy-gps-gnss-base-station-setup-esp32-um980/esp32boot.webp) ](https://randomnerdtutorials.com/boot-button-1/)
_ESP32 Boot Button - randomnerdtutorials.com_

2. Flash the XBEE ESP32 Firmware_Note_: Your COM device location will be different than mine. You’ll need to identify it first before continuing.

- Windows
  - Open the ESP Flash Download Tool, select the firmware files, set flashing options, and click “Start” to flash the firmware onto the ESP32.
    - [![loading ESP32 Firmware on Windows](https://simeononsecurity.ch/guides/budget-diy-gps-gnss-base-station-setup-esp32-um980/windowsloadfirmware.png) ](https://github.com/nebkat/esp32-xbee/wiki/Firmware-Update)
_Loading ESP32 Firmware on Windows - github.com/nebkat/esp32-xbee/_

    - It is important that the offsets exactly match the files:
      - `bootloader.bin` @ `0x1000`
      - `partition-table.bin` @ `0x8000`
      - `esp32-xbee.bin` @ `0x10000`
      - `www.bin` @ `0x210000`
    - If you would like to reset the device configuration, you should also include:
      - `wipe_config.bin` @ `0x0`
  - [![Flashing ESP32 Firmware on Windows](https://simeononsecurity.ch/guides/budget-diy-gps-gnss-base-station-setup-esp32-um980/windowsflashfirmware.png) ](https://github.com/nebkat/esp32-xbee/wiki/Firmware-Update)
_Flashing ESP32 Firmware on Windows - github.com/nebkat/esp32-xbee/_

  - 
## Alternatively, copy the firmware files to the extracted esptool.exe’s folder and run the following as an administrator [#](#alternatively-copy-the-firmware-files-to-the-extracted-esptoolexes-folder-and-run-the-following-as-an-administrator)

```
   .\esptool.exe --before default_reset --after hard_reset --chip esp32 --port COM10 --baud 115200 write_flash --flash_mode dio --flash_size detect --flash_freq 40m -z 0x1000 ./bootloader.bin 0x8000 ./partition-table.bin 0x10000 ./esp32-xbee.bin 0x210000 ./www.bin

```

- Linux
  - 

```
   esptool.py -b 460800 --after hard_reset write_flash --flash_mode dio --flash_freq 40m --flash_size 4MB 0x8000 partition-table.bin 0x1000 bootloader.bin 0x10000 esp32-xbee.bin 0x210000 www.bin

```

  - If you would like to reset the device configuration, also include: `0x0 wipe_config.bin`
- 

```
Found 1 serial ports
Serial port /dev/ttyUSB0
Connecting....
Detecting chip type... ESP32
Chip is ESP32D0WDQ5 (revision 1)
Features: WiFi, BT, Dual Core, 240MHz, VRef calibration in efuse, Coding Scheme None
Crystal is 40MHz
MAC: 4c:11:ae:6e:30:6c
Uploading stub...
Running stub...
Stub running...
Configuring flash size...
Compressed 3072 bytes to 110...
Wrote 3072 bytes (110 compressed) at 0x00008000 in 0.0 seconds (effective 1540.7 kbit/s)...
Hash of data verified.
Compressed 17216 bytes to 11168...
Wrote 17216 bytes (11168 compressed) at 0x00001000 in 1.0 seconds (effective 138.8 kbit/s)...
Hash of data verified.
Compressed 788768 bytes to 493546...
Wrote 788768 bytes (493546 compressed) at 0x00010000 in 43.9 seconds (effective 143.8 kbit/s)...
Hash of data verified.
Compressed 1048576 bytes to 93902...
Wrote 1048576 bytes (93902 compressed) at 0x00210000 in 8.4 seconds (effective 1004.1 kbit/s)...
Hash of data verified.

Leaving...
Hard resetting via RTS pin...

```

1. Restart the ESP32

- Hit the “EN” button
- Or Power Cycle the Device

### 7. **Configuration** [#](#7-configuration)

1. **Step 1: Connect to the XBee Hotspot**

2. **Step 2: Browse to the Configuration Page**

3. **Step 3: Configure WiFi**

4. **Step 4: Improve Security Configuration**

5. **Step 5: Improve Security Configuration**

### 7. Profit? [#](#7-profit)

### 8. Extras [#](#8-extras)

1. **Full Reset** : In case you encounter any problems and are unable to connect to the device, simply hold the `BOOT` button for 5 seconds, and the ESP32 will be reset to its default configuration.

## Additional Configuration For Unicorecomm UM980 and UM982 Devices [#](#additional-configuration-for-unicorecomm-um980-and-um982-devices)

To enable all the bands and base station mode on the Unicorecomm devices you’ll need to serial into them using baud rate of `115200` and run the following commands. This can be done within terminal, putty, or the <meta itemprop="name" content="Unicorecomm UPrecise"><meta itemprop="url" content="https://en.unicorecomm.com/download">[Unicorecomm UPrecise](https://en.unicorecomm.com/download) software.

1. `mode base time 60 2 2.5`: This line configures the reference station’s operation mode, which is set to “base”. In this configuration the base station will figure out it’s actual location after receiving traffic for 60 seconds.

2. `CONFIG SIGNALGROUP 2`: This command appears to configure the signal group for the UM980/UM982 devices. This enables all bands and frequencies on the device.

3. `rtcm1005 30 and rtcm1006 30`: These commands set the rate at which RTCM messages 1005 and 1006 are sent out from the reference station, respectively. The values “30” commands a 30-second interval.

4. `rtcm1033 1, rtcm1074 1, rtcm1077 1, rtcm1084 1, rtcm1087 1, rtcm1094 1, rtcm1097 1, and rtcm1117 1, rtcm1124 1 and rtcm1127 1`: These commands enable RTCM messages, ensuring that the reference station transmits these specific messages. The value “1” enables these messages to happen every second..

5. `saveconfig`: This command saves the configured settings, ensuring that they persist and are applied whenever the reference station is operational.

### Unicorecomm UM980 and UM982 Configuration Script [#](#unicorecomm-um980-and-um982-configuration-script)

```
mode base time 60 2 2.5

CONFIG SIGNALGROUP 2

rtcm1005 30
rtcm1006 30
rtcm1033 1
rtcm1074 1

rtcm1077 1
rtcm1084 1
rtcm1087 1
rtcm1094 1
rtcm1097 1
rtcm1117 1

rtcm1124 1
rtcm1127 1

saveconfig

```

\*It should be noted that the Unicorecomm device does not have the ability to transmit the `RTCM 1230` message type.

### Unicorecomm UM980 and UM982 Commands Reference Manuals [#](#unicorecomm-um980-and-um982-commands-reference-manuals)

For additional configuration guidance, consult the following documentation:

- <meta itemprop="name" content="UM980 / UM982 Commands Reference Manual"><meta itemprop="url" content="https://en.unicorecomm.com/assets/upload/file/Unicore_Reference_Commands_Manual_For_N4_High_Precision_Products_V2_EN_R1_1.pdf">[UM980 / UM982 Commands Reference Manual](https://en.unicorecomm.com/assets/upload/file/Unicore_Reference_Commands_Manual_For_N4_High_Precision_Products_V2_EN_R1_1.pdf)
- <meta itemprop="name" content="NebulasIV Commands Reference Manual"><meta itemprop="url" content="https://gnss.store/index.php?controller=attachment&amp;id_attachment=255">[NebulasIV Commands Reference Manual](https://gnss.store/index.php?controller=attachment&id_attachment=255)

### 9. Testing [#](#9-testing)

Once the firmware is successfully flashed, your ESP32 board is ready for testing. Begin developing and running IoT applications, making the most of the board’s WiFi, Bluetooth, and GNSS capabilities.

This is where you’ll unplug the ESP32 from your desktop and Plug the <meta itemprop="name" content="CanaKit Raspberry Pi 4 power supply"><meta itemprop="url" content="https://amzn.to/3ZOpDao">[CanaKit Raspberry Pi 4 power supply](https://amzn.to/3ZOpDao) into a power source and connect it to the <meta itemprop="name" content="ESP32 board"><meta itemprop="url" content="https://amzn.to/3rEMIjr">[ESP32 board](https://amzn.to/3rEMIjr) via USB-C.

Testing is going to depend on multiple factors. This part is up to you. I suggest using <meta itemprop="name" content="Onocoy"><meta itemprop="url" content="https://console.onocoy.com/explorer">[Onocoy](https://console.onocoy.com/explorer) and using their service to test your configuration if you’re setting up an NTRIP Server.

[Read More at https://simeononsecurity.ch](https://simeononsecurity.ch/guides/budget-diy-gps-gnss-base-station-setup-esp32-um980/)