Category: Rasberry Pi

  • deque

    크기를 지정할 수 있는 선입선출 형식의 리스트. 기능이 더 많지만, 내가 사용하는 목적은 딱 저것이다.

    라즈베리파이 피코의 micropython에서 10개 항목을 가지는 deque 는 다음과 같이 구현한다.

    from collections import deque
    
    buffer = deque((), 10)
  • GPS Logger, Mk. I

    • GPS 로거를 가지고 싶었다. 사는 것은 재미 없으니 만들어 보기로 했다.
    • Mk. I은 Raspberry Pi Pico + NEO M8N + OLED로 구성했다.
    • NMEA 해석은 micropyGPS로 했다.

    결과

    • 동작한다. 창가에서도 길을 걸을 때도 동작한다. 장시간 켜두어도 NMEA 결과 해석에 문제가 생기지 않는다.

    개선점

    • 항상 Cold start 에 가까워 시간이 많이 소요된다. SRT 타고 가는 길에 사용했는데 고속열차 내부에서는 한 번도 fix 되지 못했다. 위성 정보를 업로드 할 수 있으므로 시도해 보기로 한다. 너무 번잡하고, 일단 정보를 수신하면 몇 시간은 사용할 수 있으므로 구현하지 않는다.
    • GPS 고도는 정확하지만 오차가 크다. 기압계를 이용해서 상호 보완하기로 한다.
    • microSD에 위치 기록 저장하기. OK

  • 결선

    유투브보다가 저렇게 해도 된다는 것을 알게 되었다.

  • gps.update

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