loading

Previously I built a project where I connected a Neo-6M to an Arduino, but this time around, I wanted to show how to use a GPS with the Raspberry PI. Now there are several USB solutions, and apps that work with them, but I wanted to show how to use a $20 GPS module with a a serial UART, and Python code to decode the NMEA strings. Then you can write your own GPS interface, or combine the data with Google Maps.

Parts Needed:

Raspberry PI (any version)

Neo-6M GPS

Female to Female Jumpers

Raspberry Pi accessories like a >1a 5v power supply, SD Card, keyboard, mouse, and a HDMI monitor are needed for any RPI project.

Step 1: Electrical Connection

The first step is to connect the GPS module to the Raspberry PI. There are only 4 wires (F to F), so it's a simple connection.

Neo-6M RPI

VCC to Pin 1, which is 3.3v

TX to Pin 10, which is RX (GPIO15)

RX to Pin 8, Which is TX (GPIO14)

Gnd to Pin 6, which is Gnd

Step 2: Turn Off the Serial Console

By default, the Raspberry Pi uses the UART as a serial console. We need to turn off that functionality so that we can use the UART for our own application.

Open a terminal session on the Raspberry Pi.

The first thing we will do is backup the file cmdline.txt before we edit it.

sudo cp /boot/cmdline.txt /boot/cmdline_backup.txt and press Enter.

The we need to edit cmdlint.txt and remove the serial interface.

Type in sudo nano /boot/cmdline.txt and press Enter.

Delete console=ttyAMA0,115200 and save the file by pressing Ctrl X, Y, and Enter.

Now type in sudo nano /etc/inittab and press enter.

Find ttyAMA0 by pressing Ctrl W and typing ttyAMA0 on the search line.

When it finds that line, press home, insert a # symbol to comment out that line, and Ctrl X, Y, Enter to save.

Type sudo reboot and press Enter to restart the Pi.

Step 3: Testing the GPS

Before we start writing our own code, let's test the GPS by using some off the shelf programs.

Open a terminal session and type sudo apt-get install gpsd gpsd-clients and press Enter.

After that installs, let's start the serial port:

Type stty -F /dev/ttyAMA0 9600 and press Enter.

Now start GPSD:

Type sudo gpsd /dev/ttyAMA0 -F /var/run/gpsd.sock and press Enter.

Now display by typing cgps -s and press Enter.

Step 4: Writing Your Own Python App

Now that I know the GPS module works, I want to write my own software, so that I can act on the values I'm reading. Coming Soon ......

Step 5: Using a Small LCD Display

For best results, a gps sensor needs to be outdoors. But I really don't want to drag my 42" HDMI monitor outside. I'll be adding a 2.8" LCD to this project soon!

