mirror of
				https://github.com/0xFEEDC0DE64/arduino-esp32.git
				synced 2025-10-29 21:21:42 +01:00 
			
		
		
		
	
		
			
	
	
		
			148 lines
		
	
	
		
			5.0 KiB
		
	
	
	
		
			Arduino
		
	
	
	
	
	
		
		
			
		
	
	
			148 lines
		
	
	
		
			5.0 KiB
		
	
	
	
		
			Arduino
		
	
	
	
	
	
|   | /**
 | ||
|  |    BasicHTTPSClient.ino | ||
|  | 
 | ||
|  |     Created on: 14.10.2018 | ||
|  | 
 | ||
|  | */ | ||
|  | 
 | ||
|  | #include <Arduino.h>
 | ||
|  | 
 | ||
|  | #include <WiFi.h>
 | ||
|  | #include <WiFiMulti.h>
 | ||
|  | 
 | ||
|  | #include <HTTPClient.h>
 | ||
|  | 
 | ||
|  | #include <WiFiClientSecure.h>
 | ||
|  | 
 | ||
|  | // This is GandiStandardSSLCA2.pem, the root Certificate Authority that signed 
 | ||
|  | // the server certifcate for the demo server https://jigsaw.w3.org in this
 | ||
|  | // example. This certificate is valid until Sep 11 23:59:59 2024 GMT
 | ||
|  | const char* rootCACertificate = \ | ||
|  | "-----BEGIN CERTIFICATE-----\n" \ | ||
|  | "MIIF6TCCA9GgAwIBAgIQBeTcO5Q4qzuFl8umoZhQ4zANBgkqhkiG9w0BAQwFADCB\n" \ | ||
|  | "iDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCk5ldyBKZXJzZXkxFDASBgNVBAcTC0pl\n" \ | ||
|  | "cnNleSBDaXR5MR4wHAYDVQQKExVUaGUgVVNFUlRSVVNUIE5ldHdvcmsxLjAsBgNV\n" \ | ||
|  | "BAMTJVVTRVJUcnVzdCBSU0EgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwHhcNMTQw\n" \ | ||
|  | "OTEyMDAwMDAwWhcNMjQwOTExMjM1OTU5WjBfMQswCQYDVQQGEwJGUjEOMAwGA1UE\n" \ | ||
|  | "CBMFUGFyaXMxDjAMBgNVBAcTBVBhcmlzMQ4wDAYDVQQKEwVHYW5kaTEgMB4GA1UE\n" \ | ||
|  | "AxMXR2FuZGkgU3RhbmRhcmQgU1NMIENBIDIwggEiMA0GCSqGSIb3DQEBAQUAA4IB\n" \ | ||
|  | "DwAwggEKAoIBAQCUBC2meZV0/9UAPPWu2JSxKXzAjwsLibmCg5duNyj1ohrP0pIL\n" \ | ||
|  | "m6jTh5RzhBCf3DXLwi2SrCG5yzv8QMHBgyHwv/j2nPqcghDA0I5O5Q1MsJFckLSk\n" \ | ||
|  | "QFEW2uSEEi0FXKEfFxkkUap66uEHG4aNAXLy59SDIzme4OFMH2sio7QQZrDtgpbX\n" \ | ||
|  | "bmq08j+1QvzdirWrui0dOnWbMdw+naxb00ENbLAb9Tr1eeohovj0M1JLJC0epJmx\n" \ | ||
|  | "bUi8uBL+cnB89/sCdfSN3tbawKAyGlLfOGsuRTg/PwSWAP2h9KK71RfWJ3wbWFmV\n" \ | ||
|  | "XooS/ZyrgT5SKEhRhWvzkbKGPym1bgNi7tYFAgMBAAGjggF1MIIBcTAfBgNVHSME\n" \ | ||
|  | "GDAWgBRTeb9aqitKz1SA4dibwJ3ysgNmyzAdBgNVHQ4EFgQUs5Cn2MmvTs1hPJ98\n" \ | ||
|  | "rV1/Qf1pMOowDgYDVR0PAQH/BAQDAgGGMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYD\n" \ | ||
|  | "VR0lBBYwFAYIKwYBBQUHAwEGCCsGAQUFBwMCMCIGA1UdIAQbMBkwDQYLKwYBBAGy\n" \ | ||
|  | "MQECAhowCAYGZ4EMAQIBMFAGA1UdHwRJMEcwRaBDoEGGP2h0dHA6Ly9jcmwudXNl\n" \ | ||
|  | "cnRydXN0LmNvbS9VU0VSVHJ1c3RSU0FDZXJ0aWZpY2F0aW9uQXV0aG9yaXR5LmNy\n" \ | ||
|  | "bDB2BggrBgEFBQcBAQRqMGgwPwYIKwYBBQUHMAKGM2h0dHA6Ly9jcnQudXNlcnRy\n" \ | ||
|  | "dXN0LmNvbS9VU0VSVHJ1c3RSU0FBZGRUcnVzdENBLmNydDAlBggrBgEFBQcwAYYZ\n" \ | ||
|  | "aHR0cDovL29jc3AudXNlcnRydXN0LmNvbTANBgkqhkiG9w0BAQwFAAOCAgEAWGf9\n" \ | ||
|  | "crJq13xhlhl+2UNG0SZ9yFP6ZrBrLafTqlb3OojQO3LJUP33WbKqaPWMcwO7lWUX\n" \ | ||
|  | "zi8c3ZgTopHJ7qFAbjyY1lzzsiI8Le4bpOHeICQW8owRc5E69vrOJAKHypPstLbI\n" \ | ||
|  | "FhfFcvwnQPYT/pOmnVHvPCvYd1ebjGU6NSU2t7WKY28HJ5OxYI2A25bUeo8tqxyI\n" \ | ||
|  | "yW5+1mUfr13KFj8oRtygNeX56eXVlogMT8a3d2dIhCe2H7Bo26y/d7CQuKLJHDJd\n" \ | ||
|  | "ArolQ4FCR7vY4Y8MDEZf7kYzawMUgtN+zY+vkNaOJH1AQrRqahfGlZfh8jjNp+20\n" \ | ||
|  | "J0CT33KpuMZmYzc4ZCIwojvxuch7yPspOqsactIGEk72gtQjbz7Dk+XYtsDe3CMW\n" \ | ||
|  | "1hMwt6CaDixVBgBwAc/qOR2A24j3pSC4W/0xJmmPLQphgzpHphNULB7j7UTKvGof\n" \ | ||
|  | "KA5R2d4On3XNDgOVyvnFqSot/kGkoUeuDcL5OWYzSlvhhChZbH2UF3bkRYKtcCD9\n" \ | ||
|  | "0m9jqNf6oDP6N8v3smWe2lBvP+Sn845dWDKXcCMu5/3EFZucJ48y7RetWIExKREa\n" \ | ||
|  | "m9T8bJUox04FB6b9HbwZ4ui3uRGKLXASUoWNjDNKD/yZkuBjcNqllEdjB+dYxzFf\n" \ | ||
|  | "BT02Vf6Dsuimrdfp5gJ0iHRc2jTbkNJtUQoj1iM=\n" \ | ||
|  | "-----END CERTIFICATE-----\n"; | ||
|  | 
 | ||
