/* Simple.ino, Example for the AutoConnect library. Copyright (c) 2018, Hieromon Ikasamo https://github.com/Hieromon/AutoConnect This software is released under the MIT License. https://opensource.org/licenses/MIT */ #if defined(ARDUINO_ARCH_ESP8266) #include #include #elif defined(ARDUINO_ARCH_ESP32) #include #include #endif #include #include static const char AUX_TIMEZONE[] PROGMEM = R"( { "title": "TimeZone", "uri": "/timezone", "menu": true, "element": [ { "name": "caption", "type": "ACText", "value": "Sets the time zone to get the current local time.", "style": "font-family:Arial;font-weight:bold;text-align:center;margin-bottom:10px;color:DarkSlateBlue" }, { "name": "timezone", "type": "ACSelect", "label": "Select TZ name", "option": [] }, { "name": "newline", "type": "ACElement", "value": "
" }, { "name": "start", "type": "ACSubmit", "value": "OK", "uri": "/start" } ] } )"; typedef struct { const char* zone; const char* ntpServer; int8_t tzoff; } Timezone_t; static const Timezone_t TZ[] = { { "Europe/London", "europe.pool.ntp.org", 0 }, { "Europe/Berlin", "europe.pool.ntp.org", 1 }, { "Europe/Helsinki", "europe.pool.ntp.org", 2 }, { "Europe/Moscow", "europe.pool.ntp.org", 3 }, { "Asia/Dubai", "asia.pool.ntp.org", 4 }, { "Asia/Karachi", "asia.pool.ntp.org", 5 }, { "Asia/Dhaka", "asia.pool.ntp.org", 6 }, { "Asia/Jakarta", "asia.pool.ntp.org", 7 }, { "Asia/Manila", "asia.pool.ntp.org", 8 }, { "Asia/Tokyo", "asia.pool.ntp.org", 9 }, { "Australia/Brisbane", "oceania.pool.ntp.org", 10 }, { "Pacific/Noumea", "oceania.pool.ntp.org", 11 }, { "Pacific/Auckland", "oceania.pool.ntp.org", 12 }, { "Atlantic/Azores", "europe.pool.ntp.org", -1 }, { "America/Noronha", "south-america.pool.ntp.org", -2 }, { "America/Araguaina", "south-america.pool.ntp.org", -3 }, { "America/Blanc-Sablon", "north-america.pool.ntp.org", -4}, { "America/New_York", "north-america.pool.ntp.org", -5 }, { "America/Chicago", "north-america.pool.ntp.org", -6 }, { "America/Denver", "north-america.pool.ntp.org", -7 }, { "America/Los_Angeles", "north-america.pool.ntp.org", -8 }, { "America/Anchorage", "north-america.pool.ntp.org", -9 }, { "Pacific/Honolulu", "north-america.pool.ntp.org", -10 }, { "Pacific/Samoa", "oceania.pool.ntp.org", -11 } }; #if defined(ARDUINO_ARCH_ESP8266) ESP8266WebServer Server; #elif defined(ARDUINO_ARCH_ESP32) WebServer Server; #endif AutoConnect Portal(Server); AutoConnectConfig Config; // Enable autoReconnect supported on v0.9.4 AutoConnectAux Timezone; void rootPage() { String content = "" "" "" "" "" "

Hello, world

" "

{{DateTime}}

" "

Reload the page to update the time.

" "

" AUTOCONNECT_LINK(COG_24) "

" "" ""; static const char *wd[7] = { "Sun","Mon","Tue","Wed","Thr","Fri","Sat" }; struct tm *tm; time_t t; char dateTime[26]; t = time(NULL); tm = localtime(&t); sprintf(dateTime, "%04d/%02d/%02d(%s) %02d:%02d:%02d.", tm->tm_year + 1900, tm->tm_mon + 1, tm->tm_mday, wd[tm->tm_wday], tm->tm_hour, tm->tm_min, tm->tm_sec); content.replace("{{DateTime}}", String(dateTime)); Server.send(200, "text/html", content); } void startPage() { // Retrieve the value of AutoConnectElement with arg function of WebServer class. // Values are accessible with the element name. String tz = Server.arg("timezone"); for (uint8_t n = 0; n < sizeof(TZ) / sizeof(Timezone_t); n++) { String tzName = String(TZ[n].zone); if (tz.equalsIgnoreCase(tzName)) { configTime(TZ[n].tzoff * 3600, 0, TZ[n].ntpServer); Serial.println("Time zone: " + tz); Serial.println("ntp server: " + String(TZ[n].ntpServer)); break; } } // The /start page just constitutes timezone, // it redirects to the root page without the content response. Server.sendHeader("Location", String("http://") + Server.client().localIP().toString() + String("/")); Server.send(302, "text/plain", ""); Server.client().flush(); Server.client().stop(); } void setup() { delay(1000); Serial.begin(115200); Serial.println(); // Enable saved past credential by autoReconnect option, // even once it is disconnected. Config.autoReconnect = true; Portal.config(Config); // Load aux. page Timezone.load(AUX_TIMEZONE); // Retrieve the select element that holds the time zone code and // register the zone mnemonic in advance. AutoConnectSelect& tz = Timezone["timezone"].as(); for (uint8_t n = 0; n < sizeof(TZ) / sizeof(Timezone_t); n++) { tz.add(String(TZ[n].zone)); } Portal.join({ Timezone }); // Register aux. page // Behavior a root path of ESP8266WebServer. Server.on("/", rootPage); Server.on("/start", startPage); // Set NTP server trigger handler // Establish a connection with an autoReconnect option. if (Portal.begin()) { Serial.println("WiFi connected: " + WiFi.localIP().toString()); } } void loop() { Portal.handleClient(); }