Home » 산딸기 가지고 놀기 » 라즈베리파이 GPIO 활용강좌 : 02 GPS 설치하기

 

IMG_1132

 

이번에는 GPS를 구입해보았습니다.

제가 산딸기를 사면서 계획은 “많은 센서들을 써보자. 그러면 어딘가에 써먹을데가 있겠지” 입니다.

한마디로 미X거죠..

 

이번에도 역시 Adafruit에서, Adafruit Ultimate GPS on the Raspberry pi 를 참고했습니다.

 

1. HardWare 설치

Adafruit에서는 두가지 방식으로 산딸기와 연결하였습니다.

첫번째는 GPS module을 USB에 연결하였습니다.

이 방식은 USB to Serial 케이블이 있어야 가능합니다.

Adafruit 제품으로는 http://www.adafruit.com/products/954#Description 이구요,

PL2303이 언급된것을 보니 흔히 사용되는 USB to Serial 변환 젠더인듯 합니다.

이 이유로 이방식은 사용하지 않았습니다.

두번째는 Direct로 GPIO에 연결하는 방식입니다. Serial Rx,Tx에 연결하면 끝입니다.

쉽죠? Adafruit에서 첫번째 이유를 먼저 설명한 이유를 아시는 분은 댓글 부탁드리겠습니다.

아래의 LCD는 Character LCD Control on Raspberrypi를 참조하시면 되겠습니다.

회로도는 Adafruit의 Fritzing 이라는 프로그램을 사용했습니다.

어쩌다보니 Adafruit 빠가 되어버렸네요..ㅡㅡ

gps_lcd_bb

오른쪽 GPS 모듈 보시면 네개의 핀만 사용했습니다.

5v, GND와. Rx핀을 산딸기의 Tx핀에, Tx핀을 산딸기의 Rx핀에 연결하면 되겠습니다.

 

2. 모델 별 OS Setup

Raspberrypi 1 사용시

/boot/cmdline.txt를 수정해야 합니다.

$ sudo vi /boot/cmdline.txt

 from

dwc_otg.lpm_enable=0 console=ttyAMA0,115200 kgdboc=ttyAMA0,115200 console=tty1 root=/dev/mmcblk0p2 rootfstype=ext4 elevator=deadline rootwait

to

dwc_otg.lpm_enable=0 console=tty1 root=/dev/mmcblk0p2 rootfstype=ext4 elevator=deadline rootwait

“console=ttyAMA0,115200 kgdboc=ttyAMA0,115200″가 속도 같은데요, GPIO로는 이 속도가 안나오니 삭제해야되나 봅니다.

다음은 /etc/inittab 파일을 수정합니다.

$ sudo vi /etc/inittab

 from

#Spawn a getty on Raspberry Pi serial line
T0:23:respawn:/sbin/getty -L ttyAMA0 115200 vt100

to

#Spawn a getty on Raspberry Pi serial line
#T0:23:respawn:/sbin/getty -L ttyAMA0 115200 vt100

 

Raspberrypi 3 사용시

$ sudo vi /boot/cmdline.txt

 to

dwc_otg.lpm_enable=0  console=tty1 root=/dev/mmcblk0p2 rootfstype=ext4  elevator=deadline fsck.repair=yes   rootwait

 

$ sudo vi /boot/config.txt

 add

core_freq=250
dtoveraly=pi3-mini uart-bt
enable_uart=1
$ sudo systemctl stop serial-getty@ttyS0.service
$ sudo systemctl disable serial-getty@ttyS0.service
$ sudo systemctl stop gpsd.socket
$ sudo systemctl disable gpsd.socket

 

3. gpsd install

이제는 GPS 관련 Daemon을 설치합니다.

$ sudo apt-get install gpsd gpsd-clients python-gps

설치가 완료되었습니다.

이제는 GPS Data를 수신하겠습니다.

$ sudo gpsd /dev/ttyS0 -F /var/run/gpsd.sock

GPS Data가 잘 수신되고 있는지 확인해보겠습니다.

$ gpsmon /dev/ttyS0
$ gpspipe -r
or 
$ cgps -s

