#include #include #include #include #include #include #include #ifdef U8X8_HAVE_HW_SPI #include #endif #ifdef U8X8_HAVE_HW_I2C #include #endif const char *ssid = "WLAN_24"; const char *password = "Wlan_OFF_Key1"; WiFiUDP ntpUDP; U8G2_SH1106_128X64_NONAME_F_HW_I2C u8g2(U8G2_R0, /* reset=*/ U8X8_PIN_NONE); const long utcOffsetInSeconds = 3600; char daysOfTheWeek[7][12] = {"Sonntag", "Montag", "Dienstag", "Mittwoch", "Donnerstag", "Freitag", "Samstag"}; String formTime; NTPClient timeClient(ntpUDP, "ptbtime1.ptb.de", utcOffsetInSeconds); void setup(void) { u8g2.begin(); WiFi.begin(ssid, password); timeClient.begin(); Serial.begin(115200); } std::string StrDate(time_t timestamp) { std::string result; // Ergebnisvariable char buffer[sizeof(long) * 8 + 1]; // Puffer für die Funktion itoa mit der maximal für eine long Zahl erforderlichen Stellenzahl definieren struct tm timeinfo; // Struktur zur Aufnahme der Zeitinformation if (timestamp == 0) // falls keine Zeit übergeben wurde, wird die aktuelle Uhrzeit des Systems gelesen { time(×tamp); // Set timezone to Berlin Time setenv("TZ", "CST-1", 1); tzset(); } localtime_r(×tamp, &timeinfo); // Inhalt der long Variablen timestamp in die Struktur timeinfo überführen itoa(timeinfo.tm_mday + 100, buffer, 10); // um die Zahlen jeweils 2 stellig zu erhalten, wird der Wert 100 addiert und anschließend // der resultierende String ab der 2. Stelle verwendet [.substr(1, 2)] result = std::string(buffer).substr(1, 2) + "."; itoa(timeinfo.tm_mon + 1 + 100, buffer, 10); // 1 hinzufügen, um den korrekten Monat zu erhalten, 100 um 2 Stellen zu erreichen result += std::string(buffer).substr(1, 2) + "."; itoa(timeinfo.tm_year + 1900, buffer, 10); // + 1900, um den Start der Zeitzählung festzulegen result += std::string(buffer); return (result); } // StrDate std::string StrTime(time_t timestamp) { std::string result; // Ergebnisvariable char buffer[sizeof(long) * 8 + 1]; // Puffer für die Funktion itoa mit der maximal für eine long Zahl erforderlichen Stellenzahl definieren struct tm timeinfo; // Struktur zur Aufnahme der Zeitinformation if (timestamp == 0) // falls keine Zeit übergeben wurde, wird die aktuelle Uhrzeit des Systems gelesen { time(×tamp); // Set timezone to Berlin Time setenv("TZ", "CST-1", 1); tzset(); } localtime_r(×tamp, &timeinfo); // Inhalt der long Variablen timestamp in die Struktur timeinfo überführen result = ""; itoa(timeinfo.tm_hour + 100, buffer, 10); // um die Zahlen jeweils 2 stellig zu erhalten, wird der Wert 100 addiert und anschließend // der resultierende String ab der 2. Stelle verwendet [.substr(1, 2)] result += std::string(buffer).substr(1, 2) + ":"; itoa(timeinfo.tm_min + 100, buffer, 10); result += std::string(buffer).substr(1, 2) + ":"; itoa(timeinfo.tm_sec + 100, buffer, 10); result += std::string(buffer).substr(1, 2); return (result); } // StrTime /*** * StrDateTime liefert das Datum und die Uhrzeit aus der Variablen timestamp als String zurück ***/ std::string StrDateTime(time_t timestamp) { std::string result; result = StrDate(timestamp); // Datumsteil füllen result += " "; // Leerzeichen zwischen Datum und Zeit result += StrTime(timestamp); // Zeitanteil füllen return (result); } // StrDateTime void loop(void) { u8g2.clearBuffer(); // clear the internal memory u8g2.setFont(u8g2_font_ncenB08_tr); // choose a suitable font u8g2.drawStr(0,10,"Hello World!"); // write something to the internal memory u8g2.sendBuffer(); // transfer internal memory to the display delay(5000); timeClient.update(); formTime = ((timeClient.getFormattedTime())+ " "+(daysOfTheWeek[timeClient.getDay()])); char formTime_2[50]; formTime.toCharArray(formTime_2, 50); u8g2.clearBuffer(); u8g2.drawStr(0,40,(formTime_2)); u8g2.sendBuffer(); delay(20000); std::string output; output = StrDateTime(0); // an Stelle der 0 kann hier die aktuelle Zeit mit Hilfe von (time_t)timeClient.getEpochTime() übergeben werden Serial.println(output.c_str()); delay(1000); }