Subversion Repositories ESP8266_P1_Meter

Rev

Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
2 raymond 1
// SPDX-License-Identifier: LGPL-3.0-or-later
2
// Copyright 2016-2026 Hristo Gochkov, Mathieu Carbou, Emil Muratov, Will Miles
3
 
4
//
5
// Shows how to catch all requests and send a 404 Not Found response
6
//
7
 
8
#include <Arduino.h>
9
#include <AsyncTCP.h>
10
#include <WiFi.h>
11
 
12
#include <ESPAsyncWebServer.h>
13
 
14
static AsyncWebServer server(80);
15
 
16
static const char *htmlContent PROGMEM = R"(
17
<!DOCTYPE html>
18
<html>
19
<head>
20
    <title>Sample HTML</title>
21
</head>
22
<body>
23
    <h1>Hello, World!</h1>
24
    <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Proin euismod, purus a euismod
25
    rhoncus, urna ipsum cursus massa, eu dictum tellus justo ac justo. Quisque ullamcorper
26
    arcu nec tortor ullamcorper, vel fermentum justo fermentum. Vivamus sed velit ut elit
27
    accumsan congue ut ut enim. Ut eu justo eu lacus varius gravida ut a tellus. Nulla facilisi.
28
    Integer auctor consectetur ultricies. Fusce feugiat, mi sit amet bibendum viverra, orci leo
29
    dapibus elit, id varius sem dui id lacus.</p>
30
    <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Proin euismod, purus a euismod
31
    rhoncus, urna ipsum cursus massa, eu dictum tellus justo ac justo. Quisque ullamcorper
32
    arcu nec tortor ullamcorper, vel fermentum justo fermentum. Vivamus sed velit ut elit
33
    accumsan congue ut ut enim. Ut eu justo eu lacus varius gravida ut a tellus. Nulla facilisi.
34
    Integer auctor consectetur ultricies. Fusce feugiat, mi sit amet bibendum viverra, orci leo
35
    dapibus elit, id varius sem dui id lacus.</p>
36
    <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Proin euismod, purus a euismod
37
    rhoncus, urna ipsum cursus massa, eu dictum tellus justo ac justo. Quisque ullamcorper
38
    arcu nec tortor ullamcorper, vel fermentum justo fermentum. Vivamus sed velit ut elit
39
    accumsan congue ut ut enim. Ut eu justo eu lacus varius gravida ut a tellus. Nulla facilisi.
40
    Integer auctor consectetur ultricies. Fusce feugiat, mi sit amet bibendum viverra, orci leo
41
    dapibus elit, id varius sem dui id lacus.</p>
42
    <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Proin euismod, purus a euismod
43
    rhoncus, urna ipsum cursus massa, eu dictum tellus justo ac justo. Quisque ullamcorper
44
    arcu nec tortor ullamcorper, vel fermentum justo fermentum. Vivamus sed velit ut elit
45
    accumsan congue ut ut enim. Ut eu justo eu lacus varius gravida ut a tellus. Nulla facilisi.
46
    Integer auctor consectetur ultricies. Fusce feugiat, mi sit amet bibendum viverra, orci leo
47
    dapibus elit, id varius sem dui id lacus.</p>
48
    <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Proin euismod, purus a euismod
49
    rhoncus, urna ipsum cursus massa, eu dictum tellus justo ac justo. Quisque ullamcorper
50
    arcu nec tortor ullamcorper, vel fermentum justo fermentum. Vivamus sed velit ut elit
51
    accumsan congue ut ut enim. Ut eu justo eu lacus varius gravida ut a tellus. Nulla facilisi.
52
    Integer auctor consectetur ultricies. Fusce feugiat, mi sit amet bibendum viverra, orci leo
53
    dapibus elit, id varius sem dui id lacus.</p>
54
    <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Proin euismod, purus a euismod
