Exercise 9: GPS receiver
Introduction
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.
https://iotworkshop.africa/pub/IoT_Course_English/GPSAndInterfaceThroughUART/parserLog.txt
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:
https://iotworkshop.africa/pub/IoT_Course_English/GPSAndInterfaceThroughUART/exercise_6.odt
--
Uli Raich - 2020-08-04
Comments