Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /*************************************************************************************************************************************************
- * TITLE: This sketch connects to a local WiFi network, connects to a network server and obtains the network time. It then converts this to a
- * readable format and displays it to the serial terminal and an OLED module. Refer to the video and post for more information.
- *
- * By Frenoy Osburn
- * YouTube Video: https://youtu.be/3LkKYtQqzKo
- * BnBe Post: https://www.bitsnblobs.com/network-time-using-esp8266
- *************************************************************************************************************************************************/
- /********************************************************************************************************************
- * Board Settings:
- * Board: "WeMos D1 R1 or Mini"
- * Upload Speed: "921600"
- * CPU Frequency: "80MHz"
- * Flash Size: "4MB (FS:@MB OTA:~1019KB)"
- * Debug Port: "Disabled"
- * Debug Level: "None"
- * VTables: "Flash"
- * IwIP Variant: "v2 Lower Memory"
- * Exception: "Legacy (new can return nullptr)"
- * Erase Flash: "Only Sketch"
- * SSL Support: "All SSL ciphers (most compatible)"
- * COM Port: Depends *On Your System*
- *********************************************************************************************************************/
- /*
- This is an example file for using the time function in ESP8266 or ESP32 tu get NTP time
- It offers two functions:
- - getNTPtime(struct tm * info, uint32_t ms) where info is a structure which contains time
- information and ms is the time the service waits till it gets a response from NTP.
- Each time you cann this function it calls NTP over the net.
- If you do not want to call an NTP service every second, you can use
- - getTimeReducedTraffic(int ms) where ms is the the time between two physical NTP server calls. Betwwn these calls,
- the time structure is updated with the (inaccurate) timer. If you call NTP every few minutes you should be ok
- The time structure is called tm and has the following values:
- Definition of struct tm:
- Member Type Meaning Range
- tm_sec int seconds after the minute 0-61*
- tm_min int minutes after the hour 0-59
- tm_hour int hours since midnight 0-23
- tm_mday int day of the month 1-31
- tm_mon int months since January 0-11
- tm_year int years since 1900
- tm_wday int days since Sunday 0-6
- tm_yday int days since January 1 0-365
- tm_isdst int Daylight Saving Time flag
- because the values are somehow awkwardly defined, I introduce a function makeHumanreadable() where all values are adjusted according normal numbering.
- e.g. January is month 1 and not 0 And Sunday or Monday is weekday 1 not 0 (according definition of MONDAYFIRST)
- Showtime is an example on how you can use the time in your sketch
- The functions are inspired by work of G6EJD ( https://www.youtube.com/channel/UCgtlqH_lkMdIa4jZLItcsTg )
- */
- #include <WiFi.h>
- #include <time.h>
- const char* ssid = "masuku";
- const char* password = "mypasswort";
- const char* NTP_SERVER = "pool.ntp.org"; //ch.pool.ntp.org
- const char* TZ_INFO = "PST-8"; // enter your time zone (https://remotemonitoringsystems.ca/time-zone-abbreviations.php)
- tm timeinfo;
- time_t now;
- long unsigned lastNTPtime;
- unsigned long lastEntryTime;
- void setup()
- {
- Serial.begin(115200);
- Serial.println("\n\nNTP Time Test\n");
- WiFi.begin(ssid, password);
- Serial.print("Connecting to network");
- int counter = 0;
- while (WiFi.status() != WL_CONNECTED)
- {
- delay(200);
- if (++counter > 100)
- ESP.restart();
- Serial.print( "." );
- }
- Serial.println("\nWiFi connected\n\n");
- configTime(0, 0, NTP_SERVER);
- // See https://github.com/nayarsystems/posix_tz_db/blob/master/zones.csv for Timezone codes for your region
- setenv("TZ", TZ_INFO, 1);
- if (getNTPtime(10))
- {
- // wait up to 10sec to sync
- }
- else
- {
- Serial.println("Time not set");
- ESP.restart();
- }
- showTime(&timeinfo);
- lastNTPtime = time(&now);
- lastEntryTime = millis();
- }
- void loop()
- {
- getNTPtime(10);
- showTime(&timeinfo);
- delay(1000);
- }
- bool getNTPtime(int sec)
- {
- {
- uint32_t start = millis();
- do
- {
- time(&now);
- localtime_r(&now, &timeinfo);
- delay(10);
- } while (((millis() - start) <= (1000 * sec)) && (timeinfo.tm_year < (2016 - 1900)));
- if (timeinfo.tm_year <= (2016 - 1900))
- return false; // the NTP call was not successful
- //Serial.print("Time Now: ");
- //Serial.println(now);
- }
- return true;
- }
- void showTime(tm *localTime)
- {
- char time_output[30];
- sprintf(time_output, "%02d/%02d/%02d %02d:%02d:%02d", localTime->tm_mday, localTime->tm_mon + 1, localTime->tm_year - 100, localTime->tm_hour, localTime->tm_min, localTime->tm_sec);
- Serial.println(time_output);
- }
- char * getDOW(uint8_t tm_wday)
- {
- switch(tm_wday)
- {
- case 0:
- return "Sunday";
- break;
- case 1:
- return "Monday";
- break;
- case 2:
- return "Tuesday";
- break;
- case 3:
- return "Wednesday";
- break;
- case 4:
- return "Thursday";
- break;
- case 5:
- return "Friday";
- break;
- case 6:
- return "Saturday";
- break;
- default:
- return "Error";
- break;
- }
- }
Add Comment
Please, Sign In to add comment