├── .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 | 
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 | 
26 |
27 | Where GPS-RTK-SMA RTCM refers to the RTCM Correction headers
28 | 
29 |
30 | And where GPS-RTK-SMA UART refers to the standard UART headers on the right side of the board
31 | 
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 |
10 |
13 | |
14 |
15 |
16 | Raspberry Pi 4b |
17 | 8-pin |
18 |
19 | |
20 |
21 |
22 |
23 | 1 - 3v3 |
24 | 1 |
25 |
26 |
27 | 4 - 5v |
28 | 2 |
29 |
30 |
31 | 6 - GND |
32 | 3 |
33 |
34 |
35 | 9 - GND |
36 | 4 |
37 |
38 |
39 | 21 - RX - UART4 |
40 | 5 |
41 |
42 |
43 | 24 - TX - UART4 |
44 | 6 |
45 |
46 |
47 | 32 - TX - UART5 |
48 | 7 |
49 |
50 |
51 | 33 - RX - UART5 |
52 | 8 |
53 |
54 |
55 | |
56 |
57 | > fillcolor="#FFFFFF" shape=box style=filled]
58 | X2 [label=<
59 |
60 |
61 |
64 | |
65 |
66 |
67 | GPS-RTK-SMA RTCM |
68 | 6-pin |
69 |
70 | |
71 |
72 |
73 |
74 | GND |
75 | 1 |
76 |
77 |
78 | N/A |
79 | 2 |
80 |
81 |
82 | 3V3 |
83 | 3 |
84 |
85 |
86 | RX2 |
87 | 4 |
88 |
89 |
90 | TX2 |
91 | 5 |
92 |
93 |
94 | BLANK |
95 | 6 |
96 |
97 |
98 | |
99 |
100 | > fillcolor="#FFFFFF" shape=box style=filled]
101 | X3 [label=<
102 |
103 |
104 |
107 | |
108 |
109 |
110 | GPS-RTK-SMA UART |
111 | 9-pin |
112 |
113 | |
114 |
115 |
116 |
117 | 1 |
118 | GND |
119 |
120 |
121 | 2 |
122 | 5V |
123 |
124 |
125 | 3 |
126 | 3V3 |
127 |
128 |
129 | 4 |
130 | TX2 |
131 |
132 |
133 | 5 |
134 | RX2 |
135 |
136 |
137 | 6 |
138 | CS |
139 |
140 |
141 | 7 |
142 | RX |
143 |
144 |
145 | 8 |
146 | TX |
147 |
148 |
149 | 9 |
150 | SCK |
151 |
152 |
153 | |
154 |
155 | > fillcolor="#FFFFFF" shape=box style=filled]
156 | X4 [label=<
157 |
158 |
159 |
162 | |
163 |
164 |
165 | RFD900x-US |
166 | 16-pin |
167 |
168 | |
169 |
170 |
171 |
172 | 1 |
173 | GND |
174 |
175 |
176 | 2 |
177 | GND |
178 |
179 |
180 | 3 |
181 | CTS |
182 |
183 |
184 | 4 |
185 | Vcc |
186 |
187 |
188 | 5 |
189 | Vusb |
190 |
191 |
192 | 6 |
193 | Vusb |
194 |
195 |
196 | 7 |
197 | RX |
198 |
199 |
200 | 8 |
201 | P3.4 |
202 |
203 |
204 | 9 |
205 | TX |
206 |
207 |
208 | 10 |
209 | P3.3 |
210 |
211 |
212 | 11 |
213 | RTS |
214 |
215 |
216 | 12 |
217 | P1.3 |
218 |
219 |
220 | 13 |
221 | P1.0 |
222 |
223 |
224 | 14 |
225 | P1.2 |
226 |
227 |
228 | 15 |
229 | P1.1 |
230 |
231 |
232 | 16 |
233 | GND |
234 |
235 |
236 | |
237 |
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 |
260 |
263 | |
264 |
265 |
268 | |
269 |
270 |
271 | |
272 |
273 | X1:1:1 - 3v3 |
274 |
275 | 1
276 | |
277 | X3:3:3V3 |
278 |
279 |
280 |
281 |
286 | |
287 |
288 |
289 | X1:4:9 - GND |
290 |
291 | 2
292 | |
293 | X3:1:GND |
294 |
295 |
296 |
297 |
302 | |
303 |
304 |
305 | X1:5:21 - RX - UART4 |
306 |
307 | 3
308 | |
309 | X3:8:TX |
310 |
311 |
312 |
313 |
318 | |
319 |
320 |
321 | X1:6:24 - TX - UART4 |
322 |
323 | 4
324 | |
325 | X3:7:RX |
326 |
327 |
328 |
329 |
334 | |
335 |
336 |
337 | X1:7:32 - TX - UART5 |
338 |
339 | 5
340 | |
341 | X3:5:RX2 |
342 |
343 |
344 |
345 |
350 | |
351 |
352 |
353 | X1:8:33 - RX - UART5 |
354 |
355 | 6
356 | |
357 | X3:4:TX2 |
358 |
359 |
360 |
361 |
366 | |
367 |
368 | |
369 |
370 | |
371 |
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 |
382 |
385 | |
386 |
387 |
390 | |
391 |
392 |
393 | |
394 |
395 | X1:2:4 - 5v |
396 |
397 | 1
398 | |
399 | X4:5:Vusb |
400 |
401 |
402 |
403 |
408 | |
409 |
410 |
411 | X1:3:6 - GND |
412 |
413 | 2
414 | |
415 | X4:1:GND |
416 |
417 |
418 |
419 |
424 | |
425 |
426 | |
427 |
428 | |
429 |
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 |
440 |
443 | |
444 |
445 |
448 | |
449 |
450 |
451 | |
452 |
453 | X2:4:RX2 |
454 |
455 | 1
456 | |
457 | X4:9:TX |
458 |
459 |
460 |
461 |
466 | |
467 |
468 |
469 | X2:5:TX2 |
470 |
471 | 2
472 | |
473 | X4:7:RX |
474 |
475 |
476 |
477 |
482 | |
483 |
484 | |
485 |
486 | |
487 |
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 |
452 | Bill of Materials
453 |
454 |
455 | Id |
456 | Description |
457 | Qty |
458 | Unit |
459 | Designators |
460 |
461 |
462 | 1 |
463 | Cable, 2 wires |
464 | 0 |
465 | m |
466 | W2, W3 |
467 |
468 |
469 | 2 |
470 | Cable, 6 wires |
471 | 0 |
472 | m |
473 | W1 |
474 |
475 |
476 | 3 |
477 | Connector, GPS-RTK-SMA RTCM, 6 pins |
478 | 1 |
479 | |
480 | X2 |
481 |
482 |
483 | 4 |
484 | Connector, GPS-RTK-SMA UART, 9 pins |
485 | 1 |
486 | |
487 | X3 |
488 |
489 |
490 | 5 |
491 | Connector, RFD900x-US, 16 pins |
492 | 1 |
493 | |
494 | X4 |
495 |
496 |
497 | 6 |
498 | Connector, Raspberry Pi 4b, 8 pins |
499 | 1 |
500 | |
501 | X1 |
502 |
503 |
504 |
505 |
--------------------------------------------------------------------------------
/wireviz/rtcmpi.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/jacobjhansen/RTCM-Pi/51d385b4cd704c3d2e9b88e8509980c79a30f81e/wireviz/rtcmpi.png
--------------------------------------------------------------------------------
/wireviz/rtcmpi.svg:
--------------------------------------------------------------------------------
1 |
2 |
4 |
6 |
7 |
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 |
--------------------------------------------------------------------------------