diff --git a/examples/Simple/Simple.ino b/examples/Simple/Simple.ino
index 9cab7e5..ef31f55 100644
--- a/examples/Simple/Simple.ino
+++ b/examples/Simple/Simple.ino
@@ -22,15 +22,104 @@ ESP8266WebServer Server;
#elif defined(ARDUINO_ARCH_ESP32)
WebServer Server;
#endif
-AutoConnect Portal(Server);
-AutoConnectConfig Config; // Enable autoReconnect supported on v0.9.4
-#define TIMEZONE (3600 * 9) // Tokyo
-#define NTPServer1 "ntp.nict.jp" // NICT japan.
-#define NTPServer2 "time1.google.com"
+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": [
+ "Europe/London",
+ "Europe/Berlin",
+ "Europe/Helsinki",
+ "Europe/Moscow",
+ "Asia/Dubai",
+ "Asia/Karachi",
+ "Asia/Dhaka",
+ "Asia/Jakarta",
+ "Asia/Manila",
+ "Asia/Tokyo",
+ "Australia/Brisbane",
+ "Pacific/Noumea",
+ "Pacific/Auckland",
+ "Pacific/Tongatapu",
+ "Pacific/Kiritimati",
+ "America/Sao_Paulo",
+ "America/Santiago",
+ "America/Detroit",
+ "America/Chicago",
+ "America/Denver",
+ "America/LosAngeles",
+ "America/Anchorage",
+ "Pacific/Honolulu",
+ "Pacific/Samoa"
+ ]
+ },
+ {
+ "name": "newline",
+ "type": "ACElement",
+ "value": "
"
+ },
+ {
+ "name": "start",
+ "type": "ACSubmit",
+ "value": "OK",
+ "uri": "/start"
+ }
+ ]
+}
+)";
+
+typedef struct {
+ char* zone;
+ 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 }
+};
+
+AutoConnect Portal(Server);
+AutoConnectConfig Config; // Enable autoReconnect supported on v0.9.4
+AutoConnectAux Timezone;
void rootPage() {
- String content =
+ String content =
""
"
" AUTOCONNECT_LINK(COG_32) "
" + "Reload the page to update the time.
" + "" AUTOCONNECT_LINK(COG_24) "
" "" ""; static const char *wd[7] = { "Sun","Mon","Tue","Wed","Thr","Fri","Sat" }; @@ -56,23 +146,49 @@ void rootPage() { 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(); - // Behavior a root path of ESP8266WebServer. - Server.on("/", rootPage); - // Enable saved past credential by autoReconnect option, // even once it is disconnected. Config.autoReconnect = true; Portal.config(Config); + Timezone.load(AUX_TIMEZONE); // Load aux. page + 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()); - configTime(TIMEZONE, 0, NTPServer1, NTPServer2); } }