Skip to main content

PyGPSClient GNSS/GPS Graphical Client

Reason this release was yanked:

obsolete

Project description

PyGPSClient

Current Status | Features | UBX Configuration | NTRIP Client | How to Use | Installation | Known Issues | Mapquest API Key | User-defined Presets | Glossary of Terms | License | Author Information

PyGPSClient is a graphical GNSS/GPS testing, diagnostic and UBX © (u-blox ™) device configuration application written entirely in Python and tkinter.

full app screenshot ubx

The application runs on any platform which supports a Python3 interpreter (>=3.7) and tkinter (>=8.6) GUI framework, including Windows, MacOS, Linux and Raspberry Pi OS. It displays location and diagnostic data from any NMEA, UBX or RTCM3 compatible GNSS/GPS device over a standard serial (UART) or USB port, or from a previously-saved datalog file, in addition to providing a useful subset of the UBX configuration functionality in u-blox's Windows-only u-center © tool.

This is an independent project and we have no affiliation whatsoever with u-blox.


Current Status

Status Release Build Release Date Last Commit Contributors Open Issues

Sphinx API Documentation in HTML format is available at https://www.semuconsulting.com/pygpsclient.

Contributions welcome - please refer to CONTRIBUTING.MD.

Bug reports and Feature requests - please use the templates provided.


