HTTPS (SSL) Seiten mit Arduino / EPS8266 aufrufen
Es müssen 4 Sachen gegenüber dem herkömmlichen Code geändert werden.
1. Wie eine Bibliothek eingebunden wird habe ich in diesem Blogartikel schon mal erklärt. #include <WiFiClientSecure.h>
2. Der WiFiClient client; Befehl durch den WiFiClientSecure client; Befehlt ersetzt werden.
3. Der Port muss von 80 auf 443 geändert werden.
4. Man muss dem Arduino / EPS8266 das Sicherheitszertifikat mitteilen. Das macht man mit dem Befehlt client.setFingerprint(fingerprint);
Wenn Ihr nicht wisst wie Ihr an die Daten des Zertifikats ran kommt hier kürz erklärt wo es zu finden ist.
Der SHA1 Fingerabdruck 2F:D7:88:17:0B:CA:08:56:47:A3:08:89:0B:A6:BD:ED:07:A0:45:13 kann nun im Arduino Programm verwendet werden. Es müssen nur noch die Doppelpunkte : durch Leerzeichen ersetzt werden. Hier der Prgrammcode vom Beispiel des Gewächshaus Projektes.
Der Programmcode
#include <ESP8266WiFi.h> #include <WiFiClientSecure.h> #include #include <EEPROM.h> SHT3X sht30(0x45); const char* ssid = "WLAN-NAME"; // SSID of local network const char* password = "WLAN-PASSWORT"; // Password on network const char* host = "WEBSEITE"; //Webserver // SHA1 Fingerabdruck vom Zertifikat const char fingerprint[] PROGMEM = "2F D7 88 17 0B CA 08 56 47 A3 08 89 0B A6 BD ED 07 A0 45 13"; WiFiClient client; char servername[] = "WEBSEITE"; // remote server we will connect to String result; float temp; float feucht; int temp1; int temphigh; const int sleepSeconds = 600; void setup() { Serial.begin(115200); Serial.println("Connecting"); WiFi.begin(ssid, password); while (WiFi.status() != WL_CONNECTED) { delay(500); } Serial.println("Connected"); delay(500); } void loop() { EEPROM.begin(512); temp1 = EEPROM.read(1); temphigh = EEPROM.read(2); // EEPROM wird geprüft ob Daten vorhanden sind die nicht 1 oder 0 sind! // Ist das der Fall wird tempghigh auf 1 gesetzt. if (!(temphigh == 0 || temphigh == 1)) { temphigh = 1; EEPROM.write(2, temphigh); } // Daten aus dem Sensor lesen. if (sht30.get() == 0) { temp = sht30.cTemp; feucht = sht30.humidity; temp1 = temp; EEPROM.write(1, temp1); } String tempString = String(temp, 1); String feuchtString = String(feucht, 1); Serial.println("\nStarting connection to server..."); //Ausgabe ueber serielle Verbindung WiFiClientSecure client; client.setFingerprint(fingerprint); // Temperaturdaten werden über URL Link an die Datenbank übergeben. if (client.connect(host, 443)) { Serial.println("connected to server"); String url = "/ghaus/wm_t1.php"; url += "?t1="; url += temp; client.print(String("GET ") + url + " HTTP/1.1\r\n" + "Host: " + host + "\r\n" + "Connection: close\r\n\r\n"); client.println(); //Verbindungs mit Server aufbauen und HTTP Anfrage senden } // Luftfeuchtigkeitsdaten werden über URL Link an die Datenbank übergeben. if (client.connect(host, 443)) { Serial.println("connected to server"); String url = "/ghaus/wm_f1.php"; url += "?f1="; url += feucht; client.print(String("GET ") + url + " HTTP/1.1\r\n" + "Host: " + host + "\r\n" + "Connection: close\r\n\r\n"); client.println(); //Verbindungs mit Server aufbauen und HTTP Anfrage senden } client.stop(); //Beenden der Verbindung //prüfen ob die Temperatur unter 20 Grad ist und Mail senden. if (temp1 < 20 && temphigh == 1) { temphigh = 0; EEPROM.write(2, temphigh); sendAMail(tempString, feuchtString); } //prüfen ob die Temperatur über 35 Grad ist und Mail senden. if (temp1 > 35 && temphigh == 0) { temphigh = 1; EEPROM.write(2, temphigh); sendAMail(tempString, feuchtString); } EEPROM.commit(); EEPROM.end(); ESP.deepSleep(sleepSeconds * 1000000); } void sendAMail(String temp, String feucht) { WiFiClientSecure client; client.setFingerprint(fingerprint); if (client.connect(servername, 443)) { //starts client connection, checks for connection Serial.println("connected"); client.println("GET /send_email.php?temperature=" + temp + "&humidity=" + feucht + " HTTP/1.1"); //Send data client.println("Host: bau-es-selbst.info"); client.println("Connection: close"); //close 1.1 persistent connection client.println(); //end of get request } else { Serial.println("connection failed"); //error message if no client connect Serial.println(); } while (client.connected() && !client.available()) delay(1); //waits for data while (client.connected() || client.available()) { //connected or data available char c = client.read(); //gets byte from ethernet buffer result = result + c; } client.stop(); //stop client Serial.println(result); }
Folgende Bauteile wurden verwendet:
1x Solarzelle – https://amzn.to/2Lkp85t *
Letzte Aktualisierung am 21.01.2021 / Affiliate Links / Bilder von der Amazon Product Advertising API