Mikrocontroller-Bauprojekt – GPS-Daten (u.a. Zeit, Datum, Koordinaten) mittels µC-ESP8266-WeMos-D1mini und GPS-Modul auf OLED-Display darstellen
Schaltplan
Bibliotheken
https://docs.arduino.cc/libraries/adafruit-ssd1306
https://docs.arduino.cc/libraries/tinygpsplus
#include <Wire.h>
#include <Adafruit_SSD1306.h>
#include <TinyGPS++.h>
#include <SoftwareSerial.h>
Quellcode
/*
https://forum.arduino.cc/t/gps-esp8266-oled/1178602/12
https://github.com/ahmadlogs/arduino-ide-examples/blob/main/esp32-gps-tracker/esp32-gps-tracker.ino
https://randomnerdtutorials.com/guide-to-neo-6m-gps-module-with-arduino
https://arduiniana.org/libraries/tinygpsplus
µC: ESP2866 Wemos D1 Mini (Clone)
Display: 0.96inch OLED Module SSD1306 (SKU: MC096GW/white)
GPS-Module: GY-NEO6MV2
*/
#include <Wire.h>
#include <Adafruit_SSD1306.h>
#include <TinyGPS++.h>
#include <SoftwareSerial.h>
// Define your OLED display settings
#define SCREEN_WIDTH 128
#define SCREEN_HEIGHT 64
#define OLED_RESET -1
#define SCREEN_ADDRESS 0x3C //See datasheet for Address
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET);
// Define the GPS module
SoftwareSerial gpsSerial(13, 15); // RX-Pin = D7 (GPIO13), TX-Pin=D8 (GPIO15)
TinyGPSPlus gps;
void setup() {
// Initialize the display
if(!display.begin(SSD1306_SWITCHCAPVCC, SCREEN_ADDRESS)) {
Serial.println(F("SSD1306 allocation failed"));
for(;;);
}
// Set up the GPS module
gpsSerial.begin(9600);
display.display(); // Display startup message
delay(2000);
display.clearDisplay();
}
void loop() {
while (gpsSerial.available() > 0) {
if (gps.encode(gpsSerial.read())) {
display.clearDisplay();
// Display the number of locked satellites
display.setTextSize(2);
display.setTextColor(SSD1306_WHITE);
display.setCursor(0, 0);
display.print("H:");
display.print(gps.altitude.meters(),1);
// Display GPS speed in the middle
display.setTextSize(2);
display.setCursor(0, SCREEN_HEIGHT / 2 - 8);
//display.print(gps.speed.kmph());
//display.print(gps.altitude.meters(), 0);
//display.print(gps.time.hour());
//display.print(":");
display.print(gps.time.minute());
display.print(":");
display.print(gps.time.second());
display.print("_");
display.print(gps.satellites.value());
// Meine Testreihe
display.setTextSize(2);
display.setCursor(0, 48);
display.print(gps.location.lat(), 8);
display.display();
}
}
}
DownloadParameter
Die hier gelisteten Parameter können im Quellcode z.B. mit display.print(gps.date.year());
ergänzt/geändert werden, um die entsprechenden Werte dann auf dem Display ausgeben zu lassen.
gps.location.lat(), 6 // Latitude in degrees (double)
gps.location.lng(), 6 // Longitude in degrees (double)
gps.location.rawLat().negative ? "-" : "+"
gps.location.rawLat().deg // Raw latitude in whole degrees
gps.location.rawLat().billionths // ... and billionths (u16/u32)
gps.location.rawLng().negative ? "-" : "+"
gps.location.rawLng().deg // Raw longitude in whole degrees
gps.location.rawLng().billionths // ... and billionths (u16/u32)
gps.date.value() // Raw date in DDMMYY format (u32)
gps.date.year() // Year (2000+) (u16)
gps.date.month() // Month (1-12) (u8)
gps.date.day(); // Day (1-31) (u8)
gps.time.value() // Raw time in HHMMSSCC format (u32)
gps.time.hour() // Hour (0-23) (u8)
gps.time.minute() // Minute (0-59) (u8)
gps.time.second() // Second (0-59) (u8)
gps.time.centisecond() // 100ths of a second (0-99) (u8)
gps.speed.value() // Raw speed in 100ths of a knot (i32)
gps.speed.knots() // Speed in knots (double)
gps.speed.mph() // Speed in miles per hour (double)
gps.speed.mps() // Speed in meters per second (double)
gps.speed.kmph() // Speed in kilometers per hour (double)
gps.course.value() // Raw course in 100ths of a degree (i32)
gps.course.deg() // Course in degrees (double)
gps.altitude.value() // Raw altitude in centimeters (i32)
gps.altitude.meters() // Altitude in meters (double)
gps.altitude.miles() // Altitude in miles (double)
gps.altitude.kilometers() // Altitude in kilometers (double)
gps.altitude.feet(); // Altitude in feet (double)
gps.satellites.value() // Number of satellites in use (u32)
gps.hdop.value() // Horizontal Dim. of Precision (100ths-i32)
TinyGPS++ by Mikal HartDownload
Funktionsfähige aber noch frühe Codeversion
Quellen und weiterführende Informationen
- ESP8266 WeMos-LOLIN D1 mini
- https://components101.com/modules/neo-6mv2-gps-module
- GPS esp8266 oled, forum.arduino.cc
- arduino-ide-examples/esp32-gps-tracker
- Guide to NEO-6M GPS Module with Arduino – RandomNerdTutorials.
- TinyGPS++, GPS/NMEA Parser library, Arduiniana, Mikal Hart
Wenn dir mein Artikel gefällt, du Feedback geben möchtest, Verbesserungsvorschläge hast oder dir ein Fehler aufgefallen ist, kannst du mich gerne anschreiben. Kontaktdaten und weitere Infos sind auf meiner „Über mich“-Seite zu finden.