create new tag
view all tags

Exercise 9: GPS receiver


Most GPS receivers use a simple serial interface for communication and provide their data in form of NMEA sentences to the host. See GPS receiver for more details. The goal of this exercise will therefore be to receive these messages over a UART port and to interpret them.

The GPS receiver may need quite some time to find satellites and to be ready to send valid messages. It will start blinking the red LED when this is the case.

Exercise 1: Receiving messages

Write a script that receives NMEA messages on ESP32 UART2, where Tx is re-mapped to D2 or GPIO21. Read the messages and print them as they come in.

Exercise 2: Interpreting the NMEA messages using micropyGPS

Download https://github.com/inmcm/micropyGPS and install micropyGPS.py in /lib on the ESP32 file system. Have a look at test_micropyGPS.py to understand how to use the parser. Run it on the PC.

Exercise 3: Interpreting real messages

First save a series of NMEA sentences on a file. Transfer the file to the PC and have them interpreted by the micropyGPS parser in the same fashion as the test_micropyGPS.py does. You should get a result similar to this log.


After that you may try to interpret the messages directly on the ESP32as they come in. The microGPS parser is already included in your MicroPython firmware.

Exercise 4: as_GPS

Peter Hinch has written an asynchronous GPS driver with a parser based on micropyGPS. The driver is already installed in your MicroPython binary. Use this driver to extract the information of exercise 3.

The documentation of as_GPS can be found at https://github.com/peterhinch/micropython-async/blob/master/v3/docs/GPS.md

For the following exercises please follow the description in this TWiki: GPS receiver

Exercise 5: u-center

Connect the GPS receiver to your PC and install ublox u-center. When doing this on a Linux machine you must run u-center under the Windows emulator wine. Check out the possibilities u-center offers. Change the ublox neo 6M baud rate to 115200 and save the setting in the battery backed up RAM.

Exercise 6: gpsd

Install gpsd on your machine and start it using the USB to serial adapter as NMEA source. Print the NMEA messages made available by gpsd using gpspipe and decode the messages with gpsmon. Have a look at the satellite positions with xgps.

Exercise 7: Display the GPS position in a map

Follow the Linux Journal tutorial to display the GPS position on a marble map. Use the serial port as GPS source instead of the mobile phone.

Exercise 8: Display the GPS position in a map when the receiver is connected to the ESP32

For this to work you must write a simple TCP server n the ESP32, which listens to a connection request on port 29998. When the connection request arrives the server connects to the TCP port, reads NMEA messages from the ublox neo 6M connected to the ESP32 UART and sends the sentences to the TCP port without modification.

Write a simple TCP client reading the information from the TCP port and printing it out

On the PC:

  • start gpsd with tcp://IP_OF_ESP:29998 as GPS source
  • check with gpspipe and gpsmon that the data arrive
  • redirect the gspd information to port 29999 using
    gpspipe -r | nc -l 29999
  • run qmlscene on map.qml to send the information to OpenStreetView on marble
The exercise sheet in odt format:


-- Uli Raich - 2020-08-04


Topic attachments
I Attachment History Action Size Date Who Comment
Unknown file formatodt exercise_6.odt r2 r1 manage 23.4 K 2020-08-28 - 15:44 UliRaich  
PNGpng gpsResults.png r1 manage 56.5 K 2020-08-04 - 07:44 UliRaich  
Texttxt parserLog.txt r1 manage 261.1 K 2020-08-04 - 15:09 UliRaich  
Edit | Attach | Watch | Print version | History: r4 < r3 < r2 < r1 | Backlinks | Raw View | Raw edit | More topic actions
Topic revision: r4 - 2020-08-28 - UliRaich
This site is powered by the TWiki collaboration platform Powered by PerlCopyright © 2008-2024 by the contributing authors. All material on this collaboration platform is the property of the contributing authors.
Ideas, requests, problems regarding TWiki? Send feedback