*Last updated 2025-05-03
Cost:
$25 antenna
$49 LC29HEA
$20 Raspberry Pi Zero 2W
$1 OTG USB adapter
$5 USB power supply and USB cable for Pi
Total $100
The Quectel LC29HEA is a dual frequency (L1/L5) receiver that can act as a base station or rover in a RTK setup. RTKLibExplorer covers this in his blog post. Setup details for the unit can be found there, but I will add some details from my workflow.
Raspberry pi needs a OTG adapter to allow the USB output of the LC29HEA to go into the micro-USB port of the Zero 2W.
The little switches on the LC29HEA need to be both switched towards the antenna connector (away from the USB port) to pass serial data through the USB port. Note that default baud rate is 460800, not 115200.
Easiest first step to configuring the LC29HEA is connecting it to a Windows computer to configure basic settings and then installing its permanent place.
Download QGNSS from Quectel here. Launch QGNSS and open Tools->Command Console. Enter the following command to change the baud rate to 115200 (which is sufficient for RTCM messages. When you have the LC29HEA acting as a rover sending 10x/second with a bunch of NMEA messages, you might run into issues if it’s lower than 460800).
Set navigation mode to stationary
$PAIR080,4*2A
Set baud rate
$PAIR864,0,0,115200*1B
Set update rate to 1hz
$PAIR050,1000*12
Save data
$PAIR382,1*2E
$PAIR003*39
$PAIR511*3F
$PAIR513*3D
$PAIR002*38
Restart by unplugging and replugging the unit.
Turn off all NMEA messages (leaving binary RTCM messages remaining)
$PAIR062,0,0*3E
$PAIR062,1,0*3F
$PAIR062,2,0*3C
$PAIR062,3,0,3D
$PAIR062,4,0*3A
$PAIR062,5,0*3B
Turn on MSM7 messages (needs to happen manually on every restart, setting doesn’t stick), turn on stationary antenna reference point (1005), and ephemeris data.
$PAIR432,1*22
$PAIR434,1*24
$PAIR436,1*26
Save data
$PAIR511*3F
$PAIR513*3D
Once the unit is installed in its final location, you need to set the exact coordinates so it can send correction data. You can log RTCM messages (see below section on str2str) for 24 hours and send to a PPP processor or use the survey-in capability of the LC29HEA. Both methods will only get about .5m accuracy. In order to get better accuracy, you can sign up for a matlab trial, install it (on Windows) and follow the instructions for installing raPPPid software here. Then convert your RTCM messages into RINEX format using rtklib (see below for installation instructions). Launch RTKCONV and choose the start time, end time, interval (I use 10 seconds, which seems like plenty and significantly cuts down on processing time), load your RTCM file, choose RTCM 3 format. See pics below for main screen and options screen.


Note that I have un-checked Glonass observations since with the LC29HEA, you have L1/L5, and no L2 observations, so Glonass is limited to L1, which is incompatible with the other dual-frequency constellations. Glonass sucks anyway.
Once you have a .obs file with RINEX data, load matlab, open the rapppid WORK folder, and run the program.


Once you’re in the raPPPid interface, choose your .obs file, choose your orbit data and hit RUN.



I use CODE Final products (after waiting 14 days) because they seem to be the least error-prone.
Hit RUN and wait a few minutes for the process to complete. It will take a minute to download the orbit data, and it doesn’t seem like it’s doing anything, but it is. It will then process through each epoch and output graphical and text summaries, similar to what the online PPP services provide. The bottom of the results_float.txt file has the coordinates you want.

Install ser2net on the Zero 2W.
sudo apt install ser2net
sudo nano /etc/ser2net.yaml
define: &banner \r\nser2net port \p device \d [\B] (Debian GNU/Linux)\r\n\r\n
connection: &con0096
accepter: tcp,0.0.0.0,3333
enable: on
options:
banner: *banner
kickolduser: true
telnet-brk-on-sync: true
max-connections: 3
connector: serialdev,
/dev/ttyUSB0,
115200n81,local
Ser2net allows multiple simultaneous connections to the serial port. This allows us to connect via remote Windows machine to manage the GNSS receiver and push the data to an NTRIP caster without disconnecting or reconnecting or interrupting data.
Create a ser2net service file so it starts on boot
sudo nano /etc/systemd/system/ser2net.service
[Unit]
Description=Serial port to network proxy
Documentation=man:ser2net(8)
After=network-online.target
Wants=network-online.target
[Service]
EnvironmentFile=-/etc/default/ser2net
ExecStart=/usr/sbin/ser2net -n -c /etc/ser2net.yaml -P /run/ser2net.pid
Type=exec
Restart=no
[Install]
WantedBy=multi-user.target
Install rtklib using instructions from rtklibexplorer.
sudo apt update
sudo apt install git
mkdir rtklib
cd rtklib
git clone https://github.com/rtklibexplorer/RTKLIB.git
cd RTKLIB/app/consapp/str2str/gcc
make
sudo cp str2str /usr/local/bin/str2str
cd ../../rtkrcv/gcc
make
sudo cp rtkrcv /usr/local/bin/rtkrcv
cd ../../../../..
Create a service file so str2str starts on boot and connects to the TCP port created by ser2net.
sudo nano /etc/systemd/system/str2str.service
[Unit]
Description=Launch str2str to send ntrip correction data to rtk2go.com
Wants=network-online.target
[Service]
Type=simple
User=pi
ExecStart=/usr/local/bin/str2str -in tcpcli://localhost:3333 -out ntrips://username:password@rtk2go.com:2101/mountpoint -out file:///home/pi/Desktop/%%Y_%%m_%%d.gps::S=24
ExecReload=/bin/kill -HUP $MAINPID
KillMode=process
Restart=on-failure
RestartSec=42s
[Install]
WantedBy=multi-user.target
Of course, you’ll need to register your Mount Point with rtk2go.com before launching this service.
The log file portion of str2str makes a new file each 24 hours with the date as the filename. Note the double %% to get the filename to work correctly. I use this to have the raw RTCM data available for online PPP services to get a good fix for the antenna. Not necessary for normal operation.
To access the LC29HEA from a remote Windows machine, download and install VSPE. Create a virtual connector, then a TCP Client. TCP Client is the IP address of your Raspi, and port is 3333 (in the ser2net yaml). Push play, and once both lines are black, you can connect to the bridged serial port from the Pi using QGNSS.

Now you can survey-in while the LC29HEA is connected to the Pi.
Follow the post from bamarcant on Quectel forums.