<p>I have a problem finding ttyAMA0, I only had tty1, which I then deleted. But I could not find it when I was searching for it. And when trying to test the gps i wrote both tty -F/dev/ttyAMA0 9600, and tty -F/dev/tty1 9600, and non of them worked. Help?</p>
<p>i got same issue with you MartineH1</p>
<p>I found out that my serial port is called serial0, so you should try that. So try writing -F /dev/serial0 9600 instead.</p>
<p>thank you MartineH1,</p><p>now, i have a new problem. i can't find anything when i type &quot;<em>sudo nano /etc/inittab&quot;</em></p><p><em>what should i do?</em></p>
<p>I don't think the inittab is in use anymore on the Raspberry Jessie. Which Raspi do you have? And what do you want to do?</p>
<p>i use pi 3 B. i cant find the ttyAMA0. what should i do Mr.sspence?</p>
<p>Waiting for your step 4 &amp; step 5 to be posted!</p>
<p>Hi, I am not getting the data on the screen. After performing all the steps when i give command cgps -s i get the screen with no data in it. I am using raspberry pi 3. Also when i performed <em>sudo nano /etc/inittab step i did not get any data in the file to comment. Please let me know if i am missing on anything. On a separate note I want to read this data and push to Azure IOT hub. I don't have any FTDI cable hence i was using this approach without FTDI cable. I appreciate your help in this regard too.</em></p><p><em>Thanks</em></p><p><em>Sunil Rathod</em></p>
<p>same with me</p>
<p>please check this page. It works for me.. Raspberry pi 3 and Neo 6M GPS</p><p>https://www.raspberrypi.org/forums/viewtopic.php?f=44&amp;t=51788</p>
<p>Hi the Raspberry Pi 3 uses the ttyAMA0 for bluetooth, the ttyS0 is the UART port<br>i also had some trouble figuring that out for myself</p>
<p>There is no ftdi cable in this example. The GPS connects directly to the GPIO pins.</p>
<p>Hi,</p><p>I am working on the gps interfacing with the raspberyy pi. Can i ask for the python code for the gps?</p><p>Thanks</p><p>Adwaya</p>
para la raspberry pi 3 ya no usa el ttyAMA0 si no el ttyS0 este programa solo funciona en raspberry pi 2 y 1, en la 3 no... HELP!!!!
Add device tree to /boot/config.txt to disable the Raspberry Pi 3 bluetooth.<br><br>sudo nano /boot/config.txt<br>Add at the end of the file<br><br>dtoverlay=pi3-miniuart-bt<br>Exit the editor saving your changes and then:<br><br>sudo reboot
<p>what is the restore line for the backed up files ??</p>
<p>What files?</p>
you backed up the file cmdline.txt before editing it how to restore the backed up file ?
<p><em>sudo cp /boot/cmdline_backup.txt /boot/cmdline.txt</em></p>
<p>thank you!</p>
hi all,there is a LoRa/GPS HAT,it applies to projects related to GPS, Lora, and RaspberryPi,you can find it here: http://wiki.dragino.com/index.php?title=Lora/GPS_HAT,youcan also get the detailed tutorial here
<p>@sspence sir, I have PM you about the error</p>
<p>As I Don't Know how to code in python. S, can I code in embedded c??</p>
You can use any language you want.
<p>Thank You</p>
<p>Thank You</p>
<p>Thank You</p>
<p>Sorry but ... I'm not in Jessie, so your post doesn't work for guys like me.</p><p>Maybe could you add something for us? (<a href="https://learn.adafruit.com/adafruit-ultimate-gps-hat-for-raspberry-pi/use-gpsd" rel="nofollow">adafruit</a> will help you ;-) ).</p><p>Soon you will discover a french similar article on <a href="http://pibot-maison.blogspot.com" rel="nofollow">pibot-maison</a>!</p>
<p>*I am not in Wheezy</p><p>My version of RPi is Jessie.</p>
<p>Shouldn't matter. What's the error?</p>
<p>Jessie use systemd, so you have to disable tty like that :</p><p><em>sudo systemctl stop serial-getty@ttyAMA0.service<br></em><i>sudo systemctl disable serial-getty@ttyAMA0.service</i></p><p>then type &quot;<em>sudo reboot</em>&quot;</p>
<p>Hi, I have some questions...<br><br>What version of Raspberry pi are you using?<br><br>And you know how to send the data (coordanations) for an database (MySql) ?</p>
I have a B+ and a pi2. here is a python to mysql reference.<br> <br> <a href="https://dev.mysql.com/doc/connector-python/en/" rel="nofollow">https://dev.mysql.com/doc/connector-python/en/ </a><br> <br> I have not used it, as my experience is with php/mysql.
<p>Great</p>
<p>i tried to find a way to operate the gps with a python code, instead of the terminal script to open the application.<br>so if you have the python code, send it to me </p>
<p>It works very well but i noticed that the gps has to wait about 2~5 minutes to collect the desired data from the surrounding satellites.</p>
Some units are slower / faster than others, and it can depend on how many satellites are visible. Slower to connect indoors with few windows.
<p>I would love to hear from others that have done this, or similar projects. Post your links.</p>

About This Instructable

63,381views

64favorites

License:

Bio: Professionally, I'm an IT Engineer (Executive Level) and Electronics Tech. I'm a Amateur Radio Operator (KK4HFJ). I lived off grid, with Solar (PV ... More »
More by sspence:DIY I2C LCD Display with Inputs Raspberry Pi & the Neo 6M GPS Earthquake / Vibration Sensor 
Add instructable to: