mirror of
				https://github.com/esp8266/Arduino.git
				synced 2025-10-31 15:50:55 +03:00 
			
		
		
		
	
		
			
				
	
	
		
			219 lines
		
	
	
		
			7.2 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
			
		
		
	
	
			219 lines
		
	
	
		
			7.2 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
| /*
 | |
|   HelloServerBearSSL - Simple HTTPS server example
 | |
| 
 | |
|   This example demonstrates a basic ESP8266WebServerSecure HTTPS server
 | |
|   that can serve "/" and "/inline" and generate detailed 404 (not found)
 | |
|   HTTP respoinses.  Be sure to update the SSID and PASSWORD before running
 | |
|   to allow connection to your WiFi network.
 | |
| 
 | |
|   Adapted by Earle F. Philhower, III, from the HelloServer.ino example.
 | |
|   This example is released into the public domain.
 | |
| */
 | |
| #include <ESP8266WiFi.h>
 | |
| #include <WiFiClient.h>
 | |
| #include <ESP8266WebServerSecure.h>
 | |
| #include <ESP8266mDNS.h>
 | |
| #include <umm_malloc/umm_malloc.h>
 | |
| #include <umm_malloc/umm_heap_select.h>
 | |
| 
 | |
| #ifndef STASSID
 | |
| #define STASSID "your-ssid"
 | |
| #define STAPSK "your-password"
 | |
| #endif
 | |
| 
 | |
| const char* ssid = STASSID;
 | |
| const char* password = STAPSK;
 | |
| 
 | |
| BearSSL::ESP8266WebServerSecure server(443);
 | |
| BearSSL::ServerSessions serverCache(5);
 | |
| 
 | |
| static const char serverCert[] PROGMEM = R"EOF(
 | |
| -----BEGIN CERTIFICATE-----
 | |
| MIIDSzCCAjMCCQD2ahcfZAwXxDANBgkqhkiG9w0BAQsFADCBiTELMAkGA1UEBhMC
 | |
| VVMxEzARBgNVBAgMCkNhbGlmb3JuaWExFjAUBgNVBAcMDU9yYW5nZSBDb3VudHkx
 | |
| EDAOBgNVBAoMB1ByaXZhZG8xGjAYBgNVBAMMEXNlcnZlci56bGFiZWwuY29tMR8w
 | |
| HQYJKoZIhvcNAQkBFhBlYXJsZUB6bGFiZWwuY29tMB4XDTE4MDMwNjA1NDg0NFoX
 | |
| DTE5MDMwNjA1NDg0NFowRTELMAkGA1UEBhMCQVUxEzARBgNVBAgMClNvbWUtU3Rh
 | |
| dGUxITAfBgNVBAoMGEludGVybmV0IFdpZGdpdHMgUHR5IEx0ZDCCASIwDQYJKoZI
 | |
| hvcNAQEBBQADggEPADCCAQoCggEBAPVKBwbZ+KDSl40YCDkP6y8Sv4iNGvEOZg8Y
 | |
| X7sGvf/xZH7UiCBWPFIRpNmDSaZ3yjsmFqm6sLiYSGSdrBCFqdt9NTp2r7hga6Sj
 | |
| oASSZY4B9pf+GblDy5m10KDx90BFKXdPMCLT+o76Nx9PpCvw13A848wHNG3bpBgI
 | |
| t+w/vJCX3bkRn8yEYAU6GdMbYe7v446hX3kY5UmgeJFr9xz1kq6AzYrMt/UHhNzO
 | |
| S+QckJaY0OGWvmTNspY3xCbbFtIDkCdBS8CZAw+itnofvnWWKQEXlt6otPh5njwy
 | |
| +O1t/Q+Z7OMDYQaH02IQx3188/kW3FzOY32knER1uzjmRO+jhA8CAwEAATANBgkq
 | |
| hkiG9w0BAQsFAAOCAQEAnDrROGRETB0woIcI1+acY1yRq4yAcH2/hdq2MoM+DCyM
 | |
| E8CJaOznGR9ND0ImWpTZqomHOUkOBpvu7u315blQZcLbL1LfHJGRTCHVhvVrcyEb
 | |
| fWTnRtAQdlirUm/obwXIitoz64VSbIVzcqqfg9C6ZREB9JbEX98/9Wp2gVY+31oC
 | |
| JfUvYadSYxh3nblvA4OL+iEZiW8NE3hbW6WPXxvS7Euge0uWMPc4uEcnsE0ZVG3m
 | |
| +TGimzSdeWDvGBRWZHXczC2zD4aoE5vrl+GD2i++c6yjL/otHfYyUpzUfbI2hMAA
 | |
| 5tAF1D5vAAwA8nfPysumlLsIjohJZo4lgnhB++AlOg==
 | |
| -----END CERTIFICATE-----
 | |
| )EOF";
 | |
| 
 | |
| static const char serverKey[] PROGMEM = R"EOF(
 | |
| -----BEGIN RSA PRIVATE KEY-----
 | |
| MIIEpQIBAAKCAQEA9UoHBtn4oNKXjRgIOQ/rLxK/iI0a8Q5mDxhfuwa9//FkftSI
 | |
| IFY8UhGk2YNJpnfKOyYWqbqwuJhIZJ2sEIWp2301OnavuGBrpKOgBJJljgH2l/4Z
 | |
| uUPLmbXQoPH3QEUpd08wItP6jvo3H0+kK/DXcDzjzAc0bdukGAi37D+8kJfduRGf
 | |
| zIRgBToZ0xth7u/jjqFfeRjlSaB4kWv3HPWSroDNisy39QeE3M5L5ByQlpjQ4Za+
 | |
| ZM2yljfEJtsW0gOQJ0FLwJkDD6K2eh++dZYpAReW3qi0+HmePDL47W39D5ns4wNh
 | |
| BofTYhDHfXzz+RbcXM5jfaScRHW7OOZE76OEDwIDAQABAoIBAQDKov5NFbNFQNR8
 | |
| djcM1O7Is6dRaqiwLeH4ZH1pZ3d9QnFwKanPdQ5eCj9yhfhJMrr5xEyCqT0nMn7T
 | |
| yEIGYDXjontfsf8WxWkH2TjvrfWBrHOIOx4LJEvFzyLsYxiMmtZXvy6YByD+Dw2M
 | |
| q2GH/24rRdI2klkozIOyazluTXU8yOsSGxHr/aOa9/sZISgLmaGOOuKI/3Zqjdhr
 | |
| eHeSqoQFt3xXa8jw01YubQUDw/4cv9rk2ytTdAoQUimiKtgtjsggpP1LTq4xcuqN
 | |
| d4jWhTcnorWpbD2cVLxrEbnSR3VuBCJEZv5axg5ZPxLEnlcId8vMtvTRb5nzzszn
 | |
| geYUWDPhAoGBAPyKVNqqwQl44oIeiuRM2FYenMt4voVaz3ExJX2JysrG0jtCPv+Y
 | |
| 84R6Cv3nfITz3EZDWp5sW3OwoGr77lF7Tv9tD6BptEmgBeuca3SHIdhG2MR+tLyx
 | |
| /tkIAarxQcTGsZaSqra3gXOJCMz9h2P5dxpdU+0yeMmOEnAqgQ8qtNBfAoGBAPim
 | |
| RAtnrd0WSlCgqVGYFCvDh1kD5QTNbZc+1PcBHbVV45EmJ2fLXnlDeplIZJdYxmzu
 | |
| DMOxZBYgfeLY9exje00eZJNSj/csjJQqiRftrbvYY7m5njX1kM5K8x4HlynQTDkg
 | |
| rtKO0YZJxxmjRTbFGMegh1SLlFLRIMtehNhOgipRAoGBAPnEEpJGCS9GGLfaX0HW
 | |
| YqwiEK8Il12q57mqgsq7ag7NPwWOymHesxHV5mMh/Dw+NyBi4xAGWRh9mtrUmeqK
 | |
| iyICik773Gxo0RIqnPgd4jJWN3N3YWeynzulOIkJnSNx5BforOCTc3uCD2s2YB5X
 | |
| jx1LKoNQxLeLRN8cmpIWicf/AoGBANjRSsZTKwV9WWIDJoHyxav/vPb+8WYFp8lZ
 | |
| zaRxQbGM6nn4NiZI7OF62N3uhWB/1c7IqTK/bVHqFTuJCrCNcsgld3gLZ2QWYaMV
 | |
| kCPgaj1BjHw4AmB0+EcajfKilcqtSroJ6MfMJ6IclVOizkjbByeTsE4lxDmPCDSt
 | |
| /9MKanBxAoGAY9xo741Pn9WUxDyRplww606ccdNf/ksHWNc/Y2B5SPwxxSnIq8nO
 | |
| j01SmsCUYVFAgZVOTiiycakjYLzxlc6p8BxSVqy6LlJqn95N8OXoQ+bkwUux/ekg
 | |
| gz5JWYhbD6c38khSzJb0pNXCo3EuYAVa36kDM96k1BtWuhRS10Q1VXk=
 | |
| -----END RSA PRIVATE KEY-----
 | |
| )EOF";
 | |
| 
 | |
| 
 | |
| const int led = 13;
 | |
| 
 | |
| void handleRoot() {
 | |
|   digitalWrite(led, 1);
 | |
|   server.send(200, "text/plain", "Hello from esp8266 over HTTPS!");
 | |
|   digitalWrite(led, 0);
 | |
| }
 | |
| 
 | |
| void handleNotFound() {
 | |
|   digitalWrite(led, 1);
 | |
|   String message = "File Not Found\n\n";
 | |
|   message += "URI: ";
 | |
|   message += server.uri();
 | |
|   message += "\nMethod: ";
 | |
|   message += (server.method() == HTTP_GET) ? "GET" : "POST";
 | |
|   message += "\nArguments: ";
 | |
|   message += server.args();
 | |
|   message += "\n";
 | |
|   for (uint8_t i = 0; i < server.args(); i++) { message += " " + server.argName(i) + ": " + server.arg(i) + "\n"; }
 | |
|   server.send(404, "text/plain", message);
 | |
|   digitalWrite(led, 0);
 | |
| }
 | |
