DynamicPage.ino 2.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101
  1. #if defined(ARDUINO_ARCH_ESP8266)
  2. #include <ESP8266WiFi.h>
  3. #include <ESP8266WebServer.h>
  4. #elif defined(ARDUINO_ARCH_ESP32)
  5. #include <WiFi.h>
  6. #include <WebServer.h>
  7. #endif
  8. #include <PageBuilder.h>
  9. // Modify according to your Wi-Fi environment.
  10. #define SSID "wifissid"
  11. #define PSK "wifipassword"
  12. #if defined(ARDUINO_ARCH_ESP8266)
  13. ESP8266WebServer server;
  14. #elif defined(ARDUINO_ARCH_ESP32)
  15. WebServer server;
  16. #endif
  17. PageElement elm;
  18. PageBuilder page;
  19. String currentUri;
  20. // The root page content builder
  21. String rootPage(PageArgument& args) {
  22. return String(F("This is root page."));
  23. }
  24. // The hello page content builder
  25. String helloPage(PageArgument& args) {
  26. return String(F("This is hello page."));
  27. }
  28. // This function creates dynamic web page by each request.
  29. // It is called twice at one time URI request that caused by the structure
  30. // of ESP8266WebServer class.
  31. bool handleAcs(HTTPMethod method, String uri) {
  32. if (uri == currentUri) {
  33. // Page is already prepared.
  34. return true;
  35. } else {
  36. currentUri = uri;
  37. page.clearElement(); // Discards the remains of PageElement.
  38. page.addElement(elm); // Register PageElement for current access.
  39. Serial.println("Request:" + uri);
  40. if (uri == "/") { // for the / page
  41. page.setUri(uri.c_str());
  42. elm.setMold(PSTR(
  43. "<html>"
  44. "<body>"
  45. "<h2>{{ROOT}}</h2>"
  46. "</body>"
  47. "</html>"));
  48. elm.addToken("ROOT", rootPage);
  49. return true;
  50. }
  51. else if (uri == "/hello") { // for the /hello page
  52. page.setUri(uri.c_str());
  53. elm.setMold(PSTR(
  54. "<html>"
  55. "<body>"
  56. "<p style=\"color:Tomato;\">{{HELLO}}</p>"
  57. "</body>"
  58. "</html>"));
  59. elm.addToken("HELLO", helloPage);
  60. return true;
  61. }
  62. else {
  63. return false; // Not found to accessing exception URI.
  64. }
  65. }
  66. }
  67. void setup() {
  68. delay(1000);
  69. Serial.begin(115200);
  70. Serial.println();
  71. WiFi.mode(WIFI_STA);
  72. delay(100);
  73. WiFi.begin(SSID, PSK);
  74. while (WiFi.waitForConnectResult() != WL_CONNECTED) {
  75. delay(100);
  76. }
  77. // Prepare dynamic web page
  78. page.exitCanHandle(handleAcs); // Handles for all requests.
  79. page.insert(server);
  80. // Start web server
  81. server.begin();
  82. Serial.print("http server:");
  83. Serial.println(WiFi.localIP());
  84. }
  85. void loop() {
  86. server.handleClient();
  87. }