├── .gitignore ├── LICENSE ├── README.md ├── images ├── GPS-RTK-SMA-RTCM.png ├── GPS-RTK-SMA-UART.png ├── GPS-RTK-SMA.png └── RTCM-Pi.png └── wireviz ├── rtcmpi.bom.tsv ├── rtcmpi.gv ├── rtcmpi.html ├── rtcmpi.png ├── rtcmpi.svg └── rtcmpi.yml /.gitignore: -------------------------------------------------------------------------------- 1 | # Byte-compiled / optimized / DLL files 2 | __pycache__/ 3 | *.py[cod] 4 | *$py.class 5 | 6 | # C extensions 7 | *.so 8 | 9 | # Distribution / packaging 10 | .Python 11 | build/ 12 | develop-eggs/ 13 | dist/ 14 | downloads/ 15 | eggs/ 16 | .eggs/ 17 | lib/ 18 | lib64/ 19 | parts/ 20 | sdist/ 21 | var/ 22 | wheels/ 23 | pip-wheel-metadata/ 24 | share/python-wheels/ 25 | *.egg-info/ 26 | .installed.cfg 27 | *.egg 28 | MANIFEST 29 | 30 | # PyInstaller 31 | # Usually these files are written by a python script from a template 32 | # before PyInstaller builds the exe, so as to inject date/other infos into it. 33 | *.manifest 34 | *.spec 35 | 36 | # Installer logs 37 | pip-log.txt 38 | pip-delete-this-directory.txt 39 | 40 | # Unit test / coverage reports 41 | htmlcov/ 42 | .tox/ 43 | .nox/ 44 | .coverage 45 | .coverage.* 46 | .cache 47 | nosetests.xml 48 | coverage.xml 49 | *.cover 50 | *.py,cover 51 | .hypothesis/ 52 | .pytest_cache/ 53 | 54 | # Translations 55 | *.mo 56 | *.pot 57 | 58 | # Django stuff: 59 | *.log 60 | local_settings.py 61 | db.sqlite3 62 | db.sqlite3-journal 63 | 64 | # Flask stuff: 65 | instance/ 66 | .webassets-cache 67 | 68 | # Scrapy stuff: 69 | .scrapy 70 | 71 | # Sphinx documentation 72 | docs/_build/ 73 | 74 | # PyBuilder 75 | target/ 76 | 77 | # Jupyter Notebook 78 | .ipynb_checkpoints 79 | 80 | # IPython 81 | profile_default/ 82 | ipython_config.py 83 | 84 | # pyenv 85 | .python-version 86 | 87 | # pipenv 88 | # According to pypa/pipenv#598, it is recommended to include Pipfile.lock in version control. 89 | # However, in case of collaboration, if having platform-specific dependencies or dependencies 90 | # having no cross-platform support, pipenv may install dependencies that don't work, or not 91 | # install all needed dependencies. 92 | #Pipfile.lock 93 | 94 | # PEP 582; used by e.g. github.com/David-OConnor/pyflow 95 | __pypackages__/ 96 | 97 | # Celery stuff 98 | celerybeat-schedule 99 | celerybeat.pid 100 | 101 | # SageMath parsed files 102 | *.sage.py 103 | 104 | # Environments 105 | .env 106 | .venv 107 | env/ 108 | venv/ 109 | ENV/ 110 | env.bak/ 111 | venv.bak/ 112 | 113 | # Spyder project settings 114 | .spyderproject 115 | .spyproject 116 | 117 | # Rope project settings 118 | .ropeproject 119 | 120 | # mkdocs documentation 121 | /site 122 | 123 | # mypy 124 | .mypy_cache/ 125 | .dmypy.json 126 | dmypy.json 127 | 128 | # Pyre type checker 129 | .pyre/ 130 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2022 Jacob Hansen 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # RTCM-Pi 2 | GNSS Base Station based on Raspberry Pi 4B **NO LONGER MAINTAINED** 3 | 4 | ![RTCM-Pi Wiring Diagram](images/RTCM-Pi.png "RTCM-Pi Design") 5 | 6 | # Background 7 | This project is intented to provide a design for creating a GNSS Reference Station using affordable and accessible hardware while maintaining high standards for functionality and reliability. The equipment used for this project is as follows: 8 | 1. [Raspberry Pi 4B](https://rpilocator.com/?country=US&cat=PI4) 9 | 2. [SparkFun GPS-RTK-SMA (u-blox ZED-F9P)](https://www.sparkfun.com/products/16481) 10 | 3. [RFD900x-US Telemetry Modem](https://irlock.com/collections/telemetry/products/rfd900x-us-telemetry-modem-fcc-approved) 11 | 4. [PiJuice HAT](https://www.sparkfun.com/products/14803) 12 | 5. [GNSS Multi-Band L1/L2 Antenna TOP106](https://www.sparkfun.com/products/17751) 13 | 14 | Please note that other hardware/accessories are required for this project: 15 | 1. Soldering Iron [example](https://www.sparkfun.com/products/14228) 16 | 2. Break Away Headers [example](https://www.sparkfun.com/products/116) 17 | 3. Jumper Wires F/F [example](https://www.sparkfun.com/products/12796) 18 | 4. SMA Male to TNC Male [example](https://www.sparkfun.com/products/17833) 19 | 5. SMA Male to SMA Female [example](https://www.sparkfun.com/products/17495) 20 | 6. Outdoor Junction Box [example](https://www.amazon.com/dp/B000VYGMF2) 21 | 7. MicroSD Card [example](https://www.amazon.com/gp/product/B09W9XYQCQ) 22 | 23 | # Design 24 | RTCM-Pi is connected as follows: 25 | ![RTCM-Pi Wiring Diagram](wireviz/rtcmpi.png "RTCM-Pi Design") 26 | 27 | Where GPS-RTK-SMA RTCM refers to the RTCM Correction headers 28 | ![GPS-RTK-SMA RTCM](images/GPS-RTK-SMA-RTCM.png "GPS-RTK-SMA RTCM") 29 | 30 | And where GPS-RTK-SMA UART refers to the standard UART headers on the right side of the board 31 | ![GPS-RTK-SMA UART](images/GPS-RTK-SMA-UART.png "GPS-RTK-SMA UART") 32 | 33 | # Initial Configuration 34 | 35 | ## ZED-F9P 36 | You will need a Windows computer running U-Center [Getting Started Tutorial](https://learn.sparkfun.com/tutorials/getting-started-with-u-center-for-u-blox?_ga=2.72617818.894981287.1656259362-1501454225.1648055374). 37 | 38 | Download the latest ZED-F9P firmware file from either the u-Blox website or [this GitHub repo](https://github.com/sparkfun/SparkFun_RTK_Firmware/tree/main/Binaries/ZED%20Firmware/ZED-F9P). 39 | 40 | Update the F9P to the latest firmware following [this tutorial](https://learn.sparkfun.com/tutorials/how-to-upgrade-firmware-of-a-u-blox-gnss-receiver/all). 41 | 42 | Open a Configuration View Window and navigate to the MSG tab 43 | 44 | * Set RXM-RAWX messages to transmit via UART1 every 1 second. (Be sure to send the configuration message after each setting that you change) 45 | * RXM-SFRBX to UART1, 1 46 | * RTCM3.3 1005 UART2, 1 47 | * RTCM3.3 1074 UART2, 1 48 | * RTCM3.3 1084 UART2, 1 49 | * RTCM3.3 1094 UART2, 1 50 | * RTCM3.3 1124 UART2, 1 51 | * RTCM3.3 1230 UART2, 5 52 | 53 | Go to the PRT tab in the Configuration View Window 54 | * UART1 55 | * Protocol in: none 56 | * Protocol out: UBX + NMEA + RTCM3 57 | * Baudrate 57600 58 | * UART2 59 | * Protocol in: RTCM3 60 | * Protocol out: RTCM3 61 | * Baudrate 57600 62 | 63 | Go to the CFG tab in the Configuration View Window 64 | * Save current configuration to ALL 65 | 66 | ## Raspberry Pi 4 67 | Install Ubuntu Server 22.04 64bit onto the MicroSD card via Raspberry Pi Imager 68 | 69 | Edit config.text and add the following lines after ‘enable_uart=1’: 70 | dtoverlay=uart4 71 | dtoverlay=uart5 72 | 73 | NOTE: This will allow you to use: 74 | * ttyAMA2 to read RTCM data 75 | * ttyAMA1 to read RAWX data 76 | 77 | Insert the MicroSD card into the Pi and power it on 78 | 79 | SSH into device and change the password. (Temporary username and password are 'ubuntu') 80 | SSH into it again 81 | 82 | Update hostname via: 83 | `hostnamectl set-hostname [desired_hostname]` 84 | verify the name change was effective with `hostnamectl` 85 | 86 | Reboot via: 87 | `sudo reboot now` 88 | 89 | SSH in again 90 | 91 | `sudo apt update` 92 | `sudo apt upgrade` 93 | 94 | `git clone https://github.com/ALA-Engineering/RTKLIB.git` 95 | 96 | `sudo apt install build-essential -y` 97 | 98 | `cd RTKLIB/app/consapp/str2str/gcc/ && make && cd` 99 | 100 | `cd RTKLIB/app/consapp/convbin/gcc/ && make && cd` 101 | 102 | `sudo apt install python3-pip -y` 103 | 104 | `pip3 install selenium` 105 | 106 | `sudo apt install firefox` 107 | 108 | `wget https://github.com/mozilla/geckodriver/releases/download/v0.31.0/geckodriver-v0.31.0-linux64.tar.gz` 109 | 110 | `tar -xvzf geckodriver*` 111 | 112 | `chmod +x geckodriver` 113 | 114 | `sudo mv geckodriver /usr/local/bin/` 115 | 116 | `rm geckodriver-v*` 117 | 118 | `sudo apt install xvfb -y` 119 | 120 | `pip3 install pyvirtualdisplay` 121 | 122 | # Initial Survey 123 | Run an initial 24 hour survey using the following command: 124 | `timeout 24h ./RTKLIB/app/consapp/str2str/gcc/str2str -in serial://ttyAMA1:57600:8:n:1:off -out [desired_filename].ubx` 125 | 126 | After the survey completes, convert it to .obs file using: 127 | `./RTKLIB/app/consapp/convbin/gcc/convbin -od -os -oi -ot -ti 30 [desired_filename].ubx` 128 | 129 | Wait at least half an hour, but 2 weeks works best. (You can always finish setup with a 30 minute wait and update later with another PPP solution) 130 | 131 | Process .obs file with PPP solution of your choice. Below are two headless automations using Selenium that can automatically upload to the PPP provider. Please note that you will need to edit the .py file to include your information like email and password. 132 | * [OPUS-Selenium](https://github.com/jacobjhansen/OPUS-Selenium) 133 | * [CSRS-Selenium](https://github.com/jacobjhansen/CSRS-Selenium) 134 | 135 | # Final Configuration 136 | 137 | ## ZED-F9P 138 | Using U-Center, open a Configuration View Window. 139 | 140 | Navigate to the TMODE3 tab. 141 | Set Mode to '2 - Fixed Mode' 142 | Enter the ECEF coordinates you recieved from your chosen PPP provider and send the configuration message 143 | 144 | Go to the CFG tab in the Configuration View Window 145 | * Save current configuration to ALL 146 | 147 | ## Raspberry Pi 4 148 | add the following to crontab using `crontab -e`: 149 | @reboot ./RTKLIB/app/consapp/str2str/gcc/str2str -in serial://ttyAMA2:57600:8:n:1:off -out ntrips://:[base_station_password]@[ntrip_caster_ip]:[ntrip_caster_port]/[base_station_name] 150 | 151 | Now your Raspberry Pi will automatically begin sending RTCM data to your NTRIP Caster upon bootup. 152 | 153 | # Additional Comments 154 | For a ROS2 Rover implementation using a ZED-F9R, check out this [GitHub Repo](https://github.com/ALA-Engineering/ublox_f9r) 155 | -------------------------------------------------------------------------------- /images/GPS-RTK-SMA-RTCM.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jacobjhansen/RTCM-Pi/51d385b4cd704c3d2e9b88e8509980c79a30f81e/images/GPS-RTK-SMA-RTCM.png -------------------------------------------------------------------------------- /images/GPS-RTK-SMA-UART.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jacobjhansen/RTCM-Pi/51d385b4cd704c3d2e9b88e8509980c79a30f81e/images/GPS-RTK-SMA-UART.png -------------------------------------------------------------------------------- /images/GPS-RTK-SMA.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jacobjhansen/RTCM-Pi/51d385b4cd704c3d2e9b88e8509980c79a30f81e/images/GPS-RTK-SMA.png -------------------------------------------------------------------------------- /images/RTCM-Pi.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jacobjhansen/RTCM-Pi/51d385b4cd704c3d2e9b88e8509980c79a30f81e/images/RTCM-Pi.png -------------------------------------------------------------------------------- /wireviz/rtcmpi.bom.tsv: -------------------------------------------------------------------------------- 1 | Id Description Qty Unit Designators 2 | 1 Cable, 2 wires 0 m W2, W3 3 | 2 Cable, 6 wires 0 m W1 4 | 3 Connector, GPS-RTK-SMA RTCM, 6 pins 1 X2 5 | 4 Connector, GPS-RTK-SMA UART, 9 pins 1 X3 6 | 5 Connector, RFD900x-US, 16 pins 1 X4 7 | 6 Connector, Raspberry Pi 4b, 8 pins 1 X1 8 | -------------------------------------------------------------------------------- /wireviz/rtcmpi.gv: -------------------------------------------------------------------------------- 1 | graph { 2 | // Graph generated by WireViz 0.3.2 3 | // https://github.com/formatc1702/WireViz 4 | graph [bgcolor="#FFFFFF" fontname=arial nodesep=0.33 rankdir=LR ranksep=2] 5 | node [fillcolor="#FFFFFF" fontname=arial height=0 margin=0 shape=none style=filled width=0] 6 | edge [fontname=arial style=bold] 7 | X1 [label=< 8 | 9 | 14 | 20 | 56 |
10 | 11 | 12 |
X1
13 |
15 | 16 | 17 | 18 |
Raspberry Pi 4b8-pin
19 |
21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 |
1 - 3v31
4 - 5v2
6 - GND3
9 - GND4
21 - RX - UART45
24 - TX - UART46
32 - TX - UART57
33 - RX - UART58
55 |
57 | > fillcolor="#FFFFFF" shape=box style=filled] 58 | X2 [label=< 59 | 60 | 65 | 71 | 99 |
61 | 62 | 63 |
X2
64 |
66 | 67 | 68 | 69 |
GPS-RTK-SMA RTCM6-pin
70 |
72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 | 90 | 91 | 92 | 93 | 94 | 95 | 96 | 97 |
GND1
N/A2
3V33
RX24
TX25
BLANK6
98 |
100 | > fillcolor="#FFFFFF" shape=box style=filled] 101 | X3 [label=< 102 | 103 | 108 | 114 | 154 |
104 | 105 | 106 |
X3
107 |
109 | 110 | 111 | 112 |
GPS-RTK-SMA UART9-pin
113 |
115 | 116 | 117 | 118 | 119 | 120 | 121 | 122 | 123 | 124 | 125 | 126 | 127 | 128 | 129 | 130 | 131 | 132 | 133 | 134 | 135 | 136 | 137 | 138 | 139 | 140 | 141 | 142 | 143 | 144 | 145 | 146 | 147 | 148 | 149 | 150 | 151 | 152 |
1GND
25V
33V3
4TX2
5RX2
6CS
7RX
8TX
9SCK
153 |
155 | > fillcolor="#FFFFFF" shape=box style=filled] 156 | X4 [label=< 157 | 158 | 163 | 169 | 237 |
159 | 160 | 161 |
X4
162 |
164 | 165 | 166 | 167 |
RFD900x-US16-pin
168 |
170 | 171 | 172 | 173 | 174 | 175 | 176 | 177 | 178 | 179 | 180 | 181 | 182 | 183 | 184 | 185 | 186 | 187 | 188 | 189 | 190 | 191 | 192 | 193 | 194 | 195 | 196 | 197 | 198 | 199 | 200 | 201 | 202 | 203 | 204 | 205 | 206 | 207 | 208 | 209 | 210 | 211 | 212 | 213 | 214 | 215 | 216 | 217 | 218 | 219 | 220 | 221 | 222 | 223 | 224 | 225 | 226 | 227 | 228 | 229 | 230 | 231 | 232 | 233 | 234 | 235 |
1GND
2GND
3CTS
4Vcc
5Vusb
6Vusb
7RX
8P3.4
9TX
10P3.3
11RTS
12P1.3
13P1.0
14P1.2
15P1.1
16GND
236 |
238 | > fillcolor="#FFFFFF" shape=box style=filled] 239 | edge [color="#000000:#ffffff:#000000"] 240 | X1:p1r:e -- W1:w1:w 241 | W1:w1:e -- X3:p3l:w 242 | edge [color="#000000:#ffffff:#000000"] 243 | X1:p4r:e -- W1:w2:w 244 | W1:w2:e -- X3:p1l:w 245 | edge [color="#000000:#ffffff:#000000"] 246 | X1:p5r:e -- W1:w3:w 247 | W1:w3:e -- X3:p8l:w 248 | edge [color="#000000:#ffffff:#000000"] 249 | X1:p6r:e -- W1:w4:w 250 | W1:w4:e -- X3:p7l:w 251 | edge [color="#000000:#ffffff:#000000"] 252 | X1:p7r:e -- W1:w5:w 253 | W1:w5:e -- X3:p5l:w 254 | edge [color="#000000:#ffffff:#000000"] 255 | X1:p8r:e -- W1:w6:w 256 | W1:w6:e -- X3:p4l:w 257 | W1 [label=< 258 | 259 | 264 | 269 | 371 |
260 | 261 | 262 |
W1
263 |
265 | 266 | 267 |
6x
268 |
270 | 271 | 272 | 273 | 274 | 277 | 278 | 279 | 280 | 287 | 288 | 289 | 290 | 293 | 294 | 295 | 296 | 303 | 304 | 305 | 306 | 309 | 310 | 311 | 312 | 319 | 320 | 321 | 322 | 325 | 326 | 327 | 328 | 335 | 336 | 337 | 338 | 341 | 342 | 343 | 344 | 351 | 352 | 353 | 354 | 357 | 358 | 359 | 360 | 367 | 368 | 369 |
 
X1:1:1 - 3v3 275 | 1 276 | X3:3:3V3
281 | 282 | 283 | 284 | 285 |
286 |
X1:4:9 - GND 291 | 2 292 | X3:1:GND
297 | 298 | 299 | 300 | 301 |
302 |
X1:5:21 - RX - UART4 307 | 3 308 | X3:8:TX
313 | 314 | 315 | 316 | 317 |
318 |
X1:6:24 - TX - UART4 323 | 4 324 | X3:7:RX
329 | 330 | 331 | 332 | 333 |
334 |
X1:7:32 - TX - UART5 339 | 5 340 | X3:5:RX2
345 | 346 | 347 | 348 | 349 |
350 |
X1:8:33 - RX - UART5 355 | 6 356 | X3:4:TX2
361 | 362 | 363 | 364 | 365 |
366 |
 
370 |
372 | > fillcolor="#FFFFFF" shape=box style=filled] 373 | edge [color="#000000:#ffffff:#000000"] 374 | X1:p2r:e -- W2:w1:w 375 | W2:w1:e -- X4:p5l:w 376 | edge [color="#000000:#ffffff:#000000"] 377 | X1:p3r:e -- W2:w2:w 378 | W2:w2:e -- X4:p1l:w 379 | W2 [label=< 380 | 381 | 386 | 391 | 429 |
382 | 383 | 384 |
W2
385 |
387 | 388 | 389 |
2x
390 |
392 | 393 | 394 | 395 | 396 | 399 | 400 | 401 | 402 | 409 | 410 | 411 | 412 | 415 | 416 | 417 | 418 | 425 | 426 | 427 |
 
X1:2:4 - 5v 397 | 1 398 | X4:5:Vusb
403 | 404 | 405 | 406 | 407 |
408 |
X1:3:6 - GND 413 | 2 414 | X4:1:GND
419 | 420 | 421 | 422 | 423 |
424 |
 
428 |
430 | > fillcolor="#FFFFFF" shape=box style=filled] 431 | edge [color="#000000:#ffffff:#000000"] 432 | X2:p4r:e -- W3:w1:w 433 | W3:w1:e -- X4:p9l:w 434 | edge [color="#000000:#ffffff:#000000"] 435 | X2:p5r:e -- W3:w2:w 436 | W3:w2:e -- X4:p7l:w 437 | W3 [label=< 438 | 439 | 444 | 449 | 487 |
440 | 441 | 442 |
W3
443 |
445 | 446 | 447 |
2x
448 |
450 | 451 | 452 | 453 | 454 | 457 | 458 | 459 | 460 | 467 | 468 | 469 | 470 | 473 | 474 | 475 | 476 | 483 | 484 | 485 |
 
X2:4:RX2 455 | 1 456 | X4:9:TX
461 | 462 | 463 | 464 | 465 |
466 |
X2:5:TX2 471 | 2 472 | X4:7:RX
477 | 478 | 479 | 480 | 481 |
482 |
 
486 |
488 | > fillcolor="#FFFFFF" shape=box style=filled] 489 | } 490 | -------------------------------------------------------------------------------- /wireviz/rtcmpi.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | rtcmpi 6 | 7 |

