HTTPS (SSL) Seiten mit Arduino / EPS8266 aufrufen

title

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:

Letzte Aktualisierung am 18.09.2020 / Affiliate Links / Bilder von der Amazon Product Advertising API