Features

  1. Supports NMEA, UBX and RTCM3 protocols. It uses the pynmeagps library for NMEA parsing, the pyubx2 library for UBX parsing and the pyrtcm library for RTCM3 parsing.
  2. Capable of reading from serial/USB port or previously-saved binary datalog file.
  3. Configurable GUI with selectable and resizeable widgets.
  4. Expandable banner widget showing key navigation information.
  5. Serial console widget showing data stream in either parsed, binary or hexadecimal format.
  6. Skyview widget showing current satellite visibility and position (elevation / azimuth). Satellite icon borders are colour-coded to distinguish between different GNSS constellations.
  7. Graphview widget showing current satellite reception (signal-to-noise ratio).
  8. Mapview widget with location marker, showing either a static Mercator world map, or an optional dynamic web-based map downloaded via a MapQuest API (requires an Internet connection and free MapQuest API Key).
  9. Data logging in parsed, binary, hexadecimal string and tabulated hexadecimal formats (NB. only binary datalogs can be re-read by pygpsclient's parser).
  10. Track recording in GPX format.
  11. UBX Configuration Dialog, with the ability to send a variety of UBX configuration commands to u-blox GNSS devices. This includes the facility to add user-defined commands or command sequences - see instructions under installation below.
  12. BETA FEATURE NTRIP Client facility with the ability to connect to a specified NTRIP server (caster), parse the incoming RTCM3 data and feed this data to a compatible GNSS device (requires an Internet connection and access to a suitable NTRIP caster).

compact view screenshot


UBX Configuration Facilities

ubxconfig widget screenshot

The UBX Configuration Dialog currently supports the following UBX configuration 'widgets':

  1. Shows current device hardware/firmware versions via MON-VER and MON-HW polls. Clicking anywhere in the widget background will refresh the displayed information with the current configuration.
  2. CFG-PRT sets baud rate and inbound/outbound protocols across all available ports.
  3. CFG-RATE sets navigation solution interval in ms (e.g. 1000 = 1/second) and measurement ratio (ratio between the number of measurements and the number of navigation solutions, e.g. 5 = five measurements per navigation solution).
  4. CFG-MSG sets message rates per port for UBX and NMEA messages. Message rate is relative to navigation solution frequency e.g. a message rate of '4' means 'every 4th navigation solution'.
  5. CFG-VALSET, CFG-VALDEL and CFG-VALGET configuration (for Generation 9+ devices).
  6. PRESET commands support a variety of preset and user-defined commands - see user defined presets

An icon to the right of each 'SEND' send icon button indicates the confirmation status of the configuration command; (pending i.e. awaiting confirmation pending icon, confirmed confirmed icon or warning warning icon).

Note:

  • Confirmation responses can take several seconds at high message transmission rates, or be discarded altogether if the device's transmit buffer is full (txbuff-alloc error - not uncommon with budget receivers at high message rates). To ensure timely confirmation responses, try increasing the baud rate and/or temporarily reducing transmitted message rates using the configuration commands provided.
  • A warning icon (typically accompanied by an ACK-NAK response) is usually an indication that one or more of the commands sent is not supported by your receiver.

NTRIP Client Facilities

BETA FEATURE

ntrip config widget screenshot

The NTRIP Client facility supports the following functionality:

  1. Connect to specified NTRIP server (caster), port and mountpoint (requires Internet connection and appropriate user credentials).
  2. Retrieve the sourcetable for a specified NTRIP server.
  3. Parse incoming RTCM3 messages and display on console with NTRIP>> marker.
  4. Feed raw RTCM3 messages to an RTCM3-compatible connected GNSS device and monitor UBX-RXM-RTCM responses.
  5. Send NMEA GGA (position fix) sentences to the NTRIP server at specified intervals and display on console with NTRIP<< marker>.

To use:

  1. Enter the required NTRIP server URL (or IP address) and port (defaults to 2101). For services which require authorisation, enter your login username and password.
  2. To retrieve the sourcetable, leave the mountpoint field blank and click connect (response may take a few seconds). The required mountpoint may then be selected from the list, or entered manually.
  3. Select the appropriate NMEA GGA sentence transmission interval in seconds (only available when a GNSS receiver is connected). The default is 'None' (no GGA sentences sent). A value of 10 seconds is typical for services that require client position data. NB: The GGA sentence will be generated based on the current position fix from the GNSS receiver.
  4. To start the NTRIP data stream using the current server settings, click connect icon.
  5. To stop the NTRIP data stream, click disconnect icon.
  6. Some NTRIP services may output a high volume of RTCM3 correction messages, causing the GUI to perform more slowly. To suppress these messages in the console, de-select the 'RTCM' option in 'Protocols Displayed' (the RTCM3 messages will continue to be processed in the background).

Below is a representative NTRIP data log, showing:

  • outgoing NMEA GPGGA (client position) sentence.
  • incoming RTCM3 correction messages - 1005 (Ref Station ARP), 1074 (GPS MSM4), 1084 (GLONASS MSM4), 1094 (Galileo MSM4) and 1124 (Beidou MSM4).
  • corresponding UBX RXM-RTCM acknowledgements generated by the u-blox GNSS receiver.
  • NMEA GNTXT information message indicating that the selected NTRIP basestation is some distance from the client.

ntrip console screenshot

NB: Please respect the terms and conditions of any remote NTRIP service used with this facility. For testing or evaluation purposes, consider deploying a local SNIP LITE server. Inappropriate use of an NTRIP service may result in your account being blocked.


How to Use

  • To connect to a listed serial device, select the device from the listbox, set the appropriate serial connection parameters and click connect icon. The application will endeavour to pre-select a recognised GNSS/GPS device but this is platform and device dependent. Press the refresh button to refresh the list of connected devices at any point. Rate bps is typically the only setting that might need adjusting, but tweaking the timeout setting may improve performance on certain platforms.
  • To stream from a previously-saved binary datalog file (pygpsdata-*.log, or any binary dump of an NMEA or UBX GNSS device output), click connect-file icon and select the file.
  • To disconnect from a serial device or datalog file, click disconnect icon.
  • To display the UBX Configuration Dialog (only available when connected to a UBX serial device), click gear icon, or go to Menu..Options.
  • To display the NTRIP Client Configuration Dialog (requires internet connection), click gear icon, or go to Menu..Options.
  • To expand or collapse the banner or serial port configuration widgets, click the expand icon/expand icon buttons.
  • To show or hide the various widgets, go to Menu..View and click on the relevant hide/show option.
  • Protocols Displayed - Select which protocols to display; NMEA, UBX and/or RTCM3 (NB: this only changes the displayed protocols - to change the actual protocols output by the receiver, use the CFG-PRT command).
  • Console Display - Select from parsed, binary or hexadecimal formats.
  • Degrees Format and Units - Change the displayed degree and unit formats.
  • Zoom - Change the web map scale (any change will take effect at the next map refresh, indicated by a small timer icon at the top left of the panel).
  • Show Legend - Turn the graph legend on or off.
  • Show Unused Satellites - Include or exclude satellites that are not used in the navigation solution (e.g. because their signal level is too low) in the graph and sky view panels.
  • Enable Data Logging - Turn Data logging in the selected format on or off. You will be prompted to select the directory into which timestamped log files are saved (NB. only binary datalogs can be re-read by pygpsclient's parser).
  • Record Track - Turn track recording (in GPX format) on or off. You will be prompted to select the directory into which timestamped track files are saved.
  • Widgets (and their associated fonts) are fully resizeable.

Installation

In the following, python & pip refer to the Python 3 executables. You may need to type python3 or pip3, depending on your particular environment. It is also recommended that the Python 3 scripts (bin) and site_packages directories are included in your PATH (most standard Python 3 installation packages will do this automatically).

Dependencies

On Windows and MacOS, pip, tkinter and the necessary imaging libraries are generally packaged with Python 3. On some Linux distributions like Ubuntu 18+ and Raspberry Pi OS, they may need to be installed separately, e.g.:

sudo apt install python3-pip python3-tk python3-pil python3-pil.imagetk

NB: If you're compiling the latest version of Python 3 from source, you may also need to install tk-devel (or a similarly named package) first. Refer to http://wiki.python.org/moin/TkInter for further details.

sudo apt install tk-devel

User Privileges

To access the serial port on most Linux platforms, you will need to be a member of the tty and/or dialout groups. Other than this, no special privileges are required.

1. Install using pip

Python version PyPI version PyPI downloads

The easiest way to install the latest version of PyGPSClient is with pip:

python -m pip install --upgrade PyGPSClient

If required, PyGPSClient can also be installed into a virtual environment, e.g.:

python -m pip install --user --upgrade virtualenv
python -m virtualenv env
source env/bin/activate (or env\Scripts\activate on Windows)
(env) python -m pip install --upgrade PyGPSClient
...
deactivate

To run the application, if the Python 3 scripts (bin) directory is in your PATH, simply type (all lowercase):

pygpsclient

If desired, you can add a shortcut to this command to your desktop or favourites menu.

Alternatively, if the Python 3 site_packages are in your PATH, you can type (all lowercase):

python -m pygpsclient

NB: If the Python 3 scripts (bin) or site_packages directories are not in your PATH, you will need to add the fully-qualified path to pygpsclient in the commands above.

Tip: to find the site_packages location, type:

python -m pip show PyGPSClient

and look for the Location: entry in the response, e.g.

  • Linux: Location: /home/username/.local/lib/python3.9/site-packages
  • MacOS: Location: /Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/site-packages
  • Windows: Location: c:\users\username\appdata\roaming\python\python39\lib\site-packages

Tip: To create an application launcher for linux distributions like Ubuntu, create a text file named pygpsclient.desktop with the following content (edited for your particular environment) and copy this to the /home/user/.local/share/applications folder, e.g.

[Desktop Entry]
Type=Application
Terminal=false
Name=PyGPSClient
Icon=/home/user/.local/lib/python3.9/site-packages/pygpsclient/resources/pygpsclient.ico
Exec=/home/user/.local/bin/pygpsclient

2. Manual installation

See requirements.txt.

The following Python libraries are required (these will be installed automatically if using pip to install PyGPSClient):

python -m pip install --upgrade pyubx2 pynmeagps pyrtcm pyserial Pillow requests

To install PyGPSClient manually, download and unzip this repository and run:

python -m /path_to_folder/foldername/pygpsclient

e.g. if you downloaded and unzipped to a folder named PyGPSClient-1.1.9, run:

python -m /path_to_folder/PyGPSClient-1.1.9/pygpsclient

Known Issues

As of April 2022 there appear to be some performance issues with the version of tkinter embedded with Python >=3.9 on MacOS Monterey, particularly in respect of tkinter update() (screen refresh) operations. See for example [tkinter slower on MacOS](https://bugs.python.org/issue43511.

Windows and Linux (including Raspbian) users are unaffected.

The application is fully functional on MacOS Monterey but you may find screen refresh/resizing operations are relatively slow, particularly on newer Apple M1 platforms (e.g. some dialogs may require resizing when first opened). This will hopefully be resolved in a subsequent MacOS update, but in the meantime some performance improvements can be achieved by reducing the number of operations which involve iterative tkinter update() operations:

  1. Reduce number of color TAGS in globals.py, or set TAG_COLORS = False.
  2. Reduce incoming message rates; particularly the frequency of messages which update the satellite or graph views (e.g. NMEA GSV, UBX NAV-SAT).
  3. Try closing and re-opening pop-up dialogs.

MapQuest API Key

To use the optional dynamic web-based mapview facility, you need to request and install a MapQuest API key. The free edition of this API allows for up to 15,000 transactions/month (roughly 500/day) on a non-commercial basis. For this reason, the map refresh rate is intentionally limited to 1/minute* to avoid exceeding the free transaction limit under normal use. NB: this facility is not intended to be used for real time navigational purposes.

Once you have received the API key (a 32-character alphanumeric string), you can either:

  1. create an environment variable named MQAPIKEY (all upper case) and set this to the API key value. It is recommended that this is a User variable rather than a System/Global variable.
  2. copy it to a file named mqapikey (lower case, no extension) and place this file in the user's home directory.

*The web map refresh rate can be amended if required by changing the MAP_UPDATE_INTERVAL constant in globals.py.


User Defined Presets

The UBX Configuration Dialog includes the facility to send user-defined UBX configuration messages or message sequences to the receiver. These can be set up by adding appropriate comma-delimited message descriptions and payload definitions to a file named ubxpresets (lower case, no extension), and then placing this file in the user's home directory. The message definition comprises a free-format text description (avoid embedded commas) followed by one or more pyubx2 UBXMessage constructors, i.e.

  1. message class as a string e.g. CFG (must be a valid class from pyubx2.UBX_CLASSES)
  2. message id as a string e.g. CFG-MSG (must be a valid id from pyubx2.UBX_MSGIDS)
  3. payload as a hexadecimal string e.g. f004010100010100 (leave blank for null payloads e.g. most POLL messages)
  4. mode as an integer (1 = SET, 2 = POLL)

(payload as hex string can be obtained from a UBXMessage created using the pyubx2 library thus: msg.payload.hex())

Multiple commands can be concatenated on a single line. Illustrative examples are shown below:

Stop GNSS, CFG, CFG-RST, 00000800, 1
Start GNSS, CFG, CFG-RST, 00000900, 1
Enable NMEA UBX00 & UBX03 sentences, CFG, CFG-MSG, f100010100010100, 1, CFG, CFG-MSG, f103010100010100, 1
Poll NEO-9 UART1/2 baud rates, CFG, CFG-VALGET, 000000000100524001005340, 2
Poll NEO-9 Message Rates, CFG, CFG-VALGET, 00000000ffff9120, 2, CFG, CFG-VALGET, 00004000ffff9120, 2, CFG, CFG-VALGET, 00008000ffff9120, 2
Set ZED-F9P to Base Station Survey-In Mode (1m accuracy), CFG, CFG-VALSET, 000100008b00912001c002912001cf02912001d4029120011b03912001d902912001060391200111000340e8030000100003405a0000000100032001, 1
Set ZED-F9P to Base Station Survey-In Mode (1cm accuracy), CFG, CFG-VALSET, 000100008b00912001c002912001cf02912001d4029120011b03912001d9029120010603912001110003400a000000100003405a0000000100032001, 1
Poll Receiver Software Version, MON, MON-VER, , 2
Poll Datum, CFG, CFG-DAT, , 2
Poll GNSS config, CFG, CFG-GNSS, , 2
Poll NMEA config, CFG, CFG-NMEA, , 2
Poll Satellite-based Augmentation, CFG, CFG-SBAS, , 2
Poll Receiver Management, CFG, CFG-RXM, , 2
Poll Navigation Mode, CFG, CFG-NAV5, , 2
Poll Expert Navigation mode, CFG, CFG-NAVX5, , 2
Poll Geofencing, CFG, CFG-GEOFENCE, , 2
Limit NMEA GNSS to GPS only, CFG, CFG-NMEA, 0040000276000000000000010000000000000000, 1
Limit NMEA GNSS to GLONASS only, CFG, CFG-NMEA, 0040000257000000000000010000000000000000, 1
Set NMEA GNSS to ALL, CFG, CFG-NMEA, 0040000200000000000000010000000000000000, 1
Limit UBX GNSS to GPS only, CFG, CFG-GNSS, 0020200700081000010001010101030000000101020408000000010103081000000001010400080000000103050003000000010506080E0000000101, 1
Limit UBX GNSS to GLONASS only, CFG, CFG-GNSS, 0020200700081000000001010101030000000101020408000000010103081000000001010400080000000103050003000000010506080E0001000101, 1
Set UBX GNSS to ALL, CFG, CFG-GNSS, 0020200700081000010001010101030001000101020408000000010103081000000001010400080000000103050003000100010506080E0001000101, 1
FORCE COLD RESTART !*** Expect ClearCommError ***!, CFG, CFG-RST, ffff0100, 1

Glossary of Terms


License

License

BSD 3-Clause License

Copyright © 2020, SEMU Consulting All rights reserved.

Application icons from iconmonstr ©.


Author Information

semuadmin@semuconsulting.com

PyGPSClient is maintained entirely by volunteers. If you find it useful, a small donation would be greatly appreciated!

Donations

Project details


Release history Release notifications | RSS feed

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

PyGPSClient-1.1.9.tar.gz (417.9 kB view details)

Uploaded Source

Built Distribution

PyGPSClient-1.1.9-py3-none-any.whl (431.1 kB view details)

Uploaded Python 3

File details

Details for the file PyGPSClient-1.1.9.tar.gz.

File metadata

  • Download URL: PyGPSClient-1.1.9.tar.gz
  • Upload date:
  • Size: 417.9 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.8.0 pkginfo/1.8.2 readme-renderer/32.0 requests/2.27.1 requests-toolbelt/0.9.1 urllib3/1.26.9 tqdm/4.62.3 importlib-metadata/4.11.0 keyring/23.5.0 rfc3986/2.0.0 colorama/0.4.4 CPython/3.10.4

File hashes

Hashes for PyGPSClient-1.1.9.tar.gz
Algorithm Hash digest
SHA256 466ef13418d8bdf7b880d147d9067d2192c8fa4a27c225aac66f6a1b69b86626
MD5 d3d9d1abd3e83d2ba71a564860633379
BLAKE2b-256 080876667b4ddafc20e4fd67c5931006876d85c30d2a41ee8999cdfd1c9a9550

See more details on using hashes here.

Provenance

File details

Details for the file PyGPSClient-1.1.9-py3-none-any.whl.

File metadata

  • Download URL: PyGPSClient-1.1.9-py3-none-any.whl
  • Upload date:
  • Size: 431.1 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.8.0 pkginfo/1.8.2 readme-renderer/32.0 requests/2.27.1 requests-toolbelt/0.9.1 urllib3/1.26.9 tqdm/4.62.3 importlib-metadata/4.11.0 keyring/23.5.0 rfc3986/2.0.0 colorama/0.4.4 CPython/3.10.4

File hashes

Hashes for PyGPSClient-1.1.9-py3-none-any.whl
Algorithm Hash digest
SHA256 f81f30a8494110910f16af696b3a28c2bb6512c4f8da1871d46ad64c86ae2c28
MD5 5e6b179e385be88faed2805a728c0626
BLAKE2b-256 7e4853ec681d9c81400cd6b9a3501f61cbce9538d8fa2b9a251a447106af2729

See more details on using hashes here.

Provenance

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page