mirror of
				https://github.com/0xFEEDC0DE64/arduino-esp32.git
				synced 2025-11-04 08:01:38 +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);
							 | 
						||
| 
								 | 
							
								}
							 |