<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://onnocenter.or.id/wiki/index.php?action=history&amp;feed=atom&amp;title=WeMOS%3A_NTP</id>
	<title>WeMOS: NTP - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://onnocenter.or.id/wiki/index.php?action=history&amp;feed=atom&amp;title=WeMOS%3A_NTP"/>
	<link rel="alternate" type="text/html" href="https://onnocenter.or.id/wiki/index.php?title=WeMOS:_NTP&amp;action=history"/>
	<updated>2026-04-07T23:34:46Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.35.4</generator>
	<entry>
		<id>https://onnocenter.or.id/wiki/index.php?title=WeMOS:_NTP&amp;diff=57251&amp;oldid=prev</id>
		<title>Onnowpurbo: Created page with &quot; /*    NTP-TZ-DST    NetWork Time Protocol - Time Zone - Daylight Saving Time        This example shows how to read and set time,    and how to use NTP (set NTP0_OR_LOCAL1 to...&quot;</title>
		<link rel="alternate" type="text/html" href="https://onnocenter.or.id/wiki/index.php?title=WeMOS:_NTP&amp;diff=57251&amp;oldid=prev"/>
		<updated>2019-09-27T02:12:09Z</updated>

		<summary type="html">&lt;p&gt;Created page with &amp;quot; /*    NTP-TZ-DST    NetWork Time Protocol - Time Zone - Daylight Saving Time        This example shows how to read and set time,    and how to use NTP (set NTP0_OR_LOCAL1 to...&amp;quot;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt; /*&lt;br /&gt;
   NTP-TZ-DST&lt;br /&gt;
   NetWork Time Protocol - Time Zone - Daylight Saving Time  &lt;br /&gt;
 &lt;br /&gt;
   This example shows how to read and set time,&lt;br /&gt;
   and how to use NTP (set NTP0_OR_LOCAL1 to 0 below)&lt;br /&gt;
   or an external RTC (set NTP0_OR_LOCAL1 to 1 below)&lt;br /&gt;
 &lt;br /&gt;
   TZ and DST below have to be manually set&lt;br /&gt;
   according to your local settings. &lt;br /&gt;
 &lt;br /&gt;
   This example code is in the public domain.&lt;br /&gt;
 */&lt;br /&gt;
 &lt;br /&gt;
 #include &amp;lt;ESP8266WiFi.h&amp;gt;&lt;br /&gt;
 #include &amp;lt;time.h&amp;gt;                       // time() ctime()&lt;br /&gt;
 #include &amp;lt;sys/time.h&amp;gt;                   // struct timeval&lt;br /&gt;
 #include &amp;lt;coredecls.h&amp;gt;                  // settimeofday_cb()&lt;br /&gt;
 &lt;br /&gt;
 //////////////////////////////////////////////////////// &lt;br /&gt;
 &lt;br /&gt;
 #ifndef STASSID&lt;br /&gt;
 #define STASSID &amp;quot;ssidhotspot&amp;quot;&lt;br /&gt;
 #define STAPSK  &amp;quot;passwordhotspot&amp;quot;&lt;br /&gt;
 #endif&lt;br /&gt;
 &lt;br /&gt;
 #define SSID            STASSID&lt;br /&gt;
 #define SSIDPWD         STAPSK&lt;br /&gt;
 #define TZ              7       // (utc+) TZ in hours&lt;br /&gt;
 #define DST_MN          60      // use 60mn for summer time in some countries&lt;br /&gt;
 &lt;br /&gt;
 #define NTP0_OR_LOCAL1  1       // 0:use NTP  1:fake external RTC&lt;br /&gt;
 #define RTC_TEST     1510592825 // 1510592825 = Monday 13 November 2017 17:07:05 UTC&lt;br /&gt;
 &lt;br /&gt;
 ////////////////////////////////////////////////////////&lt;br /&gt;
 &lt;br /&gt;
 #define TZ_MN           ((TZ)*60)&lt;br /&gt;
 #define TZ_SEC          ((TZ)*3600)&lt;br /&gt;
 #define DST_SEC         ((DST_MN)*60)&lt;br /&gt;
 &lt;br /&gt;
 timeval cbtime;			// time set in callback&lt;br /&gt;
 bool cbtime_set = false;&lt;br /&gt;
 &lt;br /&gt;
 void time_is_set(void) {&lt;br /&gt;
   gettimeofday(&amp;amp;cbtime, NULL);&lt;br /&gt;
   cbtime_set = true;&lt;br /&gt;
   Serial.println(&amp;quot;------------------ settimeofday() was called ------------------&amp;quot;);&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 void setup() {&lt;br /&gt;
   Serial.begin(115200);&lt;br /&gt;
   settimeofday_cb(time_is_set);&lt;br /&gt;
 &lt;br /&gt;
 #if NTP0_OR_LOCAL1&lt;br /&gt;
   // local &lt;br /&gt;
 &lt;br /&gt;
   ESP.eraseConfig();&lt;br /&gt;
   time_t rtc = RTC_TEST;&lt;br /&gt;
   timeval tv = { rtc, 0 };&lt;br /&gt;
   timezone tz = { TZ_MN + DST_MN, 0 };&lt;br /&gt;
   settimeofday(&amp;amp;tv, &amp;amp;tz); &lt;br /&gt;
 &lt;br /&gt;
 #else // ntp&lt;br /&gt;
 &lt;br /&gt;
   configTime(TZ_SEC, DST_SEC, &amp;quot;pool.ntp.org&amp;quot;);&lt;br /&gt;
   WiFi.mode(WIFI_STA);&lt;br /&gt;
   WiFi.begin(SSID, SSIDPWD);&lt;br /&gt;
   // don't wait, observe time changing when ntp timestamp is received&lt;br /&gt;
 &lt;br /&gt;
 #endif // ntp&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 // for testing purpose:&lt;br /&gt;
 extern &amp;quot;C&amp;quot; int clock_gettime(clockid_t unused, struct timespec *tp); &lt;br /&gt;
 &lt;br /&gt;
 #define PTM(w) \&lt;br /&gt;
   Serial.print(&amp;quot;:&amp;quot; #w &amp;quot;=&amp;quot;); \&lt;br /&gt;
   Serial.print(tm-&amp;gt;tm_##w);&lt;br /&gt;
 &lt;br /&gt;
 void printTm(const char* what, const tm* tm) {&lt;br /&gt;
   Serial.print(what);&lt;br /&gt;
   PTM(isdst); PTM(yday); PTM(wday);&lt;br /&gt;
   PTM(year);  PTM(mon);  PTM(mday);&lt;br /&gt;
   PTM(hour);  PTM(min);  PTM(sec);&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 timeval tv;&lt;br /&gt;
 timespec tp;&lt;br /&gt;
 time_t now;&lt;br /&gt;
 uint32_t now_ms, now_us;&lt;br /&gt;
 &lt;br /&gt;
 void loop() {&lt;br /&gt;
 &lt;br /&gt;
   gettimeofday(&amp;amp;tv, nullptr);&lt;br /&gt;
   clock_gettime(0, &amp;amp;tp);&lt;br /&gt;
   now = time(nullptr);&lt;br /&gt;
   now_ms = millis();&lt;br /&gt;
   now_us = micros();&lt;br /&gt;
 &lt;br /&gt;
   // localtime / gmtime every second change&lt;br /&gt;
   static time_t lastv = 0;&lt;br /&gt;
   if (lastv != tv.tv_sec) {&lt;br /&gt;
     lastv = tv.tv_sec;&lt;br /&gt;
     Serial.println();&lt;br /&gt;
     printTm(&amp;quot;localtime&amp;quot;, localtime(&amp;amp;now));&lt;br /&gt;
     Serial.println();&lt;br /&gt;
     printTm(&amp;quot;gmtime   &amp;quot;, gmtime(&amp;amp;now));&lt;br /&gt;
     Serial.println();&lt;br /&gt;
     Serial.println();&lt;br /&gt;
   } &lt;br /&gt;
 &lt;br /&gt;
   // time from boot&lt;br /&gt;
   Serial.print(&amp;quot;clock:&amp;quot;);&lt;br /&gt;
   Serial.print((uint32_t)tp.tv_sec);&lt;br /&gt;
   Serial.print(&amp;quot;/&amp;quot;);&lt;br /&gt;
   Serial.print((uint32_t)tp.tv_nsec);&lt;br /&gt;
   Serial.print(&amp;quot;ns&amp;quot;); &lt;br /&gt;
 &lt;br /&gt;
   // time from boot&lt;br /&gt;
   Serial.print(&amp;quot; millis:&amp;quot;);&lt;br /&gt;
   Serial.print(now_ms);&lt;br /&gt;
   Serial.print(&amp;quot; micros:&amp;quot;);&lt;br /&gt;
   Serial.print(now_us);&lt;br /&gt;
 &lt;br /&gt;
   // EPOCH+tz+dst&lt;br /&gt;
   Serial.print(&amp;quot; gtod:&amp;quot;);&lt;br /&gt;
   Serial.print((uint32_t)tv.tv_sec);&lt;br /&gt;
   Serial.print(&amp;quot;/&amp;quot;);&lt;br /&gt;
   Serial.print((uint32_t)tv.tv_usec);&lt;br /&gt;
   Serial.print(&amp;quot;us&amp;quot;);&lt;br /&gt;
 &lt;br /&gt;
   // EPOCH+tz+dst&lt;br /&gt;
   Serial.print(&amp;quot; time:&amp;quot;);&lt;br /&gt;
   Serial.print((uint32_t)now);&lt;br /&gt;
 &lt;br /&gt;
   // human readable&lt;br /&gt;
   Serial.print(&amp;quot; ctime:(UTC+&amp;quot;);&lt;br /&gt;
   Serial.print((uint32_t)(TZ * 60 + DST_MN));&lt;br /&gt;
   Serial.print(&amp;quot;mn)&amp;quot;);&lt;br /&gt;
   Serial.print(ctime(&amp;amp;now)); &lt;br /&gt;
 &lt;br /&gt;
   // simple drifting loop&lt;br /&gt;
   delay(1000);&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Pranala Menarik==&lt;br /&gt;
&lt;br /&gt;
* [[WeMOS]]&lt;/div&gt;</summary>
		<author><name>Onnowpurbo</name></author>
	</entry>
</feed>