다음과 같은 화면이 나오게 되면 정상입니다.

참고로 gpsd를 정지하려면 다음과 같이하면 되겠습니다.

$ sudo killall gpsd

 

4. Python Code for gpsd

먼저, LCD를 사용해야 하기 때문에 Charter LCD source 를 복사하겠습니다.

$ mkdir gpstest
$ cd gpstest
$ cp ~/Adafruit-Raspberry-Pi-Python-Code/Adafruit_CharLCD/Adafruit_CharLCD.py ./

저는 다음과 같이 프로그래밍 했습니다.

$ vi gpstest.py

#!/usr/bin/python
from Adafruit_CharLCD import Adafruit_CharLCD
from subprocess import *
from time import sleep, strftime
from datetime import datetime
import gps

lcd = Adafruit_CharLCD()

# Listen on port 2947 (gpsd) of localhost
session = gps.gps("localhost", "2947")
session.stream(gps.WATCH_ENABLE | gps.WATCH_NEWSTYLE)

lcd.clear()

while True:
        try:
                report = session.next()

                # Wait for a 'TPV' report and display the current time
                # To see all report data, uncomment the line below
                print report
                if report['class'] == 'TPV':
                        if hasattr(report, 'time'):
                                lcd.clear()
                                print report.time
                                lcd.message('%s\n' % (report.time[11:223]))
                        if hasattr(report, 'lat'):
                                print report.lat
                                print ('%6.3f' % (report.lat))
                                lcd.message('%6.3f/' % (report.lat))
                        if hasattr(report, 'lon'):
                                print report.lon
                                lcd.message('%6.3f' % (report.lon))
                else:
                        print 'GPS Signal\nnot found'
                        lcd.clear()
                        lcd.message('GPS Signal\nnot found')

        except KeyError:
                pass
        except KeyboardInterrupt:
                quit()
        except StopIteration:
                session = None
                print "GPSD has terminated"

GPS가 정상적으로 Data를 받아오게 되면, 윗줄에 시간을, 다음줄에 lat값/lon값을 Display합니다.

GPS가 비정상일때는 “GPS Signal not found”를 Display합니다.

파일을 실행합니다.

$ sudo python gpstest.py

이상입니다.

GPS를 어디에 사용할지는 나중에 생각해보도록 하겠습니다.

[참고사이트]
http://learn.adafruit.com/adafruit-ultimate-gps-on-the-raspberry-pi
http://learn.adafruit.com/webide/installation

5 Replies to “라즈베리파이 GPIO 활용강좌 : 02 GPS 설치하기”

  1. cvdf95 댓글:

    잘만 하면 저렴한 GPS수신기가 될수도 있겠네요
    크기가 있으니 차량용이 제일 적당해 보이네요

    1. 팬더골드 댓글:

      GPS 쓸만한데가 차량 말고는 그닥 생각이 안나네요..^^

      1. cvdf95 댓글:

        얼마전에 아는분이 오토바이를 사신지 1주일만에 도난당하셔서 gps글을 보고 잘됬다고
        생각했는데 너무크네요ㅋ

  2. 팬더골드 댓글:

    음..이렇게 보니 사진이 참 없어보이네요..ㅠㅠ

  3. 박준경 댓글:

    안녕하세요. 최근 라즈베리파이 GPS 모듈 관심있는 학생인데요..
    여기에 사용하신 gps 모듈에 대한 정보가 너무 없어서 여기에 글을 남깁니다..
    몇가지 문의드릴 것이 있는데 .. 개인적으로 연락이 가능할까요?

Comments are closed.

산딸기마을 포스트 검색

공동제작 공동프로젝트 무상후원 기관

산딸기마을 기부하기

산딸기마을 방문자 현황

Flags Countries Visits Page views
South Korea 626063 1845660
United States 10882 26091
Japan 5011 13204
Germany 2755 5151
India 1897 2902
Canada 1729 4640
United Kingdom 1596 2642
Australia 1240 2901
Russia 1219 1677
China 1077 2239
Total Pageviews: 1936700