123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131 |
- /*
- HandlePortal.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
- */
- /*
- This is a way of not explicitly declaring ESP8266WebServer. It uses
- the ESP8266WebServer function without its declaration.
- I recommend that you consider this example compared to HandlePortalEX.ino.
- https://github.com/Hieromon/AutoConnect/blob/master/examples/HandlePortalEX/HandlePortalEX.ino
- It will help you understand AutoConnect usage.
- */
- #if defined(ARDUINO_ARCH_ESP8266)
- #include <ESP8266WiFi.h>
- #include <ESP8266WebServer.h>
- #elif defined(ARDUINO_ARCH_ESP32)
- #include <WiFi.h>
- #include <WebServer.h>
- #endif
- #include <AutoConnect.h>
- #ifndef BUILTIN_LED
- #define BUILTIN_LED 2 // backward compatibility
- #endif
- AutoConnect portal;
- void handleRoot() {
- String page = PSTR(
- "<html>"
- "<head>"
- "<meta name=\"viewport\" content=\"width=device-width, initial-scale=1\">"
- "<style type=\"text/css\">"
- "body {"
- "-webkit-appearance:none;"
- "-moz-appearance:none;"
- "font-family:'Arial',sans-serif;"
- "text-align:center;"
- "}"
- ".menu > a:link {"
- "position: absolute;"
- "display: inline-block;"
- "right: 12px;"
- "padding: 0 6px;"
- "text-decoration: none;"
- "}"
- ".button {"
- "display:inline-block;"
- "border-radius:7px;"
- "background:#73ad21;"
- "margin:0 10px 0 10px;"
- "padding:10px 20px 10px 20px;"
- "text-decoration:none;"
- "color:#000000;"
- "}"
- "</style>"
- "</head>"
- "<body>"
- "<div class=\"menu\">" AUTOCONNECT_LINK(BAR_32) "</div>"
- "BUILT-IN LED<br>"
- "GPIO(");
- page += String(BUILTIN_LED);
- page += String(F(") : <span style=\"font-weight:bold;color:"));
- page += digitalRead(BUILTIN_LED) ? String("Tomato\">HIGH") : String("SlateBlue\">LOW");
- page += String(F("</span>"));
- page += String(F("<p><a class=\"button\" href=\"/io?v=low\">low</a><a class=\"button\" href=\"/io?v=high\">high</a></p>"));
- page += String(F("</body></html>"));
- portal.host().send(200, "text/html", page);
- }
- void sendRedirect(String uri) {
- WebServerClass& server = portal.host();
- server.sendHeader("Location", uri, true);
- server.send(302, "text/plain", "");
- server.client().stop();
- }
- void handleGPIO() {
- WebServerClass& server = portal.host();
- if (server.arg("v") == "low")
- digitalWrite(BUILTIN_LED, LOW);
- else if (server.arg("v") == "high")
- digitalWrite(BUILTIN_LED, HIGH);
- sendRedirect("/");
- }
- bool atDetect(IPAddress& softapIP) {
- Serial.println("Captive portal started, SoftAP IP:" + softapIP.toString());
- return true;
- }
- void setup() {
- delay(1000);
- Serial.begin(115200);
- Serial.println();
- pinMode(BUILTIN_LED, OUTPUT);
- // Put the home location of the web site.
- // But in usually, setting the home uri is not needed cause default location is "/".
- //portal.home("/");
- // Starts user web site included the AutoConnect portal.
- portal.onDetect(atDetect);
- if (portal.begin()) {
- WebServerClass& server = portal.host();
- server.on("/", handleRoot);
- server.on("/io", handleGPIO);
- Serial.println("Started, IP:" + WiFi.localIP().toString());
- }
- else {
- Serial.println("Connection failed.");
- while (true) { yield(); }
- }
- }
- void loop() {
- portal.handleClient();
- if (WiFi.status() == WL_IDLE_STATUS) {
- #if defined(ARDUINO_ARCH_ESP8266)
- ESP.reset();
- #elif defined(ARDUINO_ARCH_ESP32)
- ESP.restart();
- #endif
- delay(1000);
- }
- }
|