gps.update

Written by

in

  • 피코에 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 정도 빠르다.