| 
 | |
| void setup(void) {
 | |
|   pinMode(led, OUTPUT);
 | |
|   digitalWrite(led, 0);
 | |
|   Serial.begin(115200);
 | |
|   WiFi.begin(ssid, password);
 | |
|   Serial.println("");
 | |
| 
 | |
|   // Wait for connection
 | |
|   while (WiFi.status() != WL_CONNECTED) {
 | |
|     delay(500);
 | |
|     Serial.print(".");
 | |
|   }
 | |
| 
 | |
|   configTime(3 * 3600, 0, "pool.ntp.org", "time.nist.gov");
 | |
| 
 | |
|   Serial.println("");
 | |
|   Serial.print("Connected to ");
 | |
|   Serial.println(ssid);
 | |
|   Serial.print("IP address: ");
 | |
|   Serial.println(WiFi.localIP());
 | |
| 
 | |
|   if (MDNS.begin("esp8266")) { Serial.println("MDNS responder started"); }
 | |
| 
 | |
|   server.getServer().setRSACert(new BearSSL::X509List(serverCert), new BearSSL::PrivateKey(serverKey));
 | |
| 
 | |
|   // Cache SSL sessions to accelerate the TLS handshake.
 | |
|   server.getServer().setCache(&serverCache);
 | |
| 
 | |
|   server.on("/", handleRoot);
 | |
| 
 | |
|   server.on("/inline", []() {
 | |
|     server.send(200, "text/plain", "this works as well");
 | |
|   });
 | |
| 
 | |
|   server.onNotFound(handleNotFound);
 | |
| 
 | |
|   server.begin();
 | |
|   Serial.println("HTTPS server started");
 | |
| }
 | |
| 
 | |
| extern "C" void stack_thunk_dump_stack();
 | |
| 
 | |
| void processKey(Print& out, int hotKey) {
 | |
|   switch (hotKey) {
 | |
|     case 'd':
 | |
|       {
 | |
|         HeapSelectDram ephemeral;
 | |
|         umm_info(NULL, true);
 | |
|         break;
 | |
|       }
 | |
|     case 'i':
 | |
|       {
 | |
|         HeapSelectIram ephemeral;
 | |
|         umm_info(NULL, true);
 | |
|         break;
 | |
|       }
 | |
|     case 'h':
 | |
|       {
 | |
|         {
 | |
|           HeapSelectIram ephemeral;
 | |
|           Serial.printf(PSTR("IRAM ESP.getFreeHeap:  %u\n"), ESP.getFreeHeap());
 | |
|         }
 | |
|         {
 | |
|           HeapSelectDram ephemeral;
 | |
|           Serial.printf(PSTR("DRAM ESP.getFreeHeap:  %u\n"), ESP.getFreeHeap());
 | |
|         }
 | |
|         break;
 | |
|       }
 | |
| #ifdef DEBUG_ESP_PORT
 | |
|     // From this context stack_thunk_dump_stack() will only work when Serial
 | |
|     // debug is enabled.
 | |
|     case 'p':
 | |
|       out.println(F("Calling stack_thunk_dump_stack();"));
 | |
|       stack_thunk_dump_stack();
 | |
|       break;
 | |
| #endif
 | |
|     case 'R':
 | |
|       out.printf_P(PSTR("Restart, ESP.restart(); ...\r\n"));
 | |
|       ESP.restart();
 | |
|       break;
 | |
|     case '\r': out.println();
 | |
|     case '\n': break;
 | |
|     case '?':
 | |
|       out.println();
 | |
|       out.println(F("Press a key + <enter>"));
 | |
|       out.println(F("  h    - Free Heap Report;"));
 | |
|       out.println(F("  i    - iRAM umm_info(null, true);"));
 | |
|       out.println(F("  d    - dRAM umm_info(null, true);"));
 | |
| #ifdef DEBUG_ESP_PORT
 | |
|       out.println(F("  p    - call stack_thunk_dump_stack();"));
 | |
| #endif
 | |
|       out.println(F("  R    - Restart, ESP.restart();"));
 | |
|       out.println(F("  ?    - Print Help"));
 | |
|       out.println();
 | |
|       break;
 | |
|     default:
 | |
|       out.printf_P(PSTR("\"%c\" - Not an option?  / ? - help"), hotKey);
 | |
|       out.println();
 | |
|       processKey(out, '?');
 | |
|       break;
 | |
|   }
 | |
| }
 | |
| 
 | |
| 
 | |
| void loop(void) {
 | |
|   server.handleClient();
 | |
|   MDNS.update();
 | |
|   if (Serial.available() > 0) {
 | |
|     int hotKey = Serial.read();
 | |
|     processKey(Serial, hotKey);
 | |
|   }
 | |
| }
 |