전자/Raspberry
라즈베리에서의 GPS 이용
geniuskpj
2017. 5. 23. 12:33
GPS를 이용해본 사람이라면 다들 알고 있겠지만
대다수의 GPS가 UART를 이용하고 NMEA라는 통신 프로토콜을 사용한다.
대부분의 GPS 수신기가 같은 통신 프로토콜을 사용하기때문에 GPS 프로그램은 한번 짜두면 두고두고 쓸 수 있다.
사실 가장 쉬운 방법은 gpgga로 시작하는 문자열을 따서 ','를 기준자로 자른다음에 위도,경도, 고도를 뽑아내면 된다.
GPGGA Global Positioning System Fix Data라고 한다. 여기에서 주로 알 수 있는 것은 시간, 위도, 경도, 고도 등이다.
다음은 위키에서 발췌한 내용인데 이를 참고해서 parsing 하면 쉽게 구할 수 있다.
하지만 GPS의 경우 대개 켜고 끌 수 없기때문에 UART가 열려있는 상태일때 수신데이터를 제때 버리거나
처리해줘야 한다. 해당 처리에 자신이 없는 경우엔 남이 짜 놓은 코드를 적극 활용하도록 하자.
https://github.com/wdalmut/libgps
#include <stdio.h> #include <stdlib.h> #include <gps.h> int main(void) { // Open gps_init(); loc_t data; while (1) { gps_location(&data); printf("%lf %lf\n", data.latitude, data.longitude); } return EXIT_SUCCESS; }
위 라이브러리를 사용하면 이렇게 쉽게 데이터를 받아올 수 있다.
P.S. 왠지 모르지만 내 라즈베리의 경우엔 자체 UART로 수신할 시 자꾸 뻗어버려 USB to UART 모듈을 사용하였다.