GPS-Koordinaten mit dem TTGO T-Display anzeigen
Verfasst: 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 Programm ist recht einfach; die Funktionsweise wird durch die Kommentare erläutert (Zur Programmierung des Displays schauen Sie bitte hier nach!):
- 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.
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)