Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- **
- * Example for the ESP32 HTTP(S) Webserver
- *
- * IMPORTANT NOTE:
- * To run this script, your need to
- * 1) Enter your WiFi SSID and PSK below this comment
- * 2) Make sure to have certificate data available. You will find a
- * shell script and instructions to do so in the library folder
- * under extras/
- *
- * This script will install an HTTPS Server on your ESP32 with the following
- * functionalities:
- * - Show simple page on web server root
- * - 404 for everything else
- */
- const char* WIFI_SSID = "SecureConnection";
- const char* WIFI_PSK = "password";
- #define NETWORK_CONNECTION 1
- //const char* WIFI_SSID = "TBMiniRouter";
- //const char* WIFI_PSK = "password";
- //#define NETWORK_CONNECTION 0
- // Include certificate data (see note above)
- #include "cert.h"
- #include "private_key.h"
- // Binary data for the favicon
- #include "favicon.h"
- // We will use wifi
- #include <WiFi.h>
- // Includes for the server
- #include <HTTPSServer.hpp>
- #include <SSLCert.hpp>
- #include <HTTPRequest.hpp>
- #include <HTTPResponse.hpp>
- /* Put IP Address details */
- IPAddress localIP(10,10,10,100);
- IPAddress gatewayIP(10,10,10,1);
- IPAddress subnetMask(255,255,255,0);
- // The HTTPS Server comes in a separate namespace. For easier use, include it here.
- using namespace httpsserver;
- // Create an SSL certificate object from the files included above
- SSLCert cert = SSLCert(
- example_crt_DER, example_crt_DER_len,
- example_key_DER, example_key_DER_len
- );
- // Create an SSL-enabled server that uses the certificate
- // The contstructor takes some more parameters, but we go for default values here.
- HTTPSServer secureServer = HTTPSServer(&cert);
- // Declare some handler functions for the various URLs on the server
- // The signature is always the same for those functions. They get two parameters,
- // which are pointers to the request data (read request body, headers, ...) and
- // to the response data (write response, set status code, ...)
- void handleRoot(HTTPRequest * req, HTTPResponse * res);
- void handleFavicon(HTTPRequest * req, HTTPResponse * res);
- void handle404(HTTPRequest * req, HTTPResponse * res);
- void ConfigureWiFi(int Switch)
- {
- Serial.print("configure WifFi: ");
- Serial.println(Switch);
- if(Switch)
- {
- // Connect to Wi-Fi network with SSID and password
- WiFi.mode(WIFI_AP);
- WiFi.softAPConfig(localIP,gatewayIP,subnetMask);
- WiFi.softAP(WIFI_SSID,WIFI_PSK);
- Serial.print("creating access point ");
- Serial.println(WIFI_SSID);
- }
- else
- {
- // Connect to WiFi
- Serial.println("Setting up WiFi");
- WiFi.begin(WIFI_SSID, WIFI_PSK);
- while (WiFi.status() != WL_CONNECTED) {
- Serial.print(".");
- delay(500);
- }
- Serial.print("Connected. IP=");
- Serial.println(WiFi.localIP());
- }
- }
- void setup() {
- // For logging
- Serial.begin(115200);
- ConfigureWiFi(NETWORK_CONNECTION);
- // For every resource available on the server, we need to create a ResourceNode
- // The ResourceNode links URL and HTTP method to a handler function
- ResourceNode * nodeRoot = new ResourceNode("/", "GET", &handleRoot);
- ResourceNode * nodeFavicon = new ResourceNode("/favicon.ico", "GET", &handleFavicon);
- ResourceNode * node404 = new ResourceNode("", "GET", &handle404);
- // Add the root node to the server
- secureServer.registerNode(nodeRoot);
- // Add the favicon
- secureServer.registerNode(nodeFavicon);
- // Add the 404 not found node to the server.
- // The path is ignored for the default node.
- secureServer.setDefaultNode(node404);
- Serial.println("Starting server...");
- secureServer.start();
- if (secureServer.isRunning()) {
- Serial.println("Server ready.");
- }
- }
- void loop() {
- // This call will let the server do its work
- secureServer.loop();
- // Other code would go here...
- delay(1);
- }
- void handleRoot(HTTPRequest * req, HTTPResponse * res) {
- // Status code is 200 OK by default.
- // We want to deliver a simple HTML page, so we send a corresponding content type:
- res->setHeader("Content-Type", "text/html");
- // The response implements the Print interface, so you can use it just like
- // you would write to Serial etc.
- res->println("<!DOCTYPE html>");
- res->println("<html>");
- res->println("<head><title>Hello World!</title></head>");
- res->println("<body>");
- res->println("<h1>Hello World!</h1>");
- res->print("<p>Your server is running for ");
- // A bit of dynamic data: Show the uptime
- res->print((int)(millis()/1000), DEC);
- res->println(" seconds.</p>");
- res->println("</body>");
- res->println("</html>");
- }
- void handleFavicon(HTTPRequest * req, HTTPResponse * res) {
- // Set Content-Type
- res->setHeader("Content-Type", "image/vnd.microsoft.icon");
- // Write data from header file
- res->write(FAVICON_DATA, FAVICON_LENGTH);
- }
- void handle404(HTTPRequest * req, HTTPResponse * res) {
- // Discard request body, if we received any
- // We do this, as this is the default node and may also server POST/PUT requests
- req->discardRequestBody();
- // Set the response status
- res->setStatusCode(404);
- res->setStatusText("Not Found");
- // Set content type of the response
- res->setHeader("Content-Type", "text/html");
- // Write a tiny HTTP page
- res->println("<!DOCTYPE html>");
- res->println("<html>");
- res->println("<head><title>Not Found</title></head>");
- res->println("<body><h1>404 Not Found</h1><p>The requested resource was not found on this server.</p></body>");
- res->println("</html>");
- }
Add Comment
Please, Sign In to add comment