32
32
33
33
#include < ESP8266WiFi.h>
34
34
#include < WiFiClient.h>
35
+ #include < ESP8266WebServer.h>
35
36
36
37
/*
37
38
Include the MDNSResponder (the library needs to be included also)
@@ -69,8 +70,8 @@ MDNSResponder::hMDNSServiceQuery hMDNSServiceQuery = 0;
69
70
const String cstrNoHTTPServices = " Currently no 'http.tcp' services in the local network!<br/>" ;
70
71
String strHTTPServices = cstrNoHTTPServices;
71
72
72
- // TCP server at port 'SERVICE_PORT' will respond to HTTP requests
73
- WiFiServer server (SERVICE_PORT);
73
+ // HTTP server at port 'SERVICE_PORT' will respond to HTTP requests
74
+ ESP8266WebServer server (SERVICE_PORT);
74
75
75
76
76
77
/*
@@ -145,21 +146,19 @@ bool MDNSServiceQueryCallback(MDNSResponder* p_pMDNSResponder,
145
146
strHTTPServices = " " ;
146
147
for (uint32_t u = 0 ; u < u32Answers; ++u) {
147
148
// Index and service domain
148
- strHTTPServices += u;
149
- strHTTPServices += " : " ;
149
+ strHTTPServices += " <li>" ;
150
150
strHTTPServices += p_pMDNSResponder->answerServiceDomain (p_hServiceQuery, u);
151
151
// Host domain and port
152
152
if ((p_pMDNSResponder->hasAnswerHostDomain (p_hServiceQuery, u)) &&
153
153
(p_pMDNSResponder->hasAnswerPort (p_hServiceQuery, u))) {
154
-
155
- strHTTPServices += " at " ;
154
+ strHTTPServices += " <br/>Hostname: " ;
156
155
strHTTPServices += p_pMDNSResponder->answerHostDomain (p_hServiceQuery, u);
157
156
strHTTPServices += " :" ;
158
157
strHTTPServices += p_pMDNSResponder->answerPort (p_hServiceQuery, u);
159
158
}
160
159
// IP4 address
161
160
if (p_pMDNSResponder->hasAnswerIP4Address (p_hServiceQuery, u)) {
162
- strHTTPServices += " IP4: " ;
161
+ strHTTPServices += " <br/> IP4: " ;
163
162
for (uint32_t u2 = 0 ; u2 < p_pMDNSResponder->answerIP4AddressCount (p_hServiceQuery, u); ++u2) {
164
163
if (0 != u2) {
165
164
strHTTPServices += " , " ;
@@ -169,10 +168,10 @@ bool MDNSServiceQueryCallback(MDNSResponder* p_pMDNSResponder,
169
168
}
170
169
// MDNS TXT items
171
170
if (p_pMDNSResponder->hasAnswerTxts (p_hServiceQuery, u)) {
172
- strHTTPServices += " TXT: " ;
171
+ strHTTPServices += " <br/> TXT: " ;
173
172
strHTTPServices += p_pMDNSResponder->answerTxts (p_hServiceQuery, u);
174
173
}
175
- strHTTPServices += " <br/ >" ;
174
+ strHTTPServices += " </li >" ;
176
175
}
177
176
} else {
178
177
strHTTPServices = cstrNoHTTPServices;
@@ -181,7 +180,6 @@ bool MDNSServiceQueryCallback(MDNSResponder* p_pMDNSResponder,
181
180
return true ;
182
181
}
183
182
184
-
185
183
/*
186
184
MDNSProbeResultCallback
187
185
@@ -246,58 +244,24 @@ bool MDNSProbeResultCallback(MDNSResponder* p_pMDNSResponder,
246
244
return true ;
247
245
}
248
246
249
-
250
247
/*
251
- handleHTTPClient
248
+ HTTP request function (not found is handled by server)
252
249
*/
253
- void handleHTTPClient (WiFiClient& client ) {
250
+ void handleHTTPRequest ( ) {
254
251
Serial.println (" " );
255
- Serial.println (" New client" );
256
-
257
- // Wait for data from client to become available
258
- while (client.connected () && !client.available ()) {
259
- delay (1 );
260
- }
261
-
262
- // Read the first line of HTTP request
263
- String req = client.readStringUntil (' \r ' );
264
-
265
- // First line of HTTP request looks like "GET /path HTTP/1.1"
266
- // Retrieve the "/path" part by finding the spaces
267
- int addr_start = req.indexOf (' ' );
268
- int addr_end = req.indexOf (' ' , addr_start + 1 );
269
- if (addr_start == -1 || addr_end == -1 ) {
270
- Serial.print (" Invalid request: " );
271
- Serial.println (req);
272
- return ;
273
- }
274
- req = req.substring (addr_start + 1 , addr_end);
275
- Serial.print (" Request: " );
276
- Serial.println (req);
277
- client.flush ();
278
-
279
- String s;
280
- if (req == " /" ) {
281
- IPAddress ip = WiFi.localIP ();
282
- String ipStr = String (ip[0 ]) + ' .' + String (ip[1 ]) + ' .' + String (ip[2 ]) + ' .' + String (ip[3 ]);
283
- s = " HTTP/1.1 200 OK\r\n Content-Type: text/html\r\n\r\n <!DOCTYPE HTML>\r\n <html>Hello from " ;
284
- s += WiFi.hostname () + " at " + ipStr;
285
- // Simple addition of the current time
286
- s += " <br/>Local HTTP services:<br/>" ;
287
- s += strHTTPServices;
288
- // done :-)
289
- s += " </html>\r\n\r\n " ;
290
- Serial.println (" Sending 200" );
291
- } else {
292
- s = " HTTP/1.1 404 Not Found\r\n\r\n " ;
293
- Serial.println (" Sending 404" );
294
- }
295
- client.print (s);
296
-
297
- Serial.println (" Done with client" );
252
+ Serial.println (" HTTP Request" );
253
+
254
+ String s = " <!DOCTYPE HTML>\r\n <html><h3><head>Hello from " ;
255
+ s += WiFi.hostname () + " .local at " + WiFi.localIP ().toString () + " </h3></head>" ;
256
+ s += " <br/><h4>Local HTTP services are :</h4><ol>" ;
257
+ s += strHTTPServices;
258
+ // done :-)
259
+ s += " </ol></html>" ;
260
+ Serial.println (" Sending 200" );
261
+ server.send (200 , " text/html" , s);
262
+ Serial.println (" Done with request" );
298
263
}
299
264
300
-
301
265
/*
302
266
setup
303
267
*/
@@ -321,6 +285,9 @@ void setup(void) {
321
285
Serial.print (" IP address: " );
322
286
Serial.println (WiFi.localIP ());
323
287
288
+ // Setup HTTP server
289
+ server.on (" /" , handleHTTPRequest);
290
+
324
291
// Setup MDNS responder
325
292
MDNS.setProbeResultCallback (MDNSProbeResultCallback, 0 );
326
293
// Init the (currently empty) host domain string with 'esp8266'
@@ -333,24 +300,18 @@ void setup(void) {
333
300
}
334
301
Serial.println (" MDNS responder started" );
335
302
336
- // Start TCP ( HTTP) server
303
+ // Start HTTP server
337
304
server.begin ();
338
- Serial.println (" TCP server started" );
305
+ Serial.println (" HTTP server started" );
339
306
}
340
307
341
308
342
309
/*
343
310
loop
344
311
*/
345
312
void loop (void ) {
346
- // Check if a client has connected
347
- WiFiClient client = server.available ();
348
- if (client) {
349
- handleHTTPClient (client);
350
- }
351
-
313
+ // Check if a request has come in
314
+ server.handleClient ();
352
315
// Allow MDNS processing
353
316
MDNS.update ();
354
317
}
355
-
356
-
0 commit comments