현재 시간을 알려주는 UBX 패킷은 NAV-TIMEUTC이다. void loop() { uint8_t ch; if (uart0.getchar(ch)) { if (ch == 'p') gps.cfg_prt(); if (ch == 'u') gps.nav_utc(); } if (uart1.getchar(ch)) { uart0.puthex(ch); } } void Gps::nav_utc() { make_header(CLASS_NAV, NAV_TIMEUTC, 0); chksum(0); uart1.send_data(gps_data, 8); } 'u' 키를 누르면 UTC time을 가지고 오는 패킷을 내보낸다. request 메시지는 payload없이 class ID와 message ID만 보내주면 된다. 빨간색으로 ..
첫번째로 구현할 UBX 패킷은 CFG-PRT이다. GPS 모듈은 전원이 인가되면 기본적으로 몇개의 NMEA 메시지를 자동으로 송신하도록 되어 있다는 것은 앞에서 몇차례에 걸쳐서 얘기하였다. UBX 패킷을 이용하기 위해서는 자동으로 송신되는 NMEA메시지를 보내지 않도록 해주어야 한다. 이를 위해서 CFG-PRT 패킷을 사용하면 된다. 위의 그림은 CFG-PRT 패킷의 구조를 설명하고 있는데 여기에서 중요한 부분은 Proto Mask 부분이다. 그림에 표시되어 있는것처럼 NMEA 메시지와 UBX 메시지를 enable/disable 할수 있다. CFG-PRT메시지를 보낼때 UBX 메시지만 송수신 할수 있도록 해주면 된다. void loop() { uint8_t ch; if (uart0.getchar(ch))..
앞에 글에서 본 것처럼 GPS에서 보내는 데이터는 모두 $로 시작되는 문자열로 되어 있다. 콘솔창에 보이는 데이터는 NMEA protocol로 정해진 표준에따라 정의되어 있다. 위의 그림처럼 $로 하나의 프레임이 시작되고, 뒤이어 GP문자열이 나온다. 메세지 종류에 따라 세글자로 구분되어 진다. 예를 들어, 위치정보에 해당되는 메세지 코드는 GLL이며 다음과 같이 정의 된다. $GPGLL,다음에 위도에 해당되는 값이 나오고, 북위 혹은 남위를 나타내는 글자가 나온다. 다음으로는 경도값이 나오고 동경, 서경을 구분하기 위한 글자가 뒤따른다. 그 다음에는 시간정보도 같이 나온다. 예를 들어 위와 같이 4717.11364N, 00833.91565E와 같은 데이터가 들어 왔다면 아래와 같은 방법으로 변환 하면된..