Hendrik Langer
7 years ago
1 changed files with 147 additions and 0 deletions
@ -0,0 +1,147 @@ |
|||||
|
/*
|
||||
|
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> |
||||
|
#include "esp32-hal-ledc.h" |
||||
|
|
||||
|
const char* ssid = "ssid"; |
||||
|
const char* password = "password"; |
||||
|
|
||||
|
#define SERVO_LOW 4000 |
||||
|
#define SERVO_HIGH 8000 |
||||
|
|
||||
|
#define SERVO_CHANNEL 5 |
||||
|
|
||||
|
#define TIMER_WIDTH 16 |
||||
|
|
||||
|
// 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
|
||||
|
// the fully-qualified domain name is "esp8266.local"
|
||||
|
// - 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); |
||||
|
|
||||
|
ledcSetup(1, 50, TIMER_WIDTH); |
||||
|
ledcAttachPin(SERVO_CHANNEL,1); |
||||
|
ledcWrite(1, SERVO_LOW); |
||||
|
delay(1000); |
||||
|
ledcDetachPin(SERVO_CHANNEL); |
||||
|
} |
||||
|
|
||||
|
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); |
||||
|
client.flush(); |
||||
|
|
||||
|
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 if (req == "/push") { |
||||
|
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, pushing!"; |
||||
|
s += "</html>\r\n\r\n"; |
||||
|
Serial.println("/push"); |
||||
|
ledcAttachPin(SERVO_CHANNEL,1); |
||||
|
ledcWrite(1, SERVO_HIGH); |
||||
|
delay(1500); |
||||
|
ledcWrite(1, SERVO_LOW); |
||||
|
delay(1500); |
||||
|
ledcDetachPin(SERVO_CHANNEL); |
||||
|
} |
||||
|
else |
||||
|
{ |
||||
|
s = "HTTP/1.1 404 Not Found\r\n\r\n"; |
||||
|
Serial.println("Sending 404"); |
||||
|
} |
||||
|
client.print(s); |
||||
|
|
||||
|
Serial.println("Done with client"); |
||||
|
} |
||||
|
|
Loading…
Reference in new issue