rtcmpi

8 |

Diagram

9 | 10 | 12 | 13 | 15 | 16 | 17 | 18 | 19 | X1 20 | 21 | 22 | X1 23 | 24 | Raspberry Pi 4b 25 | 26 | 8-pin 27 | 28 | 1 - 3v3 29 | 30 | 1 31 | 32 | 4 - 5v 33 | 34 | 2 35 | 36 | 6 - GND 37 | 38 | 3 39 | 40 | 9 - GND 41 | 42 | 4 43 | 44 | 21 - RX - UART4 45 | 46 | 5 47 | 48 | 24 - TX - UART4 49 | 50 | 6 51 | 52 | 32 - TX - UART5 53 | 54 | 7 55 | 56 | 33 - RX - UART5 57 | 58 | 8 59 | 60 | 61 | 62 | W1 63 | 64 | 65 | W1 66 | 67 | 6x 68 |   69 | X1:1:1 - 3v3 70 |     1     71 | X3:3:3V3 72 | 73 | 74 | 75 | X1:4:9 - GND 76 |     2     77 | X3:1:GND 78 | 79 | 80 | 81 | X1:5:21 - RX - UART4 82 |     3     83 | X3:8:TX 84 | 85 | 86 | 87 | X1:6:24 - TX - UART4 88 |     4     89 | X3:7:RX 90 | 91 | 92 | 93 | X1:7:32 - TX - UART5 94 |     5     95 | X3:5:RX2 96 | 97 | 98 | 99 | X1:8:33 - RX - UART5 100 |     6     101 | X3:4:TX2 102 | 103 | 104 | 105 |   106 | 107 | 108 | 109 | X1:e--W1:w 110 | 111 | 112 | 113 | 114 | 115 | 116 | X1:e--W1:w 117 | 118 | 119 | 120 | 121 | 122 | 123 | X1:e--W1:w 124 | 125 | 126 | 127 | 128 | 129 | 130 | X1:e--W1:w 131 | 132 | 133 | 134 | 135 | 136 | 137 | X1:e--W1:w 138 | 139 | 140 | 141 | 142 | 143 | 144 | X1:e--W1:w 145 | 146 | 147 | 148 | 149 | 150 | 151 | W2 152 | 153 | 154 | W2 155 | 156 | 2x 157 |   158 | X1:2:4 - 5v 159 |     1     160 | X4:5:Vusb 161 | 162 | 163 | 164 | X1:3:6 - GND 165 |     2     166 | X4:1:GND 167 | 168 | 169 | 170 |   171 | 172 | 173 | 174 | X1:e--W2:w 175 | 176 | 177 | 178 | 179 | 180 | 181 | X1:e--W2:w 182 | 183 | 184 | 185 | 186 | 187 | 188 | X2 189 | 190 | 191 | X2 192 | 193 | GPS-RTK-SMA RTCM 194 | 195 | 6-pin 196 | 197 | GND 198 | 199 | 1 200 | 201 | N/A 202 | 203 | 2 204 | 205 | 3V3 206 | 207 | 3 208 | 209 | RX2 210 | 211 | 4 212 | 213 | TX2 214 | 215 | 5 216 | 217 | BLANK 218 | 219 | 6 220 | 221 | 222 | 223 | W3 224 | 225 | 226 | W3 227 | 228 | 2x 229 |   230 | X2:4:RX2 231 |     1     232 | X4:9:TX 233 | 234 | 235 | 236 | X2:5:TX2 237 |     2     238 | X4:7:RX 239 | 240 | 241 | 242 |   243 | 244 | 245 | 246 | X2:e--W3:w 247 | 248 | 249 | 250 | 251 | 252 | 253 | X2:e--W3:w 254 | 255 | 256 | 257 | 258 | 259 | 260 | X3 261 | 262 | 263 | X3 264 | 265 | GPS-RTK-SMA UART 266 | 267 | 9-pin 268 | 269 | 1 270 | 271 | GND 272 | 273 | 2 274 | 275 | 5V 276 | 277 | 3 278 | 279 | 3V3 280 | 281 | 4 282 | 283 | TX2 284 | 285 | 5 286 | 287 | RX2 288 | 289 | 6 290 | 291 | CS 292 | 293 | 7 294 | 295 | RX 296 | 297 | 8 298 | 299 | TX 300 | 301 | 9 302 | 303 | SCK 304 | 305 | 306 | 307 | X4 308 | 309 | 310 | X4 311 | 312 | RFD900x-US 313 | 314 | 16-pin 315 | 316 | 1 317 | 318 | GND 319 | 320 | 2 321 | 322 | GND 323 | 324 | 3 325 | 326 | CTS 327 | 328 | 4 329 | 330 | Vcc 331 | 332 | 5 333 | 334 | Vusb 335 | 336 | 6 337 | 338 | Vusb 339 | 340 | 7 341 | 342 | RX 343 | 344 | 8 345 | 346 | P3.4 347 | 348 | 9 349 | 350 | TX 351 | 352 | 10 353 | 354 | P3.3 355 | 356 | 11 357 | 358 | RTS 359 | 360 | 12 361 | 362 | P1.3 363 | 364 | 13 365 | 366 | P1.0 367 | 368 | 14 369 | 370 | P1.2 371 | 372 | 15 373 | 374 | P1.1 375 | 376 | 16 377 | 378 | GND 379 | 380 | 381 | 382 | W1:e--X3:w 383 | 384 | 385 | 386 | 387 | 388 | 389 | W1:e--X3:w 390 | 391 | 392 | 393 | 394 | 395 | 396 | W1:e--X3:w 397 | 398 | 399 | 400 | 401 | 402 | 403 | W1:e--X3:w 404 | 405 | 406 | 407 | 408 | 409 | 410 | W1:e--X3:w 411 | 412 | 413 | 414 | 415 | 416 | 417 | W1:e--X3:w 418 | 419 | 420 | 421 | 422 | 423 | 424 | W2:e--X4:w 425 | 426 | 427 | 428 | 429 | 430 | 431 | W2:e--X4:w 432 | 433 | 434 | 435 | 436 | 437 | 438 | W3:e--X4:w 439 | 440 | 441 | 442 | 443 | 444 | 445 | W3:e--X4:w 446 | 447 | 448 | 449 | 450 | 451 | 452 |

