{"id":283,"date":"2025-04-11T17:51:03","date_gmt":"2025-04-11T17:51:03","guid":{"rendered":"http:\/\/blog.ltzs.us\/?p=283"},"modified":"2025-05-03T14:02:17","modified_gmt":"2025-05-03T14:02:17","slug":"setting-up-lc29hea-gnss-receiver-as-base-station-and-serving-ntrip-data","status":"publish","type":"post","link":"http:\/\/blog.ltzs.us\/?p=283","title":{"rendered":"Setting up LC29HEA GNSS receiver as base station and serving NTRIP data"},"content":{"rendered":"\n<p><em>*Last updated 2025-05-03<\/em><\/p>\n\n\n\n<p>Cost:<\/p>\n\n\n\n<p>$25 <a href=\"https:\/\/www.aliexpress.com\/item\/1005005046075184.html?spm=a2g0o.productlist.main.2.106aM55BM55BDW&amp;algo_pvid=11489f25-6fd4-4171-bdb7-9d19a31a7e4c&amp;algo_exp_id=11489f25-6fd4-4171-bdb7-9d19a31a7e4c-1&amp;pdp_ext_f=%7B%22order%22%3A%2226%22%2C%22eval%22%3A%221%22%7D&amp;pdp_npi=4%40dis%21USD%2127.24%2121.79%21%21%2127.24%2121.79%21%40211b816617462807447418379e0c8a%2112000031439782043%21sea%21SN%212667998236%21X&amp;curPageLogUid=EXqPG7vJ2Q8n&amp;utparam-url=scene%3Asearch%7Cquery_from%3A\" data-type=\"link\" data-id=\"https:\/\/www.aliexpress.com\/item\/1005005046075184.html?spm=a2g0o.productlist.main.2.106aM55BM55BDW&amp;algo_pvid=11489f25-6fd4-4171-bdb7-9d19a31a7e4c&amp;algo_exp_id=11489f25-6fd4-4171-bdb7-9d19a31a7e4c-1&amp;pdp_ext_f=%7B%22order%22%3A%2226%22%2C%22eval%22%3A%221%22%7D&amp;pdp_npi=4%40dis%21USD%2127.24%2121.79%21%21%2127.24%2121.79%21%40211b816617462807447418379e0c8a%2112000031439782043%21sea%21SN%212667998236%21X&amp;curPageLogUid=EXqPG7vJ2Q8n&amp;utparam-url=scene%3Asearch%7Cquery_from%3A\">antenna<\/a><\/p>\n\n\n\n<p>$49 <a href=\"https:\/\/www.aliexpress.com\/item\/1005008926089569.html?spm=a2g0o.productlist.main.19.6ab4235fMFZBMV&amp;algo_pvid=d932002b-9017-41e5-b83b-da18dc6f8f48&amp;algo_exp_id=d932002b-9017-41e5-b83b-da18dc6f8f48-18&amp;pdp_ext_f=%7B%22order%22%3A%2288%22%2C%22eval%22%3A%221%22%2C%22orig_sl_item_id%22%3A%221005008926089569%22%2C%22orig_item_id%22%3A%221005006724660554%22%7D&amp;pdp_npi=4%40dis%21USD%2192.10%2146.05%21%21%2192.10%2146.05%21%40211b876e17462807967061713eda77%2112000047228792519%21sea%21SN%212667998236%21X&amp;curPageLogUid=2wg47ibIH5im&amp;utparam-url=scene%3Asearch%7Cquery_from%3A\" data-type=\"link\" data-id=\"https:\/\/www.aliexpress.com\/item\/1005008926089569.html?spm=a2g0o.productlist.main.19.6ab4235fMFZBMV&amp;algo_pvid=d932002b-9017-41e5-b83b-da18dc6f8f48&amp;algo_exp_id=d932002b-9017-41e5-b83b-da18dc6f8f48-18&amp;pdp_ext_f=%7B%22order%22%3A%2288%22%2C%22eval%22%3A%221%22%2C%22orig_sl_item_id%22%3A%221005008926089569%22%2C%22orig_item_id%22%3A%221005006724660554%22%7D&amp;pdp_npi=4%40dis%21USD%2192.10%2146.05%21%21%2192.10%2146.05%21%40211b876e17462807967061713eda77%2112000047228792519%21sea%21SN%212667998236%21X&amp;curPageLogUid=2wg47ibIH5im&amp;utparam-url=scene%3Asearch%7Cquery_from%3A\">LC29HEA<\/a><\/p>\n\n\n\n<p>$20 Raspberry Pi Zero 2W<\/p>\n\n\n\n<p>$1 OTG USB adapter<\/p>\n\n\n\n<p>$5 USB power supply and USB cable for Pi<\/p>\n\n\n\n<p>Total $100<\/p>\n\n\n\n<p>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 <a href=\"https:\/\/rtklibexplorer.wordpress.com\/2024\/05\/06\/configuring-the-quectel-lc29hea-receiver-for-real-time-rtk-solutions\/\" data-type=\"link\" data-id=\"https:\/\/rtklibexplorer.wordpress.com\/2024\/05\/06\/configuring-the-quectel-lc29hea-receiver-for-real-time-rtk-solutions\/\">blog post<\/a>. Setup details for the unit can be found there, but I will add some details from my workflow.<\/p>\n\n\n\n<p>Raspberry pi needs a <a href=\"https:\/\/www.aliexpress.us\/item\/3256807424756640.html?spm=a2g0o.productlist.main.7.40e76730TGzrp0&amp;aem_p4p_detail=202504110425061848150525638250000262485&amp;algo_pvid=1f492962-8169-41fe-bfab-939e835b880a&amp;algo_exp_id=1f492962-8169-41fe-bfab-939e835b880a-3&amp;pdp_ext_f=%7B%22order%22%3A%226751%22%2C%22eval%22%3A%221%22%7D&amp;pdp_npi=4%40dis%21USD%210.95%210.92%21%21%210.95%210.92%21%40211b807017443707059027457ef4c6%2112000041498292496%21sea%21US%212667998236%21X&amp;curPageLogUid=SrsNyakQNSb9&amp;utparam-url=scene%3Asearch%7Cquery_from%3A&amp;search_p4p_id=202504110425061848150525638250000262485_1\" data-type=\"link\" data-id=\"https:\/\/www.aliexpress.us\/item\/3256807424756640.html?spm=a2g0o.productlist.main.7.40e76730TGzrp0&amp;aem_p4p_detail=202504110425061848150525638250000262485&amp;algo_pvid=1f492962-8169-41fe-bfab-939e835b880a&amp;algo_exp_id=1f492962-8169-41fe-bfab-939e835b880a-3&amp;pdp_ext_f=%7B%22order%22%3A%226751%22%2C%22eval%22%3A%221%22%7D&amp;pdp_npi=4%40dis%21USD%210.95%210.92%21%21%210.95%210.92%21%40211b807017443707059027457ef4c6%2112000041498292496%21sea%21US%212667998236%21X&amp;curPageLogUid=SrsNyakQNSb9&amp;utparam-url=scene%3Asearch%7Cquery_from%3A&amp;search_p4p_id=202504110425061848150525638250000262485_1\">OTG adapter<\/a> to allow the USB output of the LC29HEA to go into the micro-USB port of the Zero 2W.<\/p>\n\n\n\n<p>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. <\/p>\n\n\n\n<p>Easiest first step to configuring the LC29HEA is connecting it to a Windows computer to configure basic settings and then installing its permanent place.<\/p>\n\n\n\n<p>Download QGNSS from Quectel <a href=\"https:\/\/market.quectel.com\/docsdownload\/QGNSS_V1.10_EN.zip\" data-type=\"link\" data-id=\"https:\/\/market.quectel.com\/docsdownload\/QGNSS_V1.10_EN.zip\">here<\/a>. Launch QGNSS and open Tools-&gt;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&#8217;s lower than 460800).<\/p>\n\n\n\n<p>Set navigation mode to stationary<\/p>\n\n\n\n<p><mark style=\"background-color:#fcb900\" class=\"has-inline-color\"><code>$PAIR080,4*2A<\/code><\/mark><\/p>\n\n\n\n<p>Set baud rate<\/p>\n\n\n\n<p><mark style=\"background-color:#fcb900\" class=\"has-inline-color\"><code>$PAIR864,0,0,115200*1B<\/code><\/mark><\/p>\n\n\n\n<p>Set update rate to 1hz<\/p>\n\n\n\n<p><mark style=\"background-color:#fcb900\" class=\"has-inline-color\"><code>$PAIR050,1000*12<\/code><\/mark><\/p>\n\n\n\n<p>Save data<\/p>\n\n\n\n<p><mark style=\"background-color:#fcb900\" class=\"has-inline-color\"><code>$PAIR382,1*2E<\/code><\/mark><\/p>\n\n\n\n<p><mark style=\"background-color:#fcb900\" class=\"has-inline-color\"><code>$PAIR003*39<\/code><\/mark><\/p>\n\n\n\n<p><mark style=\"background-color:#fcb900\" class=\"has-inline-color\"><code>$PAIR511*3F<\/code><\/mark><\/p>\n\n\n\n<p><mark style=\"background-color:#fcb900\" class=\"has-inline-color\"><code>$PAIR513*3D<\/code><\/mark><\/p>\n\n\n\n<p><mark style=\"background-color:#fcb900\" class=\"has-inline-color\"><code>$PAIR002*38<\/code><\/mark><\/p>\n\n\n\n<p>Restart by unplugging and replugging the unit.<\/p>\n\n\n\n<p>Turn off all NMEA messages (leaving binary RTCM messages remaining)<\/p>\n\n\n\n<p><mark style=\"background-color:#fcb900\" class=\"has-inline-color\"><code>$PAIR062,0,0*3E<\/code><\/mark><\/p>\n\n\n\n<p><mark style=\"background-color:#fcb900\" class=\"has-inline-color\"><code>$PAIR062,1,0*3F<\/code><\/mark><\/p>\n\n\n\n<p><mark style=\"background-color:#fcb900\" class=\"has-inline-color\"><code>$PAIR062,2,0*3C<\/code><\/mark><\/p>\n\n\n\n<p><mark style=\"background-color:#fcb900\" class=\"has-inline-color\"><code>$PAIR062,3,0,3D<\/code><\/mark><\/p>\n\n\n\n<p><mark style=\"background-color:#fcb900\" class=\"has-inline-color\"><code>$PAIR062,4,0*3A<\/code><\/mark><\/p>\n\n\n\n<p><mark style=\"background-color:#fcb900\" class=\"has-inline-color\"><code>$PAIR062,5,0*3B<\/code><\/mark><\/p>\n\n\n\n<p>Turn on MSM7 messages (needs to happen manually on every restart, setting doesn&#8217;t stick), turn on stationary antenna reference point (1005), and ephemeris data.<\/p>\n\n\n\n<p><mark style=\"background-color:#fcb900\" class=\"has-inline-color\"><code>$PAIR432,1*22<\/code><\/mark><\/p>\n\n\n\n<p><mark style=\"background-color:#fcb900\" class=\"has-inline-color\"><code>$PAIR434,1*24<\/code><\/mark><\/p>\n\n\n\n<p><mark style=\"background-color:#fcb900\" class=\"has-inline-color\"><code>$PAIR436,1*26<\/code><\/mark><\/p>\n\n\n\n<p>Save data<\/p>\n\n\n\n<p><mark style=\"background-color:#fcb900\" class=\"has-inline-color\"><code>$PAIR511*3F<\/code><\/mark><\/p>\n\n\n\n<p><mark style=\"background-color:#fcb900\" class=\"has-inline-color\"><code>$PAIR513*3D<\/code><\/mark><\/p>\n\n\n\n<p>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 <a href=\"https:\/\/github.com\/TUW-VieVS\/raPPPid\">here<\/a>. 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.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full is-resized\"><img loading=\"lazy\" decoding=\"async\" width=\"480\" height=\"431\" src=\"http:\/\/blog.ltzs.us\/wp-content\/uploads\/2025\/04\/rtkconv.png\" alt=\"\" class=\"wp-image-294\" style=\"width:425px;height:auto\" srcset=\"http:\/\/blog.ltzs.us\/wp-content\/uploads\/2025\/04\/rtkconv.png 480w, http:\/\/blog.ltzs.us\/wp-content\/uploads\/2025\/04\/rtkconv-300x269.png 300w\" sizes=\"auto, (max-width: 480px) 100vw, 480px\" \/><\/figure>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"483\" height=\"437\" src=\"http:\/\/blog.ltzs.us\/wp-content\/uploads\/2025\/04\/rtkconv-options.png\" alt=\"\" class=\"wp-image-295\" srcset=\"http:\/\/blog.ltzs.us\/wp-content\/uploads\/2025\/04\/rtkconv-options.png 483w, http:\/\/blog.ltzs.us\/wp-content\/uploads\/2025\/04\/rtkconv-options-300x271.png 300w\" sizes=\"auto, (max-width: 483px) 100vw, 483px\" \/><\/figure>\n\n\n\n<p>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.<\/p>\n\n\n\n<p>Once you have a .obs file with RINEX data, load matlab, open the rapppid WORK folder, and run the program.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"567\" src=\"http:\/\/blog.ltzs.us\/wp-content\/uploads\/2025\/04\/matlab-1024x567.png\" alt=\"\" class=\"wp-image-296\" srcset=\"http:\/\/blog.ltzs.us\/wp-content\/uploads\/2025\/04\/matlab-1024x567.png 1024w, http:\/\/blog.ltzs.us\/wp-content\/uploads\/2025\/04\/matlab-300x166.png 300w, http:\/\/blog.ltzs.us\/wp-content\/uploads\/2025\/04\/matlab-768x425.png 768w, http:\/\/blog.ltzs.us\/wp-content\/uploads\/2025\/04\/matlab-850x471.png 850w, http:\/\/blog.ltzs.us\/wp-content\/uploads\/2025\/04\/matlab.png 1351w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"467\" height=\"665\" src=\"http:\/\/blog.ltzs.us\/wp-content\/uploads\/2025\/04\/matlab2.png\" alt=\"\" class=\"wp-image-297\" srcset=\"http:\/\/blog.ltzs.us\/wp-content\/uploads\/2025\/04\/matlab2.png 467w, http:\/\/blog.ltzs.us\/wp-content\/uploads\/2025\/04\/matlab2-211x300.png 211w, http:\/\/blog.ltzs.us\/wp-content\/uploads\/2025\/04\/matlab2-300x427.png 300w\" sizes=\"auto, (max-width: 467px) 100vw, 467px\" \/><\/figure>\n\n\n\n<p>Once you&#8217;re in the raPPPid interface, choose your .obs file, choose your orbit data and hit RUN.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"644\" src=\"http:\/\/blog.ltzs.us\/wp-content\/uploads\/2025\/04\/rapppid1-1024x644.png\" alt=\"\" class=\"wp-image-298\" srcset=\"http:\/\/blog.ltzs.us\/wp-content\/uploads\/2025\/04\/rapppid1-1024x644.png 1024w, http:\/\/blog.ltzs.us\/wp-content\/uploads\/2025\/04\/rapppid1-300x189.png 300w, http:\/\/blog.ltzs.us\/wp-content\/uploads\/2025\/04\/rapppid1-768x483.png 768w, http:\/\/blog.ltzs.us\/wp-content\/uploads\/2025\/04\/rapppid1-850x534.png 850w, http:\/\/blog.ltzs.us\/wp-content\/uploads\/2025\/04\/rapppid1.png 1147w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"476\" height=\"325\" src=\"http:\/\/blog.ltzs.us\/wp-content\/uploads\/2025\/04\/rapppid2.png\" alt=\"\" class=\"wp-image-299\" srcset=\"http:\/\/blog.ltzs.us\/wp-content\/uploads\/2025\/04\/rapppid2.png 476w, http:\/\/blog.ltzs.us\/wp-content\/uploads\/2025\/04\/rapppid2-300x205.png 300w\" sizes=\"auto, (max-width: 476px) 100vw, 476px\" \/><\/figure>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"493\" height=\"374\" src=\"http:\/\/blog.ltzs.us\/wp-content\/uploads\/2025\/04\/rapppid3.png\" alt=\"\" class=\"wp-image-302\" srcset=\"http:\/\/blog.ltzs.us\/wp-content\/uploads\/2025\/04\/rapppid3.png 493w, http:\/\/blog.ltzs.us\/wp-content\/uploads\/2025\/04\/rapppid3-300x228.png 300w\" sizes=\"auto, (max-width: 493px) 100vw, 493px\" \/><\/figure>\n\n\n\n<p>I use CODE Final products (after waiting 14 days) because they seem to be the least error-prone.<\/p>\n\n\n\n<p>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&#8217;t seem like it&#8217;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.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"902\" height=\"618\" src=\"http:\/\/blog.ltzs.us\/wp-content\/uploads\/2025\/04\/rapppid4.png\" alt=\"\" class=\"wp-image-303\" srcset=\"http:\/\/blog.ltzs.us\/wp-content\/uploads\/2025\/04\/rapppid4.png 902w, http:\/\/blog.ltzs.us\/wp-content\/uploads\/2025\/04\/rapppid4-300x206.png 300w, http:\/\/blog.ltzs.us\/wp-content\/uploads\/2025\/04\/rapppid4-768x526.png 768w, http:\/\/blog.ltzs.us\/wp-content\/uploads\/2025\/04\/rapppid4-850x582.png 850w\" sizes=\"auto, (max-width: 902px) 100vw, 902px\" \/><\/figure>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<p>Install ser2net on the Zero 2W.<\/p>\n\n\n\n<p><mark style=\"background-color:#fcb900\" class=\"has-inline-color\"><code>sudo apt install ser2net<\/code><\/mark><\/p>\n\n\n\n<p><mark style=\"background-color:#fcb900\" class=\"has-inline-color\"><code>sudo nano \/etc\/ser2net.yaml<\/code><\/mark><\/p>\n\n\n\n<pre class=\"wp-block-prismatic-blocks\"><code class=\"language-yaml\">define: &amp;banner \\r\\nser2net port \\p device \\d [\\B] (Debian GNU\/Linux)\\r\\n\\r\\n\n\nconnection: &amp;con0096\n    accepter: tcp,0.0.0.0,3333\n    enable: on\n    options:\n      banner: *banner\n      kickolduser: true\n      telnet-brk-on-sync: true\n      max-connections: 3\n    connector: serialdev,\n              \/dev\/ttyUSB0,\n              115200n81,local<\/code><\/pre>\n\n\n\n<p>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.<\/p>\n\n\n\n<p>Create a ser2net service file so it starts on boot<\/p>\n\n\n\n<p><mark style=\"background-color:#fcb900\" class=\"has-inline-color\"><code>sudo nano \/etc\/systemd\/system\/ser2net.service<\/code><\/mark><\/p>\n\n\n\n<pre class=\"wp-block-prismatic-blocks\"><code class=\"language-\">[Unit]\nDescription=Serial port to network proxy\nDocumentation=man:ser2net(8)\nAfter=network-online.target\nWants=network-online.target\n\n[Service]\nEnvironmentFile=-\/etc\/default\/ser2net\nExecStart=\/usr\/sbin\/ser2net -n -c \/etc\/ser2net.yaml -P \/run\/ser2net.pid\nType=exec\nRestart=no\n\n[Install]\nWantedBy=multi-user.target<\/code><\/pre>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<p>Install rtklib using <a href=\"https:\/\/rtklibexplorer.wordpress.com\/2022\/11\/10\/raspberry-pi-based-ppk-and-rtk-solutions-with-rtklib\/\" data-type=\"link\" data-id=\"https:\/\/rtklibexplorer.wordpress.com\/2022\/11\/10\/raspberry-pi-based-ppk-and-rtk-solutions-with-rtklib\/\">instructions<\/a> from rtklibexplorer.<\/p>\n\n\n\n<pre class=\"wp-block-prismatic-blocks\"><code class=\"language-\">sudo apt update\nsudo apt install git\nmkdir rtklib\ncd rtklib\ngit clone https:\/\/github.com\/rtklibexplorer\/RTKLIB.git\ncd RTKLIB\/app\/consapp\/str2str\/gcc\nmake\nsudo cp str2str \/usr\/local\/bin\/str2str\ncd ..\/..\/rtkrcv\/gcc\nmake\nsudo cp rtkrcv \/usr\/local\/bin\/rtkrcv\ncd ..\/..\/..\/..\/..<\/code><\/pre>\n\n\n\n<p>Create a service file so str2str starts on boot and connects to the TCP port created by ser2net.<\/p>\n\n\n\n<p><mark style=\"background-color:#fcb900\" class=\"has-inline-color\"><code>sudo nano \/etc\/systemd\/system\/str2str.service<\/code><\/mark><\/p>\n\n\n\n<pre class=\"wp-block-prismatic-blocks\"><code class=\"language-\">[Unit]\nDescription=Launch str2str to send ntrip correction data to rtk2go.com\nWants=network-online.target\n\n[Service]\nType=simple\nUser=pi\nExecStart=\/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\nExecReload=\/bin\/kill -HUP $MAINPID\nKillMode=process\nRestart=on-failure\nRestartSec=42s\n\n[Install]\nWantedBy=multi-user.target<\/code><\/pre>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<p>Of course, you&#8217;ll need to register your Mount Point with rtk2go.com before launching this service.<\/p>\n\n\n\n<p>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.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<p>To access the LC29HEA from a remote Windows machine, download and install <a href=\"https:\/\/eterlogic.com\/Products.VSPE_Download.html\" data-type=\"link\" data-id=\"https:\/\/eterlogic.com\/Products.VSPE_Download.html\">VSPE<\/a>. 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.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"729\" src=\"http:\/\/blog.ltzs.us\/wp-content\/uploads\/2025\/04\/tcp-conn-1024x729.png\" alt=\"\" class=\"wp-image-304\" srcset=\"http:\/\/blog.ltzs.us\/wp-content\/uploads\/2025\/04\/tcp-conn-1024x729.png 1024w, http:\/\/blog.ltzs.us\/wp-content\/uploads\/2025\/04\/tcp-conn-300x214.png 300w, http:\/\/blog.ltzs.us\/wp-content\/uploads\/2025\/04\/tcp-conn-768x547.png 768w, http:\/\/blog.ltzs.us\/wp-content\/uploads\/2025\/04\/tcp-conn-850x605.png 850w, http:\/\/blog.ltzs.us\/wp-content\/uploads\/2025\/04\/tcp-conn.png 1065w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p>Now you can survey-in while the LC29HEA is connected to the Pi.<\/p>\n\n\n\n<p>Follow the <a href=\"https:\/\/forums.quectel.com\/t\/survey-in-on-lc29hea-completes-instantly\/39694\/7\" data-type=\"link\" data-id=\"https:\/\/forums.quectel.com\/t\/survey-in-on-lc29hea-completes-instantly\/39694\/6\">post<\/a> from bamarcant on Quectel forums.<\/p>\n\n\n\n<p><\/p>\n","protected":false},"excerpt":{"rendered":"<p>*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&#8230;<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1],"tags":[],"class_list":["post-283","post","type-post","status-publish","format-standard","hentry","category-uncategorized"],"_links":{"self":[{"href":"http:\/\/blog.ltzs.us\/index.php?rest_route=\/wp\/v2\/posts\/283","targetHints":{"allow":["GET"]}}],"collection":[{"href":"http:\/\/blog.ltzs.us\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/blog.ltzs.us\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/blog.ltzs.us\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"http:\/\/blog.ltzs.us\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=283"}],"version-history":[{"count":8,"href":"http:\/\/blog.ltzs.us\/index.php?rest_route=\/wp\/v2\/posts\/283\/revisions"}],"predecessor-version":[{"id":306,"href":"http:\/\/blog.ltzs.us\/index.php?rest_route=\/wp\/v2\/posts\/283\/revisions\/306"}],"wp:attachment":[{"href":"http:\/\/blog.ltzs.us\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=283"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/blog.ltzs.us\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=283"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/blog.ltzs.us\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=283"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}