55
    rhoncus, urna ipsum cursus massa, eu dictum tellus justo ac justo. Quisque ullamcorper
56
    arcu nec tortor ullamcorper, vel fermentum justo fermentum. Vivamus sed velit ut elit
57
    accumsan congue ut ut enim. Ut eu justo eu lacus varius gravida ut a tellus. Nulla facilisi.
58
    Integer auctor consectetur ultricies. Fusce feugiat, mi sit amet bibendum viverra, orci leo
59
    dapibus elit, id varius sem dui id lacus.</p>
60
    <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Proin euismod, purus a euismod
61
    rhoncus, urna ipsum cursus massa, eu dictum tellus justo ac justo. Quisque ullamcorper
62
    arcu nec tortor ullamcorper, vel fermentum justo fermentum. Vivamus sed velit ut elit
63
    accumsan congue ut ut enim. Ut eu justo eu lacus varius gravida ut a tellus. Nulla facilisi.
64
    Integer auctor consectetur ultricies. Fusce feugiat, mi sit amet bibendum viverra, orci leo
65
    dapibus elit, id varius sem dui id lacus.</p>
66
    <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Proin euismod, purus a euismod
67
    rhoncus, urna ipsum cursus massa, eu dictum tellus justo ac justo. Quisque ullamcorper
68
    arcu nec tortor ullamcorper, vel fermentum justo fermentum. Vivamus sed velit ut elit
69
    accumsan congue ut ut enim. Ut eu justo eu lacus varius gravida ut a tellus. Nulla facilisi.
70
    Integer auctor consectetur ultricies. Fusce feugiat, mi sit amet bibendum viverra, orci leo
71
    dapibus elit, id varius sem dui id lacus.</p>
72
</body>
73
</html>
74
)";
75
 
76
static const size_t htmlContentLength = strlen_P(htmlContent);
77
 
78
void setup() {
79
  Serial.begin(115200);
80
 
81
#if SOC_WIFI_SUPPORTED || CONFIG_ESP_WIFI_REMOTE_ENABLED || LT_ARD_HAS_WIFI || CONFIG_ESP32_WIFI_ENABLED
82
  WiFi.mode(WIFI_AP);
83
  WiFi.softAP("esp-captive");
84
#endif
85
 
86
  // curl -v http://192.168.4.1/
87
  server.on("/", HTTP_GET, [](AsyncWebServerRequest *request) {
88
    // need to cast to uint8_t*
89
    // if you do not, the const char* will be copied in a temporary String buffer
90
    request->send(200, "text/html", (uint8_t *)htmlContent, htmlContentLength);
91
  });
92
 
93
  // catch any request, and send a 404 Not Found response
94
  // except for /game_log which is handled by onRequestBody
95
  //
96
  // curl -v http://192.168.4.1/foo
97
  //
98
  server.onNotFound([](AsyncWebServerRequest *request) {
99
    if (request->url() == "/game_log") {
100
      return;  // response object already created by onRequestBody
101
    }
102
 
103
    request->send(404, "text/plain", "Not found");
104
  });
105
 
106
  // See: https://github.com/ESP32Async/ESPAsyncWebServer/issues/6
107
  // catch any POST request and send a 200 OK response
108
  //
109
  // curl -v -X POST http://192.168.4.1/game_log -H "Content-Type: application/json" -d '{"game": "test"}'
110
  //
111
  server.onRequestBody([](AsyncWebServerRequest *request, uint8_t *data, size_t len, size_t index, size_t total) {
112
    if (request->url() == "/game_log") {
113
      request->send(200, "application/json", "{\"status\":\"OK\"}");
114
    }
115
    // note that there is no else here: the goal is only to prepare a response based on some body content
116
    // onNotFound will always be called after this, and will not override the response object if `/game_log` is requested
117
  });
118
 
119
  server.begin();
120
}
121
 
122
// not needed
123
void loop() {
124
  delay(100);
125
}