- 피코에 NEO-M8N을 연결해서 GPS 수신하고 있다.
- micropyGPS를 이용해서 자료를 처리했다.
- while True 를 이용한 순환문을 이용했다.
- 아주 간혹 데이터 수신이 종료되었다.
- NEO-M8N 모듈이 비정상적인 NMEA 문장을 출력하는 경우가 있는데, 이를 처리하지 못해서 발생한 일이었다.
- 수신 데이터 처리하는 부분도 try ~ except 로 처리해야 하는 것이었다.
- micropyGPS 는 수신 데이터를 한 글자씩 읽어서 모은 후 자료를 처리하는 구조다.
sentence = uart.read().decode('utf-8')
for char in sentence:
gps.update(char)
이것을 try ~ except로 하면
try:
sentence = uart.read().decode('utf-8')
for char in sentence:
gps.update(char)
except:
pass
- 한 번에 여러 문장이 수신되는데 한 문장만 오류가 나도 나머지 자료를 버리는 구조다.
- 이렇게 해도 큰 문제 없지만 처리할 수 있는 데이터는 처리하고 싶었다.
- 데이터를 문장 구조에 맞추어 분리한 후 한 문장씩 처리하되 오류가 생길 때만 데이터를 버리도록 했다.
data = uart.read().decode('utf-8')
for line in data.strip().splitlines():
for char in line:
try:
gps.update(char)
except:
pass
- 첫 번째 방법보다 아주 조금 더 처리 시간이 빨라졌다. 오류가 있는 데이터를 처리했을 때 약 10ms 정도 빠르다.