| 
									
										
										
										
											2017-03-11 07:15:44 +01:00
										 |  |  | /*
 | 
					
						
							|  |  |  |   ESP32 mDNS responder sample | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   This is an example of an HTTP server that is accessible | 
					
						
							|  |  |  |   via http://esp32.local URL thanks to mDNS responder.
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   Instructions: | 
					
						
							|  |  |  |   - Update WiFi SSID and password as necessary. | 
					
						
							|  |  |  |   - Flash the sketch to the ESP32 board | 
					
						
							|  |  |  |   - Install host software: | 
					
						
							|  |  |  |     - For Linux, install Avahi (http://avahi.org/).
 | 
					
						
							|  |  |  |     - For Windows, install Bonjour (http://www.apple.com/support/bonjour/).
 | 
					
						
							|  |  |  |     - For Mac OSX and iOS support is built in through Bonjour already. | 
					
						
							|  |  |  |   - Point your browser to http://esp32.local, you should see a response.
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |  */ | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #include <WiFi.h>
 | 
					
						
							|  |  |  | #include <ESPmDNS.h>
 | 
					
						
							|  |  |  | #include <WiFiClient.h>
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | const char* ssid = "............"; | 
					
						
							|  |  |  | const char* password = ".............."; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // TCP server at port 80 will respond to HTTP requests
 | 
					
						
							|  |  |  | WiFiServer server(80); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | void setup(void) | 
					
						
							|  |  |  | {   | 
					
						
							|  |  |  |     Serial.begin(115200); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     // Connect to WiFi network
 | 
					
						
							|  |  |  |     WiFi.begin(ssid, password); | 
					
						
							|  |  |  |     Serial.println(""); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     // Wait for connection
 | 
					
						
							|  |  |  |     while (WiFi.status() != WL_CONNECTED) { | 
					
						
							|  |  |  |         delay(500); | 
					
						
							|  |  |  |         Serial.print("."); | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  |     Serial.println(""); | 
					
						
							|  |  |  |     Serial.print("Connected to "); | 
					
						
							|  |  |  |     Serial.println(ssid); | 
					
						
							|  |  |  |     Serial.print("IP address: "); | 
					
						
							|  |  |  |     Serial.println(WiFi.localIP()); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     // Set up mDNS responder:
 | 
					
						
							|  |  |  |     // - first argument is the domain name, in this example
 | 
					
						
							| 
									
										
										
										
											2020-10-01 05:51:36 -05:00
										 |  |  |     //   the fully-qualified domain name is "esp32.local"
 | 
					
						
							| 
									
										
										
										
											2017-03-11 07:15:44 +01:00
										 |  |  |     // - second argument is the IP address to advertise
 | 
					
						
							|  |  |  |     //   we send our IP address on the WiFi network
 | 
					
						
							|  |  |  |     if (!MDNS.begin("esp32")) { | 
					
						
							|  |  |  |         Serial.println("Error setting up MDNS responder!"); | 
					
						
							|  |  |  |         while(1) { | 
					
						
							|  |  |  |             delay(1000); | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  |     Serial.println("mDNS responder started"); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     // Start TCP (HTTP) server
 | 
					
						
							|  |  |  |     server.begin(); | 
					
						
							|  |  |  |     Serial.println("TCP server started"); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     // Add service to MDNS-SD
 | 
					
						
							|  |  |  |     MDNS.addService("http", "tcp", 80); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | void loop(void) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     // Check if a client has connected
 | 
					
						
							|  |  |  |     WiFiClient client = server.available(); | 
					
						
							|  |  |  |     if (!client) { | 
					
						
							|  |  |  |         return; | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  |     Serial.println(""); | 
					
						
							|  |  |  |     Serial.println("New client"); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     // Wait for data from client to become available
 | 
					
						
							|  |  |  |     while(client.connected() && !client.available()){ | 
					
						
							|  |  |  |         delay(1); | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     // Read the first line of HTTP request
 | 
					
						
							|  |  |  |     String req = client.readStringUntil('\r'); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     // First line of HTTP request looks like "GET /path HTTP/1.1"
 | 
					
						
							|  |  |  |     // Retrieve the "/path" part by finding the spaces
 | 
					
						
							|  |  |  |     int addr_start = req.indexOf(' '); | 
					
						
							|  |  |  |     int addr_end = req.indexOf(' ', addr_start + 1); | 
					
						
							|  |  |  |     if (addr_start == -1 || addr_end == -1) { | 
					
						
							|  |  |  |         Serial.print("Invalid request: "); | 
					
						
							|  |  |  |         Serial.println(req); | 
					
						
							|  |  |  |         return; | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  |     req = req.substring(addr_start + 1, addr_end); | 
					
						
							|  |  |  |     Serial.print("Request: "); | 
					
						
							|  |  |  |     Serial.println(req); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     String s; | 
					
						
							|  |  |  |     if (req == "/") | 
					
						
							|  |  |  |     { | 
					
						
							|  |  |  |         IPAddress ip = WiFi.localIP(); | 
					
						
							|  |  |  |         String ipStr = String(ip[0]) + '.' + String(ip[1]) + '.' + String(ip[2]) + '.' + String(ip[3]); | 
					
						
							|  |  |  |         s = "HTTP/1.1 200 OK\r\nContent-Type: text/html\r\n\r\n<!DOCTYPE HTML>\r\n<html>Hello from ESP32 at "; | 
					
						
							|  |  |  |         s += ipStr; | 
					
						
							|  |  |  |         s += "</html>\r\n\r\n"; | 
					
						
							|  |  |  |         Serial.println("Sending 200"); | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  |     else | 
					
						
							|  |  |  |     { | 
					
						
							|  |  |  |         s = "HTTP/1.1 404 Not Found\r\n\r\n"; | 
					
						
							|  |  |  |         Serial.println("Sending 404"); | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  |     client.print(s); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-07-09 18:39:12 +02:00
										 |  |  |     client.stop(); | 
					
						
							| 
									
										
										
										
											2017-03-11 07:15:44 +01:00
										 |  |  |     Serial.println("Done with client"); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 |