GPS-Koordinaten mit dem TTGO T-Display anzeigen

Hier werden einzelne Projekte mit MicroPython vorgestellt
Antworten
Heinrichs
Beiträge: 173
Registriert: Do 21. Okt 2010, 18:31

GPS-Koordinaten mit dem TTGO T-Display anzeigen

Beitrag von Heinrichs » Mo 26. Okt 2020, 17:35

Das GPS-Modul GY-GPS56MV2 habe ich im Zusammenhang mit dem Attiny2313 hier schon ausführlich vorgestellt. Hier soll das Modul nun mit dem TTGO T-Display betrieben werden. Zwei große Vorteile bietet es gegenüber dem Attiny2313-System:
  • Das MicroPython-System auf dem ESP32 stellt mächtigere Befehle zur Verfügung als der beim Attiny2313 benutzte BASCOM-Compiler; das macht die Programmierung einfacher.
  • Das auf dem Modul integrierte Display erlaubt eine einfache und übersichtliche Ausgabe der Messdaten.
Da sowohl beim ESP32 als auch beim GPS-Modul die Signalleitungen mit einem 3,3V-Pegel arbeiten, sind obendrein keine Pegelanpassungen erforderlich. Die Anschlüsse werden folgendermaßen vorgenommen:

Code: Alles auswählen


GY-GPS56MV2-Modul  --  TTGO 
VCC                --  5 V
GND                --  G
TX                 --  13 (RX)


Das Programm ist recht einfach; die Funktionsweise wird durch die Kommentare erläutert (Zur Programmierung des Displays schauen Sie bitte hier nach!):

Code: Alles auswählen


######################################
#  GPS-Empfänger mit Anzeige von     #
#  Zeit, Länge, Breite und Anzahl    #
#  der sichtbaren Satelliten auf     #
#  dem Display des TTGO T-Display    # 
#  Version vom 21.12.2020            #
#  von G. Heinrichs                  #
######################################

# Anschlüsse:
# GY-GPS56MV2-Modul  --  TTGO 
# VCC                --  5 V
# GND                --  G
# TX                 --  13 (RX)

# Anzeige-Format für Längen- und Breitengrad: [X]XX.xxxxxx°


from machine import Pin, SPI, UART
import vga2_bold_16x16 as font1
import vga1_bold_16x32 as font2
import st7789
from time import sleep

def get_GPS_set(set): # liefert Liste zu der Kennung "set", z. B. $GPRMC  
  try:
    # warten, bis Line-Feed gefunden...  
    while True:
      zeichen = uart.read(1)
      if zeichen == b'\x0a':   #'\n'
        break
    while True:
      data = uart.readline()
      data_str = str(data, 'UTF-8')
      zeile = data_str.split(',')
      kennung = zeile.pop(0) # entfernt Element mit dem Index 0 aus zeile und speichert es in kennung
      if kennung == set:
        set_liste = zeile 
        if set_liste[2] != '':
          break
    return set_liste
  except:
    return []

# Display initialisieren...
spi = SPI(2, baudrate=20000000, polarity=1, sck=Pin(18), mosi=Pin(19))
display = st7789.ST7789(spi, 135, 240,  reset=Pin(23, Pin.OUT), cs=Pin(5, Pin.OUT), dc=Pin(16, Pin.OUT), backlight=Pin(4, Pin.OUT), rotation=3)
# Landscape

display.init()
display.fill(0)  # loeschen; Bildschirm schwarz

display.text(font2, 'GPS56MV2', 5, 5)
display.text(font1, 'Warte auf', 5, 50)
display.text(font1, 'Satelliten...', 5, 70)

# UART für GPS initialisieren...
uart = UART(1, baudrate=9600, bits=8, parity=None, stop=1, tx=12, rx=13, rts=-1, cts=-1, txbuf=256, rxbuf=256, timeout=5000, timeout_char=2)

while True:
  GPRMC = get_GPS_set('$GPRMC')
  if GPRMC == []:
    display.text(font2, ' Error! ',5 , 10)
  else:
    display.fill(0)  # Display löschen  
    time = GPRMC[0]
    time = time[0:2] + ':' + time[2:4] + ':' + time[4:6]
    temp = str(float(GPRMC[2][2:7])/60)
    standard_breite = GPRMC[3] + ': ' + GPRMC[2][0:2] + temp[1:6] + '°   ' # Nord/Süd; 
    standard_breite = bytes(standard_breite, 'UTF-8')
    standard_breite = standard_breite.replace(b'°', b'\xf8')
    temp = str(float(GPRMC[4][3:8])/60)
    standard_laenge = GPRMC[5] + ': ' + GPRMC[4][0:3]  + temp[1:6] + '°   '# Ost/West
    standard_laenge = bytes(standard_laenge, 'UTF-8')
    standard_laenge = standard_laenge.replace(b'°', b'\xf8')  
    display.text(font2, 'GPS56MV2',5,10)
    display.text(font1, 't: '+time,5,50)
    display.text(font1, standard_breite, 5, 70)
    display.text(font1, standard_laenge, 5, 90)
  
    GPGSV = get_GPS_set('$GPGSV')
    # Anzahl der sichtbaren Satelliten <- Element 2 von der Liste GPGSV
    anzahl = GPGSV[2] # Zeichenkette!
    display.text(font1, 'Satelliten: '+ anzahl + ' ', 5, 110)  
  sleep(2)
  

Antworten