|  | // Not sure if WiFiClientSecure checks the validity date of the certificate. 
 | ||
|  | // Setting clock just to be sure...
 | ||
|  | void setClock() { | ||
|  |   configTime(0, 0, "pool.ntp.org", "time.nist.gov"); | ||
|  | 
 | ||
|  |   Serial.print(F("Waiting for NTP time sync: ")); | ||
|  |   time_t nowSecs = time(nullptr); | ||
|  |   while (nowSecs < 8 * 3600 * 2) { | ||
|  |     delay(500); | ||
|  |     Serial.print(F(".")); | ||
|  |     yield(); | ||
|  |     nowSecs = time(nullptr); | ||
|  |   } | ||
|  | 
 | ||
|  |   Serial.println(); | ||
|  |   struct tm timeinfo; | ||
|  |   gmtime_r(&nowSecs, &timeinfo); | ||
|  |   Serial.print(F("Current time: ")); | ||
|  |   Serial.print(asctime(&timeinfo)); | ||
|  | } | ||
|  | 
 | ||
|  | 
 | ||
|  | WiFiMulti WiFiMulti; | ||
|  | 
 | ||
|  | void setup() { | ||
|  | 
 | ||
|  |   Serial.begin(115200); | ||
|  |   // Serial.setDebugOutput(true);
 | ||
|  | 
 | ||
|  |   Serial.println(); | ||
|  |   Serial.println(); | ||
|  |   Serial.println(); | ||
|  | 
 | ||
|  |   WiFi.mode(WIFI_STA); | ||
|  |   WiFiMulti.addAP("SSID", "PASSWORD"); | ||
|  | 
 | ||
|  |   // wait for WiFi connection
 | ||
|  |   Serial.print("Waiting for WiFi to connect..."); | ||
|  |   while ((WiFiMulti.run() != WL_CONNECTED)) { | ||
|  |     Serial.print("."); | ||
|  |   } | ||
|  |   Serial.println(" connected"); | ||
|  | 
 | ||
|  |   setClock();   | ||
|  | } | ||
|  | 
 | ||
|  | void loop() { | ||
|  |   WiFiClientSecure *client = new WiFiClientSecure; | ||
|  |   if(client) { | ||
|  |     client -> setCACert(rootCACertificate); | ||
|  | 
 | ||
|  |     { | ||
|  |       // Add a scoping block for HTTPClient https to make sure it is destroyed before WiFiClientSecure *client is 
 | ||
|  |       HTTPClient https; | ||
|  |    | ||
|  |       Serial.print("[HTTPS] begin...\n"); | ||
|  |       if (https.begin(*client, "https://jigsaw.w3.org/HTTP/connection.html")) {  // HTTPS
 | ||
|  |         Serial.print("[HTTPS] GET...\n"); | ||
|  |         // start connection and send HTTP header
 | ||
|  |         int httpCode = https.GET(); | ||
|  |    | ||
|  |         // httpCode will be negative on error
 | ||
|  |         if (httpCode > 0) { | ||
|  |           // HTTP header has been send and Server response header has been handled
 | ||
|  |           Serial.printf("[HTTPS] GET... code: %d\n", httpCode); | ||
|  |    | ||
|  |           // file found at server
 | ||
|  |           if (httpCode == HTTP_CODE_OK || httpCode == HTTP_CODE_MOVED_PERMANENTLY) { | ||
|  |             String payload = https.getString(); | ||
|  |             Serial.println(payload); | ||
|  |           } | ||
|  |         } else { | ||
|  |           Serial.printf("[HTTPS] GET... failed, error: %s\n", https.errorToString(httpCode).c_str()); | ||
|  |         } | ||
|  |    | ||
|  |         https.end(); | ||
|  |       } else { | ||
|  |         Serial.printf("[HTTPS] Unable to connect\n"); | ||
|  |       } | ||
|  | 
 | ||
|  |       // End extra scoping block
 | ||
|  |     } | ||
|  |    | ||
|  |     delete client; | ||
|  |   } else { | ||
|  |     Serial.println("Unable to create client"); | ||
|  |   } | ||
|  | 
 | ||
|  |   Serial.println(); | ||
|  |   Serial.println("Waiting 10s before the next round..."); | ||
|  |   delay(10000); | ||
|  | } |