diff --git a/Code/tiny_gps_esp32 b/Code/tiny_gps_esp32 new file mode 100644 index 0000000000000000000000000000000000000000..c2ce403a13ebbf2c71885be1938c195fb9b6c471 --- /dev/null +++ b/Code/tiny_gps_esp32 @@ -0,0 +1,226 @@ +#include <TinyGPS++.h> +#include <SoftwareSerial.h> +/* + This sample sketch demonstrates the normal use of a TinyGPS++ (TinyGPSPlus) object. + It requires the use of SoftwareSerial, and assumes that you have a + 4800-baud serial GPS device hooked up on pins 4(rx) and 3(tx). +*/ +static const int RXPin = 16, TXPin = 17; +static const uint32_t GPSBaud = 9600; + +// neu +long timeToDisplay = 0; +String monat,tag,jahr; +String stunde,minute1,sekunde; +float flat, flong, kmh; + +// Libraries for SD card +#include "FS.h" +#include "SD.h" +#include <SPI.h> + +// Define CS pin for the SD card module +#define SD_CS 5 + +// Save reading number on RTC memory +RTC_DATA_ATTR int readingID = 0; + +String dataMessage; + +// The TinyGPS++ object +TinyGPSPlus gps; + +// The serial connection to the GPS device +SoftwareSerial ss(RXPin, TXPin); + +void setup() +{ + Serial.begin(115200); + ss.begin(GPSBaud); + + // Initialize SD card + SD.begin(SD_CS); + if(!SD.begin(SD_CS)) { + Serial.println("Card Mount Failed"); + return; + } + uint8_t cardType = SD.cardType(); + if(cardType == CARD_NONE) { + Serial.println("No SD card attached"); + return; + } + Serial.println("Initializing SD card..."); + if (!SD.begin(SD_CS)) { + Serial.println("ERROR - SD card initialization failed!"); + return; // init failed + } + + // If the data.txt file doesn't exist + // Create a file on the SD card and write the data labels + File file = SD.open("/data.txt"); + if(!file) { + Serial.println("File doens't exist"); + Serial.println("Creating file..."); + writeFile(SD, "/data.txt", "Reading ID, Tag, Monat, Jahr, Stunde, Minute, Sekunde, Latitude, Longitude, Speed \r\n"); + } + else { + Serial.println("File already exists"); + } + file.close(); + +// getReadings(); // from the NEO-6M GPS module + logSDCard(); + // Increment readingID on every new reading +} + +void loop() +{ + // This sketch displays information every time a new sentence is correctly encoded. + while (ss.available() > 0) + if (gps.encode(ss.read())) + + if (millis() > 5000 && gps.charsProcessed() < 10) + { + Serial.println(F("No GPS detected: check wiring.")); + while(true); + } +// neu + smartDelay(1000); + displayInfo(); + logSDCard(); + // Increment readingID on every new reading + // readingID++; +} + +static void smartDelay(unsigned long ms) +{ + unsigned long start = millis(); + do + { + while (ss.available()) + gps.encode(ss.read()); + } while (millis() - start < ms); +} + + + +void displayInfo() +{ + Serial.print(F("Location: ")); + if (gps.location.isValid()) + { + flat = gps.location.lat(); + flong = gps.location.lng(); + Serial.print(flat, 6); + Serial.print(F(",")); + Serial.print(flong, 6); + //Serial.print(gps.location.lat(), 6); + //Serial.print(F(",")); + //Serial.print(gps.location.lng(), 6); + + } + else + { + Serial.print(F("INVALID")); + } + + Serial.print(F(" Speed KMH: ")); + if (gps.speed.isValid()) + { + kmh = gps.speed.kmph(); + Serial.print(kmh); + Serial.print(gps.speed.kmph()); + } + else + { + Serial.print(F("INVALID")); + } + Serial.print(F(" Date/Time: ")); + if (gps.date.isValid()) + { + + monat = gps.date.month(); + tag = gps.date.day(); + jahr = gps.date.year(); + Serial.print(monat); + Serial.print(F("/")); + Serial.print(tag); + Serial.print(F("/")); + Serial.print(jahr); + } + else + { + Serial.print(F("INVALID")); + } + + Serial.print(F(" ")); + if (gps.time.isValid()) + { + if (gps.time.hour() < 10) Serial.print(F("0")); + stunde = gps.time.hour(); + Serial.print(stunde); + Serial.print(F(":")); + if (gps.time.minute() < 10) Serial.print(F("0")); + minute1 = gps.time.minute(); + Serial.print(minute1); + Serial.print(F(":")); + if (gps.time.second() < 10) Serial.print(F("0")); + sekunde = gps.time.second(); + Serial.print(sekunde); + Serial.print(F(".")); + } + else + { + Serial.print(F("INVALID")); + } + + Serial.println(); +} + + +// Write the sensor readings on the SD card +void logSDCard() { + if (gps.location.isValid()){ + dataMessage = String(readingID) + "," + String(tag) + "," + String(monat) + "," + + String(jahr) + "," + String(stunde) + "," + String(minute1) + "," + + String(sekunde) + "," + String(flat, 6) + "," + String(flong, 6) + "," + String(kmh) + "\r\n"; + Serial.print("Save data: "); + Serial.println(dataMessage); + appendFile(SD, "/data.txt", dataMessage.c_str()); + readingID++; + } +} + +// Write to the SD card (DON'T MODIFY THIS FUNCTION) +void writeFile(fs::FS &fs, const char * path, const char * message) { + Serial.printf("Writing file: %s\n", path); + + File file = fs.open(path, FILE_WRITE); + if(!file) { + Serial.println("Failed to open file for writing"); + return; + } + if(file.print(message)) { + Serial.println("File written"); + } else { + Serial.println("Write failed"); + } + file.close(); +} + +// Append data to the SD card (DON'T MODIFY THIS FUNCTION) +void appendFile(fs::FS &fs, const char * path, const char * message) { + Serial.printf("Appending to file: %s\n", path); + + File file = fs.open(path, FILE_APPEND); + if(!file) { + Serial.println("Failed to open file for appending"); + return; + } + if(file.print(message)) { + Serial.println("Message appended"); + } else { + Serial.println("Append failed"); + } + file.close(); +}