Bill of Materials

453 | 454 | 455 | 456 | 457 | 458 | 459 | 460 | 461 | 462 | 463 | 464 | 465 | 466 | 467 | 468 | 469 | 470 | 471 | 472 | 473 | 474 | 475 | 476 | 477 | 478 | 479 | 480 | 481 | 482 | 483 | 484 | 485 | 486 | 487 | 488 | 489 | 490 | 491 | 492 | 493 | 494 | 495 | 496 | 497 | 498 | 499 | 500 | 501 | 502 | 503 |
IdDescriptionQtyUnitDesignators
1Cable, 2 wires0mW2, W3
2Cable, 6 wires0mW1
3Connector, GPS-RTK-SMA RTCM, 6 pins1X2
4Connector, GPS-RTK-SMA UART, 9 pins1X3
5Connector, RFD900x-US, 16 pins1X4
6Connector, Raspberry Pi 4b, 8 pins1X1
504 | 505 | -------------------------------------------------------------------------------- /wireviz/rtcmpi.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jacobjhansen/RTCM-Pi/51d385b4cd704c3d2e9b88e8509980c79a30f81e/wireviz/rtcmpi.png -------------------------------------------------------------------------------- /wireviz/rtcmpi.svg: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 9 | 10 | 11 | 12 | 13 | X1 14 | 15 | 16 | X1 17 | 18 | Raspberry Pi 4b 19 | 20 | 8-pin 21 | 22 | 1 - 3v3 23 | 24 | 1 25 | 26 | 4 - 5v 27 | 28 | 2 29 | 30 | 6 - GND 31 | 32 | 3 33 | 34 | 9 - GND 35 | 36 | 4 37 | 38 | 21 - RX - UART4 39 | 40 | 5 41 | 42 | 24 - TX - UART4 43 | 44 | 6 45 | 46 | 32 - TX - UART5 47 | 48 | 7 49 | 50 | 33 - RX - UART5 51 | 52 | 8 53 | 54 | 55 | 56 | W1 57 | 58 | 59 | W1 60 | 61 | 6x 62 |   63 | X1:1:1 - 3v3 64 |     1     65 | X3:3:3V3 66 | 67 | 68 | 69 | X1:4:9 - GND 70 |     2     71 | X3:1:GND 72 | 73 | 74 | 75 | X1:5:21 - RX - UART4 76 |     3     77 | X3:8:TX 78 | 79 | 80 | 81 | X1:6:24 - TX - UART4 82 |     4     83 | X3:7:RX 84 | 85 | 86 | 87 | X1:7:32 - TX - UART5 88 |     5     89 | X3:5:RX2 90 | 91 | 92 | 93 | X1:8:33 - RX - UART5 94 |     6     95 | X3:4:TX2 96 | 97 | 98 | 99 |   100 | 101 | 102 | 103 | X1:e--W1:w 104 | 105 | 106 | 107 | 108 | 109 | 110 | X1:e--W1:w 111 | 112 | 113 | 114 | 115 | 116 | 117 | X1:e--W1:w 118 | 119 | 120 | 121 | 122 | 123 | 124 | X1:e--W1:w 125 | 126 | 127 | 128 | 129 | 130 | 131 | X1:e--W1:w 132 | 133 | 134 | 135 | 136 | 137 | 138 | X1:e--W1:w 139 | 140 | 141 | 142 | 143 | 144 | 145 | W2 146 | 147 | 148 | W2 149 | 150 | 2x 151 |   152 | X1:2:4 - 5v 153 |     1     154 | X4:5:Vusb 155 | 156 | 157 | 158 | X1:3:6 - GND 159 |     2     160 | X4:1:GND 161 | 162 | 163 | 164 |   165 | 166 | 167 | 168 | X1:e--W2:w 169 | 170 | 171 | 172 | 173 | 174 | 175 | X1:e--W2:w 176 | 177 | 178 | 179 | 180 | 181 | 182 | X2 183 | 184 | 185 | X2 186 | 187 | GPS-RTK-SMA RTCM 188 | 189 | 6-pin 190 | 191 | GND 192 | 193 | 1 194 | 195 | N/A 196 | 197 | 2 198 | 199 | 3V3 200 | 201 | 3 202 | 203 | RX2 204 | 205 | 4 206 | 207 | TX2 208 | 209 | 5 210 | 211 | BLANK 212 | 213 | 6 214 | 215 | 216 | 217 | W3 218 | 219 | 220 | W3 221 | 222 | 2x 223 |   224 | X2:4:RX2 225 |     1     226 | X4:9:TX 227 | 228 | 229 | 230 | X2:5:TX2 231 |     2     232 | X4:7:RX 233 | 234 | 235 | 236 |   237 | 238 | 239 | 240 | X2:e--W3:w 241 | 242 | 243 | 244 | 245 | 246 | 247 | X2:e--W3:w 248 | 249 | 250 | 251 | 252 | 253 | 254 | X3 255 | 256 | 257 | X3 258 | 259 | GPS-RTK-SMA UART 260 | 261 | 9-pin 262 | 263 | 1 264 | 265 | GND 266 | 267 | 2 268 | 269 | 5V 270 | 271 | 3 272 | 273 | 3V3 274 | 275 | 4 276 | 277 | TX2 278 | 279 | 5 280 | 281 | RX2 282 | 283 | 6 284 | 285 | CS 286 | 287 | 7 288 | 289 | RX 290 | 291 | 8 292 | 293 | TX 294 | 295 | 9 296 | 297 | SCK 298 | 299 | 300 | 301 | X4 302 | 303 | 304 | X4 305 | 306 | RFD900x-US 307 | 308 | 16-pin 309 | 310 | 1 311 | 312 | GND 313 | 314 | 2 315 | 316 | GND 317 | 318 | 3 319 | 320 | CTS 321 | 322 | 4 323 | 324 | Vcc 325 | 326 | 5 327 | 328 | Vusb 329 | 330 | 6 331 | 332 | Vusb 333 | 334 | 7 335 | 336 | RX 337 | 338 | 8 339 | 340 | P3.4 341 | 342 | 9 343 | 344 | TX 345 | 346 | 10 347 | 348 | P3.3 349 | 350 | 11 351 | 352 | RTS 353 | 354 | 12 355 | 356 | P1.3 357 | 358 | 13 359 | 360 | P1.0 361 | 362 | 14 363 | 364 | P1.2 365 | 366 | 15 367 | 368 | P1.1 369 | 370 | 16 371 | 372 | GND 373 | 374 | 375 | 376 | W1:e--X3:w 377 | 378 | 379 | 380 | 381 | 382 | 383 | W1:e--X3:w 384 | 385 | 386 | 387 | 388 | 389 | 390 | W1:e--X3:w 391 | 392 | 393 | 394 | 395 | 396 | 397 | W1:e--X3:w 398 | 399 | 400 | 401 | 402 | 403 | 404 | W1:e--X3:w 405 | 406 | 407 | 408 | 409 | 410 | 411 | W1:e--X3:w 412 | 413 | 414 | 415 | 416 | 417 | 418 | W2:e--X4:w 419 | 420 | 421 | 422 | 423 | 424 | 425 | W2:e--X4:w 426 | 427 | 428 | 429 | 430 | 431 | 432 | W3:e--X4:w 433 | 434 | 435 | 436 | 437 | 438 | 439 | W3:e--X4:w 440 | 441 | 442 | 443 | 444 | 445 | 446 | -------------------------------------------------------------------------------- /wireviz/rtcmpi.yml: -------------------------------------------------------------------------------- 1 | connectors: 2 | X1: 3 | type: Raspberry Pi 4b 4 | pinlabels: [1 - 3v3, 4 - 5v, 6 - GND, 9 - GND, 21 - RX - UART4, 24 - TX - UART4, 32 - TX - UART5, 33 - RX - UART5] 5 | X2: 6 | type: GPS-RTK-SMA RTCM 7 | pinlabels: [GND, N/A, 3V3, RX2, TX2, BLANK] 8 | X3: 9 | type: GPS-RTK-SMA UART 10 | pinlabels: [GND, 5V, 3V3, TX2, RX2, CS, RX, TX, SCK] 11 | X4: 12 | type: RFD900x-US 13 | pinlabels: [GND, GND, CTS, Vcc, Vusb, Vusb, RX, P3.4, TX, P3.3, RTS, P1.3, P1.0, P1.2, P1.1, GND] 14 | 15 | 16 | cables: 17 | W1: 18 | wirecount: 6 19 | 20 | W2: 21 | wirecount: 2 22 | 23 | W3: 24 | wirecount: 2 25 | 26 | connections: 27 | - 28 | - X1: [1,4,5,6,7,8] 29 | - W1: [1,2,3,4,5,6] 30 | - X3: [3,1,8,7,5,4] 31 | - 32 | - X1: [2,3] 33 | - W2: [1,2] 34 | - X4: [5,1] 35 | - 36 | - X2: [4,5] 37 | - W3: [1,2] 38 | - X4: [9,7] 39 | --------------------------------------------------------------------------------