라즈베리파이 — GPS모듈 회로 연결

라즈베리파이 UART 기본 설정
라즈베리파이에서 Preferences → Raspberry Pi Configuration → Interfaces
“Serial Port”를 Enable,
“Serial Console”을 Disable 설정
라즈베리파이 UART 상세 설정
‘dtoverlay’(Device Tree Overlay) 명령어을 통해, 라즈베리파이와 연결된 장치 GPS센서를 활성화한다.
참고) 라즈베리파이에서 dtoverlay 명령어는 Device Tree Overlay를 관리하는데 사용된다. Device Tree는 리눅스 커널에서 하드웨어를 추상화하고, 리눅스 커널이 부팅될 때 동적으로 로드되거나 수정할 수 있는 하드웨어 설정 정보를 제공하는 메커니즘이다. Device Tree Overlay는 이러한 설정 정보를 수정하거나 확장할 때 사용된다.
dtoverlay -a | grep uart
UART와 관련된 오버레이 정보 출력
dtoverlay -h uart5
uart5에 대한 Device Tree Overlay 정보 출력
⇒ GPIO14, 15에 맞는 UART 그룹임을 확인할 수 있을 것이다.
sudo nano /boot/config.txt
nano 편집기로 /boot/config.txt 파일을 열고, [all] 항목에 아래 2줄 추가
dtoverlay=uart5 라즈베리파이에서 UART5 포트 활성화
enable_uart5=1 UART 5의 사용 활성화
sudo reboot
재부팅
GPS 관련 패키지 설치
sudo apt-get update
sudo apt-get upgrade
sudo apt-get install python3-pip
Python 3용 패키지 관리자인 pip 설치
sudo pip3 install pyserial
Python 프로그램에서 시리얼 통신을 사용할 수 있게 해주는 pySerial 라이브러리 설치
sudo pip3 install pynmea2
NMEA 데이터를 파싱하는데 사용되는 pynmea2 라이브러리 설치
sudo apt-get install gpsd gpsd-clients
GPSD 서비스와 관련된 패키지 설치
참고)
GPSD는 GPS 수신기의 데이터를 처리하고 제공하는 데몬 (daemon) 서비스입니다. GPS 수신기는 위성에서 수신한 정보를 형식에 맞춰 데이터로 출력합니다. 그러나 이 데이터를 다루기 위해서는 형식을 이해하고 처리하는 데몬 서비스가 필요합니다. 이런 기능을 제공하는 것이 GPSD입니다.
GPSD는 시스템에서 GPS 데이터를 읽고, 이를 파싱하여 일반적으로 사용되는 형식인 NMEA 형식으로 변환합니다. 이 정보는 GPS 정보를 사용하는 다양한 응용 프로그램에서 사용될 수 있습니다. GPSD를 사용하면 여러 응용 프로그램이 동시에 GPS 데이터를 사용할 수 있으며, GPSD는 데이터를 표준화된 방식으로 제공하여 응용 프로그램 간의 호환성을 유지합니다.
gpsd으로 GPS 데이터 확인
라즈베리파이와 NEO-7M가 UART로 정상적으로 연결되어 있는지 확인
ls -l /dev
‘serial0 - > ttyS0’ 가 보이면 정상정으로 연결된 것이다.
먼저 GPSD 데몬 설정
sudo nano /etc/default/gpsd nano 편집기로 gpsd 설정 파일을 열어 아래 3줄 추가

START_DAEMON=”true”
부팅 시 자동으로 gpsd 데몬 시작
DEVICES=”/dev/serial0”
gpsd에 연결된 GPS 장치의 위치를 지정
GPSD_OPTIONS=”-F /var/run/gpsd.sock”
gpsd 데몬이 생성한 소켓 파일의 경로를 지정
sudo reboot
위 작업을 모두 마쳤다면 재부팅 진행
GPS 데이터 확인
cat /dev/serial0
or cat /dev/ttyS0
cgps, gpsmon을 통해서도 GPS 데이터 확인 가능
파이썬 샘플 코드
import serial
import pynmea2
def parseGPS(str):
if str.find('GGA') > 0:
msg = pynmea2.parse(str)
print "Timestamp: %s -- Lat: %s %s -- Lon: %s %s -- Altitude:
%s %s" %
(msg.timestamp,msg.lat,msg.lat_dir,msg.lon,msg.lon_dir,msg.altitude,m
sg.altitude_units)
serialPort = serial.Serial("/dev/ttyAMA0", 9600, timeout=0.5)
while True:
str = serialPort.readline()
parseGPS(str)